Queue 3 Queue Antrian 3 1 Definisi Queue











![Deklarasi l Fungsi STORE l Masukkan elemen ke queue dengan index spos sekarang queue[top] Deklarasi l Fungsi STORE l Masukkan elemen ke queue dengan index spos sekarang queue[top]](https://slidetodoc.com/presentation_image_h2/87128ebcb92fae94f1fa06436e4f0f15/image-12.jpg)








































- Slides: 52

Queue

3. Queue (Antrian) 3. 1. Definisi Queue (Antrian) adalah list linier yang : 1. Dikenali elemen pertama (Head) dan elemen terakhirnya (Tail) 2. Aturan penyisipan dan penghapusan elemennya disefinisikan sebagai berikut : - Penyisipan selalu dilakukan setelah elemen terakhir - Penghapusan selalu dilakukan pada elemen pertama 3. Satu elemen dengan elemen lain dapat diakses melalui informasi Next

Struktur data ini banyak dipakai dalam informatika misalnya untuk merepresentasi : 1. Antrian job dalam sistem operasi 2. Antrian dalam dunia nyata Maka secara lojik, sebuah Queue dapat digambarkan sebagai list linier yang setiap elemennya adalah : Type Elmt. Q = record <Info : Info. Type, Next : address >

dengan Info. Type terdefinisi yang menentukan informasi yang disimpan pada setiap elemen queue, dan address adalah “alamat” dari elemen Selain itu alamat elemen Pertama (Head) dan elemen terakhir (Tail) dicatat.

l FIFO (First In First Out) rpos 0 spos 1 2 elemen queue

Keterangan l elemen isi antrian l Setiap elemen memiliki index l rpos menunjukkan index elemen yang siap diambil l spos menunjukkan index yang siap ditempati elemen antrian berikutnya l STORE (S), memasukkan elemen l RETRIEVE (R), mengambil elemen

Ilustrasi l FIFO (First In First Out) 0 1 2

Operasi Dasar STORE, memasukkan elemen RETRIEVE, mengambil elemen

Ilustrasi rpos: 0 0 1 2 spos: 0 spos: 1 spos: 2 3 STORE

Ilustrasi rpos: 0 rpos: 1 rpos: 2 rpos: 3 RETRIEVE 0 1 2 spos: 3

Deklarasi l Queue l Buat array untuk queue l Buat variabel bertipe int untuk rpos dan spos l Contoh: #define MAX 20 int queue[MAX]; int rpos; int spos;
![Deklarasi l Fungsi STORE l Masukkan elemen ke queue dengan index spos sekarang queuetop Deklarasi l Fungsi STORE l Masukkan elemen ke queue dengan index spos sekarang queue[top]](https://slidetodoc.com/presentation_image_h2/87128ebcb92fae94f1fa06436e4f0f15/image-12.jpg)
Deklarasi l Fungsi STORE l Masukkan elemen ke queue dengan index spos sekarang queue[top] = elemen; l Naikkan / tambahkan nilai spos dengan 1 spos++ ;

Deklarasi l Fungsi RETRIEVE l Naikkan / tambahkan nilai rpos dengan 1 rpos++; l Kembalikan nilai queue pada index rpos sekarang return queue[rpos];

Queue dengan Circular Array l Memutar nilai spos kembali ke 0 ketika sudah mencapai nilai MAX l Memutar nilai rpos kembali ke 0 ketika sudah mencapai nilai MAX

Queue l l l Penambahan data dilakukan pada sebuah ujung sebuah list, sedangkan penghapusan data dilakukan pada ujung yang lain Data yang dihapus adalah data yang paling awal ditambahkan Nama lain: FIFO (First In First Out) Operasi ENQUEUE: menambahkan data pada sebuah list Front : untuk menunjuk pengantri paling depan (front = depan) Rear : untuk menunjuk pengantri yang paling belakang (Rear =belakang) ENQUEUE 1 front==rear

Queue l l l Penambahan data dilakukan pada sebuah ujung sebuah list, sedangkan penghapusan data dilakukan pada ujung yang lain Data yang dihapus adalah data yang paling awal ditambahkan Nama lain: FIFO (First In First Out) Operasi ENQUEUE: menambahkan data pada sebuah list Front : untuk menunjuk pengantri paling depan (front = depan) Rear : untuk menunjuk pengantri yang paling belakang (Rear =belakang) ENQUEUE 1 front 2 rear

Queue l l Penambahan data dilakukan pada sebuah ujung sebuah list, sedangkan penghapusan data dilakukan pada ujung yang lain Data yang dihapus adalah data yang paling awal ditambahkan Nama lain: FIFO (First In First Out) Operasi ENQUEUE: menambahkan data pada sebuah list ENQUEUE 1 front 2 3 rear

Queue l l Penambahan data dilakukan pada sebuah ujung sebuah list, sedangkan penghapusan data dilakukan pada ujung yang lain Data yang dihapus adalah data yang paling awal ditambahkan Nama lain: FIFO (First In First Out) Operasi ENQUEUE: menambahkan data pada sebuah list ENQUEUE 1 front 2 3 4 rear

Queue l l Penambahan data dilakukan pada sebuah ujung sebuah list, sedangkan penghapusan data dilakukan pada ujung yang lain Data yang dihapus adalah data yang paling awal ditambahkan Nama lain: FIFO (First In First Out) Operasi ENQUEUE: menambahkan data pada sebuah list ENQUEUE 1 front 2 3 4 5 rear

Queue l l Penambahan data dilakukan pada sebuah ujung sebuah list, sedangkan penghapusan data dilakukan pada ujung yang lain Data yang dihapus adalah data yang paling awal ditambahkan Nama lain: FIFO (First In First Out) Operasi ENQUEUE: menambahkan data pada sebuah list ENQUEUE 1 front 2 3 4 5 6 rear

Queue l l Penambahan data dilakukan pada sebuah ujung sebuah list, sedangkan penghapusan data dilakukan pada ujung yang lain Data yang dihapus adalah data yang paling awal ditambahkan Nama lain: FIFO (First In First Out) Operasi DEQUEUE: menghapus data pada sebuah list DEQUEUE 1 front 2 3 4 5 6 rear

Queue l l Penambahan data dilakukan pada sebuah ujung sebuah list, sedangkan penghapusan data dilakukan pada ujung yang lain Data yang dihapus adalah data yang paling awal ditambahkan Nama lain: FIFO (First In First Out) Operasi DEQUEUE: menghapus data pada sebuah list DEQUEUE 2 front 3 4 5 6 rear

Queue l l Penambahan data dilakukan pada sebuah ujung sebuah list, sedangkan penghapusan data dilakukan pada ujung yang lain Data yang dihapus adalah data yang paling awal ditambahkan Nama lain: FIFO (First In First Out) Operasi DEQUEUE: menghapus data pada sebuah list DEQUEUE 3 front 4 5 6 rear

Queue l l Penambahan data dilakukan pada sebuah ujung sebuah list, sedangkan penghapusan data dilakukan pada ujung yang lain Data yang dihapus adalah data yang paling awal ditambahkan Nama lain: FIFO (First In First Out) Operasi DEQUEUE: menghapus data pada sebuah list DEQUEUE 4 front 5 6 rear

Queue l l Penambahan data dilakukan pada sebuah ujung sebuah list, sedangkan penghapusan data dilakukan pada ujung yang lain Data yang dihapus adalah data yang paling awal ditambahkan Nama lain: FIFO (First In First Out) Operasi DEQUEUE: menghapus data pada sebuah list DEQUEUE 5 front 6 rear

Queue l l Penambahan data dilakukan pada sebuah ujung sebuah list, sedangkan penghapusan data dilakukan pada ujung yang lain Data yang dihapus adalah data yang paling awal ditambahkan Nama lain: FIFO (First In First Out) Operasi DEQUEUE: menghapus data pada sebuah list DEQUEUE 6 front==rear

Animasi Queue ENQUEUE dan DEQUEUE

Implementasi Queue • Implementasi queue lebih sulit daripada stack. Pada stack, penambahan dan penghapusan data hanya dilakukan pada satu ujung saja, sehingga cukup mengubah posisi pointer sesuai dengan penambahan/pengurangan data • Implementasi queue, harus mengubah posisi DUA buah pointer, yaitu pointer yang menunjuk ke FRONT, dan pointer yagn menunjuk ke REAR • Ada dua cara implementasi queue: rear stack front queue

Cara 1 • Tempatkan data pada sebuah array, dan setlah pointer agar menunjuk ke posisi FRONT dan REAR • Saat data ditambahkan ke queue, naikkan posisi pointer REAR • Saat data dihapus dari queue, naikkan posisi pointer FRONT front Array x … rear x 3 x 4 x 5 x 6 x 7 x 8 x 9 x 10 x 11 x 12 ujung depan … ujung belakang Queue adalah pada bagian yang berwarna hijau

Cara 1 • Tempatkan data pada sebuah array, dan setlah pointer agar menunjuk ke posisi FRONT dan REAR • Saat data ditambahkan ke queue, naikkan posisi pointer REAR • Saat data dihapus dari queue, naikkan posisi pointer FRONT front Array x … rear x 3 x 4 x 5 x 6 x 7 x 8 x 9 x 10 x 11 x 12 ujung depan … ujung belakang Queue adalah pada bagian yang berwarna hijau

Cara 1 • Tempatkan data pada sebuah array, dan setlah pointer agar menunjuk ke posisi FRONT dan REAR • Saat data ditambahkan ke queue, naikkan posisi pointer REAR • Saat data dihapus dari queue, naikkan posisi pointer FRONT front Array x … rear x 3 x 4 x 5 x 6 x 7 x 8 x 9 x 10 x 11 x 12 ujung depan … ujung belakang Queue adalah pada bagian yang berwarna hijau

Cara 1 • Tempatkan data pada sebuah array, dan setlah pointer agar menunjuk ke posisi FRONT dan REAR • Saat data ditambahkan ke queue, naikkan posisi pointer REAR • Saat data dihapus dari queue, naikkan posisi pointer FRONT front Array x … rear x 3 x 4 x 5 x 6 x 7 x 8 x 9 x 10 x 11 x 12 ujung depan … ujung belakang Queue adalah pada bagian yang berwarna hijau

Cara 1 • Tempatkan data pada sebuah array, dan setlah pointer agar menunjuk ke posisi FRONT dan REAR • Saat data ditambahkan ke queue, naikkan posisi pointer REAR • Saat data dihapus dari queue, naikkan posisi pointer FRONT front Array x … rear x 3 x 4 x 5 x 6 x 7 x 8 x 9 x 10 x 11 x 12 ujung depan … ujung belakang Queue adalah pada bagian yang berwarna hijau

Cara 1 • Tempatkan data pada sebuah array, dan setlah pointer agar menunjuk ke posisi FRONT dan REAR • Saat data ditambahkan ke queue, naikkan posisi pointer REAR • Saat data dihapus dari queue, naikkan posisi pointer FRONT front Array x … rear x 3 x 4 x 5 x 6 x 7 x 8 x 9 x 10 x 11 x 12 … Queue adalah pada bagian yang berwarna hijau

Cara 1 • Tempatkan data pada sebuah array, dan setlah pointer agar menunjuk ke posisi FRONT dan REAR • Saat data ditambahkan ke queue, naikkan posisi pointer REAR • Saat data dihapus dari queue, naikkan posisi pointer FRONT front Array x … rear x 3 x 4 x 5 x 6 x 7 x 8 x 9 x 10 x 11 x 12 … Queue adalah pada bagian yang berwarna hijau

Cara 1 • Tempatkan data pada sebuah array, dan setlah pointer agar menunjuk ke posisi FRONT dan REAR • Saat data ditambahkan ke queue, naikkan posisi pointer REAR • Saat data dihapus dari queue, naikkan posisi pointer FRONT front Array x … rear x 3 x 4 x 5 x 6 x 7 x 8 x 9 x 10 x 11 x 12 … Queue adalah pada bagian yang berwarna hijau

Cara 1 • Tempatkan data pada sebuah array, dan setlah pointer agar menunjuk ke posisi FRONT dan REAR • Saat data ditambahkan ke queue, naikkan posisi pointer REAR • Saat data dihapus dari queue, naikkan posisi pointer FRONT front Array x … rear x 3 x 4 x 5 x 6 x 7 x 8 x 9 x 10 x 11 x 12 … Queue adalah pada bagian yang berwarna hijau

Cara 1 • Tempatkan data pada sebuah array, dan setlah pointer agar menunjuk ke posisi FRONT dan REAR • Saat data ditambahkan ke queue, naikkan posisi pointer REAR • Saat data dihapus dari queue, naikkan posisi pointer FRONT front Array x … rear x 3 x 4 x 5 x 6 x 7 x 8 x 9 x 10 x 11 x 12 … Queue adalah pada bagian yang berwarna hijau

Cara 1 • Tempatkan data pada sebuah array, dan setlah pointer agar menunjuk ke posisi FRONT dan REAR • Saat data ditambahkan ke queue, naikkan posisi pointer REAR • Saat data dihapus dari queue, naikkan posisi pointer FRONT rear front Array x … x 3 x 4 x 5 x 6 x 7 x 8 x 9 x 10 x 11 x 12 … Queue adalah pada bagian yang berwarna hijau

Cara 1 • Tempatkan data pada sebuah array, dan setlah pointer agar menunjuk ke posisi FRONT dan REAR • Saat data ditambahkan ke queue, naikkan posisi pointer REAR • Saat data dihapus dari queue, naikkan posisi pointer FRONT • Saat front==rear, berarti queue kosong front==rear Array x … x 3 x 4 x 5 x 6 x 7 x 8 x 9 x 10 x 11 x 12 … Queue adalah pada bagian yang berwarna hijau

Masalah yang timbul pada Cara 1 Front dari rear selalu bertambah secara motononik, sehingga memerlukan array dengan ukuran tak terhingga front array x … rear x 3 x 4 x 5 x 6 x 7 x 8 x 9 x 10 x 11 x 12 … Pointer selalu bergerak ke kanan, tak pernah kembali Menyambungkan FRONT dan REAR dari array itu sehingga membentuk cincin (RING BUFFER)

Cara 1 n-2 n-1 rear 0 • Array dibuat seperti cincin, dimana elemen terakhir disambungkan dengan elemen pertama • Menambahkan data ke queue: nilai rear dinaikkan satu • Menghapus data dari queue: nilai front dinaikkan satu • Queue kosong pada saat front==rear 1 front Queue adalah pada bagian yang berwarna hijau

Cara 1 n-2 n-1 rear 0 1 front • Array dibuat seperti cincin, dimana elemen terakhir disambungkan dengan elemen pertama • Menambahkan data ke queue: nilai rear dinaikkan satu • Menghapus data dari queue: nilai front dinaikkan satu • Queue kosong pada saat front==rear Queue adalah pada bagian yang berwarna hijau

Cara 1 n-2 rear n-1 0 • Array dibuat seperti cincin, dimana elemen terakhir disambungkan dengan elemen pertama • Menambahkan data ke queue: nilai rear dinaikkan satu • Menghapus data dari queue: nilai front dinaikkan satu • Queue kosong pada saat front==rear 1 front Queue adalah pada bagian yang berwarna hijau

Cara 1 n-2 n-1 0 1 rear front • Array dibuat seperti cincin, dimana elemen terakhir disambungkan dengan elemen pertama • Menambahkan data ke queue: nilai rear dinaikkan satu • Menghapus data dari queue: nilai front dinaikkan satu • Queue kosong pada saat front==rear Queue adalah pada bagian yang berwarna hijau

Cara 1 n-2 n-1 0 1 rear • Array dibuat seperti cincin, dimana elemen terakhir disambungkan dengan elemen pertama • Menambahkan data ke queue: nilai rear dinaikkan satu • Menghapus data dari queue: nilai front dinaikkan satu • Queue kosong pada saat front==rear front Queue adalah pada bagian yang berwarna hijau

Cara 1 n-2 n-1 0 1 rear • Array dibuat seperti cincin, dimana elemen terakhir disambungkan dengan elemen pertama • Menambahkan data ke queue: nilai rear dinaikkan satu • Menghapus data dari queue: nilai front dinaikkan satu • Queue kosong pada saat front==rear front Queue adalah pada bagian yang berwarna hijau

Cara 1 n-2 n-1 0 1 • Array dibuat seperti cincin, dimana elemen terakhir disambungkan dengan elemen pertama • Menambahkan data ke queue: nilai rear dinaikkan satu • Menghapus data dari queue: nilai front dinaikkan satu • Queue kosong pada saat front==rear front Queue adalah pada bagian yang berwarna hijau

Cara 1 n-2 rear n-1 0 1 • Array dibuat seperti cincin, dimana elemen terakhir disambungkan dengan elemen pertama • Menambahkan data ke queue: nilai rear dinaikkan satu • Menghapus data dari queue: nilai front dinaikkan satu • Queue kosong pada saat front==rear front Queue adalah pada bagian yang berwarna hijau

Cara 1 n-2 n-1 0 1 • Array dibuat seperti cincin, dimana elemen terakhir disambungkan dengan elemen pertama • Menambahkan data ke queue: nilai rear dinaikkan satu • Menghapus data dari queue: nilai front dinaikkan satu • Queue kosong pada saat front==rear==front Queue adalah pada bagian yang berwarna hijau

Masalah pada Ring Buffer • Pada saat rear==front , ada dua interpretasi yang muncul, “queue kosong” ataukah “queue full” n-2 n-1 0 1 n-2 n-1 empty rear==front 0 1 full rear==front Queue adalah pada bagian yang berwarna hijau

Masalah pada Ring Buffer • Solusi – Menyiapkan sebuah FLAG untuk memberi tanda kalau queue kosong – Queue dijaga agar tidak pernah full, dengan menyisakan sebuah elemen yang kosong n-2 n-1 0 1