Queue 3 Queue Antrian 3 1 Definisi Queue

  • Slides: 52
Download presentation
Queue

Queue

3. Queue (Antrian) 3. 1. Definisi Queue (Antrian) adalah list linier yang : 1.

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

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

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

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

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

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

Operasi Dasar STORE, memasukkan elemen RETRIEVE, mengambil elemen

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 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:

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

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 queue[top]

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Animasi Queue ENQUEUE dan DEQUEUE

Implementasi Queue • Implementasi queue lebih sulit daripada stack. Pada stack, penambahan dan penghapusan

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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,

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

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