-
Notifications
You must be signed in to change notification settings - Fork 2
Modul 1 [Queue]
-
front- merupakan node terdepan pada queue. -
rear- merupakan node terbelakang pada queue. -
FIFO- first in first out.
Queue adalah struktur data linear yang mengikuti prinsip FIFO. Pada queue, elemen pertama yang dimasukkan adalah elemen pertama yang dapat dikeluarkan. Setiap elemen pada queue selalu ditambahkan dari bagian belakang dan dikeluarkan dari bagian depan. Contoh penerapan dari queue dalam kehidupan sehari-hari adalah proses pengecekan STNK untuk keluar dari gerbang ITS :D.

Queue biasa digunakan pada BFS (Breadth First Search) Graph Traversal yang nantinya akan dibahas pada modul 4-5 serta penyelesaian problem generate binary number dari 1 hingga n.
Kode Lengkap Dapat Dilihat Disini
Implementasi queue dapat dilakukan dengan menggunakan Singly Linked List dengan menggunakan pointer rear untuk menunjukkan node paling belakang dan front untuk menunjukkan node terdepan.
Kompleksitas waktu semua operasi dilakukan secara konstan O(1).
-
Setiap node yang ada pada queue dapat direpresentasikan oleh sebuah struct
QueueNodeyang menyimpan dataintdan refernsi node selanjutnya menggunakan pointer structQueueNodeini sendiri.typedef struct queueNode_t { int data; struct queueNode_t *next; } QueueNode;
-
Keseluruhan queue yang ada dikontrol oleh sebuah struct
Queueyang menyimpan referensi node terdepan dan node terbelekang menggunakan pointer structQueueNodeserta data jumlah node yang ada pada queue menggunakanunsigned.typedef struct queue_t { QueueNode *_front, *_rear; unsigned _size; } Queue;
-
Fungsi ini diguakan untuk memeriksa apakah queue kosong atau tidak. Prosesnya dilakukan dengan memeriksa apakah pointer
frontataurearbernilaiNULLatau tidak.bool queue_isEmpty(Queue *queue) { return (queue->_front == NULL && queue->_rear == NULL); }
-
Fungsi ini digunakan untuk menambahkan data pada queue. Operasinya dilakukan melalui tahap sebagai berikut:
- Buat node baru dengan struct
QueueNode. - Jika queue kosong, jadikan node baru ini sebagai
frontdanrear. - Jika queue tidak kosong, maka next dari
rearadalah node baru, dan jadikan node baru sebagai rear.
void queue_push(Queue *queue, int value) { QueueNode *newNode = (QueueNode*) malloc(sizeof(QueueNode)); if (newNode) { queue->_size++; newNode->data = value; newNode->next = NULL; if (queue_isEmpty(queue)) queue->_front = queue->_rear = newNode; else { queue->_rear->next = newNode; queue->_rear = newNode; } } }
- Buat node baru dengan struct
-
Fungsi ini digunakan untuk menghapus/mengambil
nodeterdepan dari queue. Operasinya dilakukan dengan tahap sebagai berikut:- Tampung
frontpada variabel sementaratemp. - Mengganti
frontdengan referensi next darifront. - Menghapus variabel sementara sebelumnya.
- Jika
frontkosong, makarearjuga kosong.
void queue_pop(Queue *queue) { if (!queue_isEmpty(queue)) { QueueNode *temp = queue->_front; queue->_front = queue->_front->next; free(temp); if (queue->_front == NULL) queue->_rear = NULL; queue->_size--; } }
- Tampung
-
Fungsi ini digunakan untuk mengambil
dataterdepan dari queue. Operasinya dilakukan dengan tahap sebagai berikut:- Apabila queue tidak kosong, maka return data
front. - Apabila queue kosong, maka return 0.
int queue_front(Queue *queue) { if (!queue_isEmpty(queue)) { return (queue->_front->data); } return 0; }
- Apabila queue tidak kosong, maka return data
Modul 0
Modul 1
Modul 2
Modul 3
Modul 4
Modul 5
Modul 6