STRUKTUR DATA QUEUE Antrian Queue Dengan Array DEFINISI

  • Slides: 22
Download presentation
STRUKTUR DATA QUEUE (Antrian)

STRUKTUR DATA QUEUE (Antrian)

Queue Dengan Array DEFINISI • Bersifat FIFO (First In First Out) • Elemen yang

Queue Dengan Array DEFINISI • Bersifat FIFO (First In First Out) • Elemen yang pertama masuk ke antrian akan keluar pertama kalinya • ENQUEUE: menambahkan data pada sebuah list • DEQUEUE adalah mengeluarkan satu elemen dari suatu Antrian • Antrian dapat dibuat dengan menggunakan 2 cara: Liniear Array dan Circular Array

Animasi Queue ENQUEUE dan DEQUEUE

Animasi Queue ENQUEUE dan DEQUEUE

Queue Linier Array • Terdapat satu buah pintu masuk di suatu ujung dan satu

Queue Linier Array • Terdapat satu buah pintu masuk di suatu ujung dan satu buah pintu keluar di ujung satunya • Sehingga membutuhkan 2 variabel: Head dan Tail

Queue Linier Array • Tempatkan data pada sebuah array, dan setlah pointer agar menunjuk

Queue Linier Array • Tempatkan data pada sebuah array, dan setlah pointer agar menunjuk ke posisi HEAD dan TAIL • Saat data ditambahkan ke queue, naikkan posisi pointer TAIL • Saat data dihapus dari queue, naikkan posisi pointer HEAD • Saat head==tail, berarti queue kosong head Array x … x 3 x 4 x 5 x 6 x 7 x 8 x 9 x 10 x 11 x 12 ujung depan Array x tail … … head==tail ujung belakang 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 Queue Linier Array Head dari tail selalu bertambah secara motononik,

Masalah yang timbul pada Queue Linier Array Head dari tail selalu bertambah secara motononik, sehingga memerlukan array dengan ukuran tak terhingga head array x … tail 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 HEAD dan TAIL dari array itu sehingga membentuk cincin (RING BUFFER)

Queue Circular Array n-2 n-1 0 1 head tail n-2 n-1 0 tail==head •

Queue Circular Array n-2 n-1 0 1 head tail n-2 n-1 0 tail==head • Array dibuat seperti cincin, dimana elemen terakhir disambungkan dengan elemen pertama • Menambahkan data ke queue: nilai tail dinaikkan satu • Menghapus data dari queue: nilai head dinaikkan satu • Queue kosong pada saat head==tail 1 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

Operasi Queue (1) • Operasi-operasi: Create() – Untuk menciptakan dan menginisialisasi Queue – Dengan

Operasi Queue (1) • Operasi-operasi: Create() – Untuk menciptakan dan menginisialisasi Queue – Dengan cara membuat Head dan Tail = -1

Queue (2)

Queue (2)

Queue (3) • Is. Empty() – Untuk memeriksa apakah Antrian sudah penuh atau belum

Queue (3) • Is. Empty() – Untuk memeriksa apakah Antrian sudah penuh atau belum – Dengan cara memeriksa nilai Tail, jika Tail = -1 maka empty – Kita tidak memeriksa Head, karena Head adalah tanda untuk kepala antrian (elemen pertama dalam antrian) yang tidak akan berubah-ubah – Pergerakan pada Antrian terjadi dengan penambahan elemen Antrian kebelakang, yaitu menggunakan nilai Tail

Queue (4)

Queue (4)

Queue (5) • Fungsi Is. Full – Untuk mengecek apakah Antrian sudah penuh atau

Queue (5) • Fungsi Is. Full – Untuk mengecek apakah Antrian sudah penuh atau belum – Dengan cara mengecek nilai Tail, jika Tail >= MAX -1 (karena MAX-1 adalah batas elemen array pada C) berarti sudah penuh

Queue (6) • Enqueue – Untuk menambahkan elemen ke dalam Antrian, penambahan elemen selalu

Queue (6) • Enqueue – Untuk menambahkan elemen ke dalam Antrian, penambahan elemen selalu ditambahkan di elemen paling belakang – Penambahan elemen selalu menggerakan variabel Tail dengan cara increment counter Tail terlebih dahulu

Queue (7)

Queue (7)

Queue (8) • Dequeue() – Digunakan untuk menghapus elemen terdepan/pertama (head) dari Antrian –

Queue (8) • Dequeue() – Digunakan untuk menghapus elemen terdepan/pertama (head) dari Antrian – Dengan cara menggeser semua elemen antrian kedepan dan mengurangi Tail dgn 1 – Penggeseran dilakukan dengan menggunakan looping

Queue (9)

Queue (9)

Queue (10) • Clear() – Untuk menghapus elemen-elemen Antrian dengan cara membuat Tail dan

Queue (10) • Clear() – Untuk menghapus elemen-elemen Antrian dengan cara membuat Tail dan Head = -1 – Penghapusan elemen-elemen Antrian sebenarnya tidak menghapus arraynya, namun hanya mengeset indeks pengaksesannya ke nilai -1 sehingga elemen-elemen Antrian tidak lagi terbaca

Queue (11)

Queue (11)

Queue (12) • Tampil() – Untuk menampilkan nilai-nilai elemen Antrian – Menggunakan looping dari

Queue (12) • Tampil() – Untuk menampilkan nilai-nilai elemen Antrian – Menggunakan looping dari head s/d tail

Soal-soal • • Tambahkanlah function untuk mencari suatu elemen dalam queue Tambahkan function untuk

Soal-soal • • Tambahkanlah function untuk mencari suatu elemen dalam queue Tambahkan function untuk mengedit suatu elemen dalam queue Carilah nilai total, rata-rata, terbesar dan terkecil dari elemen-elemen queue dalam function tersendiri Bagaimana penerapan queue pada linked list dua kepala?