Presentasi sedang didownload. Silahkan tunggu

Presentasi sedang didownload. Silahkan tunggu

QUEUE Pertemuan ke-6 T 0026.

Presentasi serupa


Presentasi berjudul: "QUEUE Pertemuan ke-6 T 0026."— Transcript presentasi:

1 QUEUE Pertemuan ke-6 T 0026

2 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

3 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

4 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;

5 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

6 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 */

7 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 */

8 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

9 Circular Queue : Empty Empty : front = rear [0] [1] [2] [3] [4] [5]

10 Circular Queue : Full Full : front = (rear + 1) % MAX_QUEUE_SIZE [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

11 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

12 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

13 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;

14 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];

15 Implementasi Queue dengan Single Linked-List
front nama ip link nama ip link nama ip link Tono 3.8 Dewi 4.0 Ani 3.7 NULL rear Typedef struct elqueue { char name[10]; float ip; struct elqueue *link; }


Download ppt "QUEUE Pertemuan ke-6 T 0026."

Presentasi serupa


Iklan oleh Google