You are on page 1of 10

02/05/2011

2

Queue/rmb 30/10/'06

• Apa yang dimaksud queue ?
• Apa kegunaan queues ?
PI1043 Struktur Data • Properti apa saja yang dimiliki queues ?
• Bagaimana implementasinya?
Queue Data Structure

3 4

Queue/rmb 30/10/'06 Queue/rmb 30/10/'06

Apa yang dimaksud queue ?
• Queue adalah list yang memiliki “aturan main”
dalam proses inserted dan removed data. Istilah
lain: FIFO (first in first out)
• Insertion atau penambahan data hanya
dilakukan di salah satu ujung list (rear) dan
deletions hanya dilakukan di ujung lainnya
(front)
• Queue menyerupai sebuah antrian dalam dunia
nyata

1

• Formasi dari structs. 2. Jika Q tidak kosong. • Struktur data berkait dengan menggunakan pointer 7 8 Queue/rmb 30/10/'06 Queue/rmb 30/10/'06 Queue ADT Queue ADT Sebuah queue Q.” 1. Q. 3. hapus sebuah item pada ujung depan queue. Menyisipkan item baru pada ujung belakang (rear) queue. Menentukan sebuah queue kosong atau tidak. dll. strings. urban transport . Inisialisasi queue Q menjadi empty queue. dari item-item bertipe T adalah deretan item bertipe T yang memiliki operasi-operasi sebagai berikut: “State abstractly what the operations do. Q. (front). 2 . 5. arrays. Data structures: ▫ simulation and modeling: contoh air traffic • Biasanya bertipe komposit control. 4. contoh antrian tersebut untuk mencetak (printing). without saying in detail how they are accomplished. 02/05/2011 5 6 Queue/rmb 30/10/'06 Queue/rmb 30/10/'06 Apa kegunaan queue ? Desain abstrak • Mengatur layanan terhadap suatu task dalam Abstract Data Type (ADT): suatu sistem agar tercipta “fair treatment” • Kumpulan struktur data bersamaan dengan ▫ client-server systems • Kumpulan operasi terhadap struktur data ▫ operating systems: antrian task. is empty. Menentukan sebuah queue penuh atau tidak. Q. is full. Q.

