Upload presentasi
Presentasi sedang didownload. Silahkan tunggu
1
Pertemuan 6 Queue dengan Array
Matakuliah : T0026/Struktur Data Tahun : 2005 Versi : 1/1 Pertemuan 6 Queue dengan Array
2
Learning Outcomes Pada akhir pertemuan ini, diharapkan mahasiswa akan mampu : Mahasiswa dapat menghasilkan program modular ADT queue yang diimplementasikan dengan array
3
Kegunaan dan spesifikasi Queue Implementasi queue dengan array
Outline Materi Pengertian Queue Kegunaan dan spesifikasi Queue Implementasi queue dengan array Operasi Queue Circular Queue
4
Queue D C B A Bentuk khusus dari ordered list
Data di insert di akhir list Data di delete di awal list A R F B C D
5
Elemen paling belakang
Queue sebagai ADT Misal, queue Q terdiri dari n elemen Q = ( ao , a1 , … , ai , ai+1 , …, an-1 ) Elemen paling depan FRONT Elemen paling belakang REAR ao : elemen yang diinsert pertama kali an-1 : elemen yang diinsert terakhir
6
Yang paling sederhana : array 1-D Disebut Sequential Queue
Representasi Queue Yang paling sederhana : array 1-D Disebut Sequential Queue 2 variabel indikator REAR dan FRONT #define MAX_QUEUE_SIZE 100 eltype queue[MAX_QUEUE_SIZE]; int rear = -1; int front = -1;
7
Aplikasi Queue dengan Array 1-D
front rear Q[0] Q[1] Q[2] Q[3] Comments -1 Queue kosong J1 Masuk Job 1 1 J2 Masuk Job 2 2 J3 Masuk Job 3 Hapus Job 1 Hapus Job 2
8
Sequential Queue : Add Queue
void addq (int *rear, eltype item) { if (*rear == MAX_QUEUE_SIZE-1) { printf (“Queue penuh\n”); return; } queue[++*rear] = item; /* indeks rear di-increment sebelum insert data baru */
9
Sequential Queue : Delete Queue
eltype deleteq(int *front, int rear){ if (front == rear) { printf (“queue empty\n”); return; } return queue(++*front); /*indeks front di-increment sebelum passing nilai yang disimpan di queue */
10
Kekurangan Sequential Queue
Setelah beberapa data insert dan delete dari queue, REAR dan FRONT bergerak ke kanan, hingga REAR mencapai MAX_QUEUE_SIZE-1. Jika REAR mencapai maksimum, queue akan dideteksi PENUH, meskipun beberapa lokasi di depan FRONT kosong. Solusi : elemen queue harus digeser ke depan shg FRONT=-1 dan REAR != MAX_QUEUE_SIZE-1 Tetapi perlu waktu untuk menggeser elemen satu persatu. Lebih baik gunakan circular array untuk queue
11
Circular Queue : Empty Empty : front = rear [0] [1] [2] [3] [4] [5]
12
front = (rear + 1) % MAX_QUEUE_SIZE
Circular Queue : Full [0] [1] [2] [3] [4] [5] J4 J5 J6 J7 J8 F R [0] [1] [2] [3] [4] [5] J1 J2 J3 J4 J5 F R Full : front = (rear + 1) % MAX_QUEUE_SIZE
13
Circular Queue : Insert
[0] [1] [2] [3] [4] [5] J1 F R R [2] [3] J2 [1] J1 [4] [0] [5] F Insert : REAR berubah, FRONT tetap *rear = (*rear+1) % MAX_QUEUE_SIZE
14
Circular Queue : Delete
[0] [1] [2] [3] [4] [5] J4 J5 J6 J7 J8 F R R [0] [1] [2] [3] [4] [5] J4 J5 J6 J7 J8 F Delete : FRONT berubah, REAR tetap *front = (*front+1) % MAX_QUEUE_SIZE
15
Circular Queue : Add Queue
void addq(int front,int *rear, eltype item){ *rear = (*rear+1)%MAX_QUEUE_SIZE; if (front = *rear) { printf (“Queue full\n”); return; } queue[*rear] = item;
16
Circular Queue : Delete Queue
eltype deleteq (int *front, int rear){ eltype item; if (*front == rear) { printf (“Queue empty\n”); return; } *front = (*front+1)%MAX_QUEUE_SIZE; return queue[*front];
Presentasi serupa
© 2024 SlidePlayer.info Inc.
All rights reserved.