/* Defined Operations */ menggunakan array: extern Queue *QueueNew ( void ). remove its first item.h */ typedef char ItemType . 3 . /* Returns 1 (True) if (and only if) the queue Q is empty*/ extern int QueueFull ( Queue *Q ). /* Initialize the queue Q to be the empty queue.. Queue *Q ). ▫ Hal yang sama untuk Front: Front = (Front + 1) % N. ▫ Rear = (Rear + 1) % N. /* If Q is not full.N- 1. Implementasi Queue Untuk representasi sekuensial typedef struct Queue Queue . set dengan 0. 02/05/2011 9 10 Queue/rmb 30/10/'06 Queue/rmb 30/10/'06 Queue ADT interface /* File: Queue. /* If Q is not empty. ItemType *F ). put it in F. jika rear=N. /* Returns 1 (True) if (and only if) the queue Q is full */ extern void QueueInsert ( ItemType R. • Menggunakan modular arithmetic: ekspresi X % N menghasilkan nilai X tetap dalam range 0. insert new item R onto the end of Q */ extern void QueueRemove ( Queue *Q. ▫ Set Rear: tambahkan nilai rear lama dengan 1. */ extern int QueueEmpty ( Queue *Q ). */ 11 12 Queue/rmb 30/10/'06 Queue/rmb 30/10/'06 Queues dengan Circular Track Queues dengan Circular Track Bagaiman implementasi dalam program? • Menggunakan linear array berukuran N.

h> ▫ Array indeks (Front) #include "Queue. } . QueueFull. – indeks Rear diset = 0. Rear. QueueRemove (slide sebelumnya) ItemType Items[MAXQUEUESIZE]. Queue *Q = calloc( 1.c berisi definisi dan operasi QueueNew. struct Queue { QueueEmpty. Q->Count = 0.h> ▫ number of items pada queue sebagai Count member ▫ Array item queue sebagai Items member #include <stdlib.h" ▫ Array indeks (Rear) #define MAXQUEUESIZE 100 • File Queue. QueueInsert dan int Count. 15 16 Queue/rmb 30/10/'06 Queue/rmb 30/10/'06 Sequential Queue Representation (I) Sequential Queue Representation /* Initialize the queue Q to be the empty queue. – indeks Front diset = 0. Front. } 4 . */ Initialization: • inisialisasi queue Q menjadi queue kosong. Q->Rear = 0. sizeof( Queue ) ) . /* File: Queue. Q->Front = 0. Queue * QueueNew ( void ) { • sebuah queue disebut empty jika Count =0.c */ • Sebuah queue merupakan struct yang mengandung: #include <stdio. 02/05/2011 13 14 Queue/rmb 30/10/'06 Queue/rmb 30/10/'06 Sequential Queue Representation (I) Sequential Queue Representation (I) • Definisikan MAXQUEUESIZE sebagai konstanta. return Q .

printf("REMOVE:Not allowed on empty q. Q->Rear = (Q->Rear + 1) % MAXQUEUESIZE. *F = Q->Items [Q->Front]. * 1. /* Returns 1 (True) if (and only if) /* Returns 1 (True) if (and only if) * the queue Q is empty.\n"). incrementing Rear by one (WRAP AROUND!). return ( Q->Count == MAXQUEUESIZE ). Q->Front = (Q->Front + 1) % MAXQUEUESIZE. Q. } } } } 5 . insert a new item R onto rear of Q by: /* If Q is not empty. -.(Q->Count). * 2.exit(1). incrementing Count by one. MAXQUEUESIZE. */ */ void QueueRemove ( Queue *Q. Queue *Q) { { if (Q->Count == MAXQUEUESIZE) { if ( Q->Count == 0 ) { printf("INSERT:Not allowed on full queue.exit(1). is empty. atau tidak. decrementing Count by one. is full. taking F from the item array at position Front. * 2. remove first item and put it in F by: * 1. * 3. storing R in the item array at position Rear. } } 19 20 Queue/rmb 30/10/'06 Queue/rmb 30/10/'06 Sequential Queue Representation Sequential Queue Representation Insert a new item onto the rear of the queue. remove sebuah item dari front sebuah Q.\n"). ▫ sebuah queue didefinisikan full jika Count = ▫ Sebuah queue didefinisikan empty jika Count =0. */ */ int QueueEmpty ( Queue *Q ) int QueueFull ( Queue *Q ) { { return ( Q->Count == 0 ). * 3. ItemType *F ) void QueueInsert (ItemType R. /* If Q is not full. Q. } else { } else { Q->Items[Q->Rear] = R. Q. ++ (Q->Count). Jika queue Q is not empty. 02/05/2011 17 18 Queue/rmb 30/10/'06 Queue/rmb 30/10/'06 Sequential Queue Representation Sequential Queue Representation • Empty test: menentukan sebuah queue kosong • Full test: menentukan sebuah queue penuh atau tidak. incrementing Front by one (WRAP AROUND!). * the queue Q is full.

tq ).h" /* Assume ItemType is char. . QueueRemove ( tq. C ). tq = QueueNew ( ). printf ( "Just got: %c. b Queue: a 6 . &C ).. /* Variable TestQueue of type Queue. tq ).h" /* Assume ItemType is char. tq ). /* Make tq empty. 02/05/2011 21 22 Queue/rmb 30/10/'06 Queue/rmb 30/10/'06 Using the Queue interface Using the Queue interface #include "QueueInterface. } } Queue: Empty = tulis kode tersebut tanpa mengetahui bagaimana queue tersebut diimplementasikan.h" /* Assume ItemType is char. C ). QueueInsert ( ’c’.\n". QueueRemove ( tq. C ). tq ). &C ). C ). QueueInsert ( ’a’.. &C ). printf ( "Just got: %c. tq ).\n".*/ /* Access operations and types for stacks. printf ( "Just got: %c. printf ( "Just got: %c.\n". */ tq = QueueNew ( ). QueueInsert ( ’b’. /* Variable TestQueue of type Queue. C ). &C ). &C ). &C ).. QueueRemove ( tq. . . printf ( "Just got: %c.. tq ). QueueInsert ( ’b’. QueueInsert ( ’d’. &C ). char C. tq ). QueueInsert ( ’b’. tq ). QueueInsert ( ’c’. QueueInsert ( ’c’. printf ( "Just got: %c. tq ).\n". QueueInsert ( ’a’.. tq ). C ). /* Make tq empty. QueueRemove ( tq. C ). QueueRemove ( tq.*/ #include "QueueInterface.\n". &C ). } } Queue: a..*/ /* Access operations and types for stacks. QueueInsert ( ’b’. tq ). . printf ( "Just got: %c.\n". */ Queue *tq. QueueRemove ( tq. */ char C. QueueInsert ( ’d’. tq ). */ QueueInsert ( ’a’. QueueInsert ( ’d’. /* Variable TestQueue of type Queue.*/ int main ( void ) int main ( void ) { { Queue *tq. C ). QueueRemove ( tq..h" /* Assume ItemType is char. tq ). QueueInsert ( ’c’. char C. tq = QueueNew ( ). QueueInsert ( ’d’. */ Queue *tq..*/ #include "QueueInterface. /* Make tq empty. */ tq = QueueNew ( ). /* Variable TestQueue of type Queue.*/ int main ( void ) int main ( void ) { { Queue *tq. /* Make tq empty.\n". tq ). tq ). */ QueueInsert ( ’a’. printf ( "Just got: %c. 23 24 Queue/rmb 30/10/'06 Queue/rmb 30/10/'06 Using the Queue interface Using the Queue interface #include "QueueInterface. tq ).*/ /* Access operations and types for stacks.\n". QueueRemove ( tq.*/ /* Access operations and types for stacks. */ char C.

C ). b. tq ). */ char C. printf ( "Just got: %c. QueueInsert ( ’c’. /* Make tq empty. printf ( "Just got: %c. QueueRemove ( tq. C ). 02/05/2011 25 26 Queue/rmb 30/10/'06 Queue/rmb 30/10/'06 Using the Queue interface Using the Queue interface #include "QueueInterface. /* Make tq empty.\n". tq ). C ).\n". tq ).. QueueInsert ( ’d’. } . tq ). c Print: Just got: a. . tq ). &C ). C ).. tq ).*/ /* Access operations and types for stacks.\n". printf ( "Just got: %c..\n". QueueInsert ( ’d’. */ Queue *tq.*/ /* Access operations and types for stacks. QueueInsert ( ’c’. QueueInsert ( ’a’. */ char C. Queue *tq.*/ int main ( void ) int main ( void ) { { Queue *tq. /* Variable TestQueue of type Queue. tq ).\n". QueueInsert ( ’d’. QueueInsert ( ’d’. &C ). QueueInsert ( ’a’.h" /* Assume ItemType is char. tq ). tq ). QueueRemove ( tq. */ tq = QueueNew ( ). tq = QueueNew ( ). /* Variable TestQueue of type Queue. tq ). QueueRemove ( tq.. 27 28 Queue/rmb 30/10/'06 Queue/rmb 30/10/'06 Using the Queue interface Using the Queue interface #include "QueueInterface.h" /* Assume ItemType is char.*/ #include "QueueInterface.. printf ( "Just got: %c. /* Make tq empty. QueueInsert ( ’c’.*/ int main ( void ) int main ( void ) { { Queue *tq. QueueInsert ( ’b’.*/ /* Access operations and types for stacks. c Queue: b. &C ).*/ /* Access operations and types for stacks. &C ).*/ #include "QueueInterface.. . /* Variable TestQueue of type Queue. /* Variable TestQueue of type Queue. printf ( "Just got: %c. . d 7 . Queue: c Print: Just got: b. tq ). QueueRemove ( tq. &C ). &C ). tq ). QueueInsert ( ’c’. &C ). QueueRemove ( tq. */ char C.h" /* Assume ItemType is char.\n". C ).\n". */ QueueInsert ( ’a’. C ).h" /* Assume ItemType is char. tq ).. QueueRemove ( tq. C ). */ QueueInsert ( ’b’. } Queue: c. tq ). &C ). tq = QueueNew ( ). QueueInsert ( ’b’.\n". QueueRemove ( tq. tq ). C ). /* Make tq empty. printf ( "Just got: %c. } } Queue: a. char C. QueueRemove ( tq. */ tq = QueueNew ( ). QueueInsert ( ’b’. printf ( "Just got: %c. tq ). printf ( "Just got: %c.. QueueInsert ( ’a’.

h” typedef arbitrary itemType. 31 32 Queue/rmb 30/10/'06 Queue/rmb 30/10/'06 Linked Queue Representations Linked Queue Implementation /*File: queueTypes. empty queue*/ struct tQueueNode *address. void InitializeQueue(Queue *Q) }QueueNode. Q->rear=NULL. QueueNode *rear. 8 . • Setiap node terdiri atas item queue yaitu item Conditional checks untuk kondisi tertentu pada member dan links ke node berikutnya pada list.h*/ #include “QueueInterface. { typedef struct { Q->front=NULL. QueueNode *front. /*the itemType can be arbitraty*/ /*Initialize the queue Q to be the typedef struct tQueueNode{ itemType item. 02/05/2011 29 30 Queue/rmb 30/10/'06 Queue/rmb 30/10/'06 Linked Queueberikut • Representasi Representations menggunakan pointer pada Linked Queue Implementation front dan rear. } }Queue. linked queue implementation: menggunakan pointer pada link member.

is full. } if (Q->front==NULL) Q->rear=NULL.itemType *F) if (temp==NULL){ { systemError(“system storage is exhausted”) QueueNode *temp. Q. Terdapat Q tidak kosong. atau tidak. } else{ temp->item=R. 02/05/2011 33 34 Queue/rmb 30/10/'06 Queue/rmb 30/10/'06 Linked Queue Implementation Linked Queue Implementation • Empty test: menentukan sebuah queue kosong • Full test: menentukan sebuah queue penuh atau tidak. remove sebuah itam dari front sebuah queue Q. ▫ Sebuah queue didefinisikan empty jika front = /* we assume an already constructed queue. } } 35 36 Queue/rmb 30/10/'06 Queue/rmb 30/10/'06 Insert item baruImplementation ke ujung rear suatu queue. void remove(Queue *Q. *F=Q->front->item. free(temp). Q. Queue *Q) { QueueNode *temp. NULL. if (Q->rear==NULL){ systemErr(“attempt to remove item from empty queue”). Q->rear=temp. Linked Queue Linked Queue Implementation void Insert(itemType R. /*attempt to allocate a new node*/ temp=(QueueNode*)malloc(sizeof(QueueNode)). Q->front=temp. }else{ Q->rear=temp. Q. Q->rear->address=temp. if (Q->front==NULL){ temp->address=NULL. }else{ temp=Q->front. return (Q->front==NULL). Q. } } } } 9 . since it could potentially grow as a linked structured */ int Empty(Queue *Q) int Full(Queue *Q) { { return 0. is empty. is not full. Q->front=temp->address.

1995 p. ▫ Clients . Dept of Computer ▫ Menggunakan queues sebagai memory buffers Science. 2004 • Queues pada simulation experiments • Thomas A. 02/05/2011 37 38 Queue/rmb 30/10/'06 Queue/rmb 30/10/'06 Queue Applications References • Queues pada operating systems • Lectures stacks and queues. 253 ff (Chapter 7) 10 .“Data Structures.servers Algorithms & Software Principles in C” Addison- ▫ Simulating supermarket checkout lines Wesley. Standish. University of Bristol.