Presentasi sedang didownload. Silahkan tunggu

Presentasi sedang didownload. Silahkan tunggu

Queue.

Presentasi serupa


Presentasi berjudul: "Queue."— Transcript presentasi:

1 Queue

2 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

3 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 ElmtQ = record <Info : InfoType, Next : address >

4 dengan InfoType 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.

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

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

7 Ilustrasi FIFO (First In First Out) 1 2 7

8 Operasi Dasar STORE, memasukkan elemen RETRIEVE, mengambil elemen 8

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

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

11 Deklarasi Queue Buat array untuk queue
Buat variabel bertipe int untuk rpos dan spos Contoh: #define MAX 20 int queue[MAX]; int rpos; int spos;

12 Deklarasi Fungsi STORE
Masukkan elemen ke queue dengan index spos sekarang queue[top] = elemen; Naikkan / tambahkan nilai spos dengan 1 spos++ ;

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

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

15 Queue 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

16 Queue 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 2 front rear

17 Queue 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 2 3 front rear

18 Queue 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 2 3 4 front rear

19 Queue 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 2 3 4 5 front rear

20 Queue 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 2 3 4 5 6 front rear

21 Queue 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 2 3 4 5 6 front rear

22 Queue 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 3 4 5 6 front rear

23 Queue 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 4 5 6 front rear

24 Queue 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 5 6 front rear

25 Queue 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 6 front rear

26 Queue 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

27 Animasi Queue ENQUEUE dan DEQUEUE

28 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 front stack queue

29 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 rear x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 Array x ujung depan ujung belakang Queue adalah pada bagian yang berwarna hijau

30 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 rear x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 Array x ujung depan ujung belakang Queue adalah pada bagian yang berwarna hijau

31 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 rear x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 Array x ujung depan ujung belakang Queue adalah pada bagian yang berwarna hijau

32 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 rear x3 x4 x5 x6 x7 x8 x9 x10 x11 x11 x12 Array x ujung depan ujung belakang Queue adalah pada bagian yang berwarna hijau

33 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 rear x3 x4 x5 x6 x7 x8 x9 x10 x11 x11 x12 Array x ujung depan ujung belakang Queue adalah pada bagian yang berwarna hijau

34 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 rear x3 x4 x5 x6 x7 x8 x9 x10 x11 x11 x12 Array x Queue adalah pada bagian yang berwarna hijau

35 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 rear x3 x4 x5 x6 x7 x8 x9 x10 x11 x11 x12 Array x Queue adalah pada bagian yang berwarna hijau

36 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 rear x3 x4 x5 x6 x7 x8 x9 x10 x11 x11 x12 Array x Queue adalah pada bagian yang berwarna hijau

37 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 rear x3 x4 x5 x6 x7 x8 x9 x10 x11 x11 x12 Array x Queue adalah pada bagian yang berwarna hijau

38 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 rear x3 x4 x5 x6 x7 x8 x9 x10 x11 x11 x12 Array x Queue adalah pada bagian yang berwarna hijau

39 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 rear x3 x4 x5 x6 x7 x8 x9 x10 x11 x11 x12 Array x Queue adalah pada bagian yang berwarna hijau

40 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 x3 x4 x5 x6 x7 x8 x9 x10 x11 x11 x12 Array x Queue adalah pada bagian yang berwarna hijau

41 Masalah yang timbul pada Cara 1
Front dari rear selalu bertambah secara motononik, sehingga memerlukan array dengan ukuran tak terhingga Menyambungkan FRONT dan REAR dari array itu sehingga membentuk cincin (RING BUFFER) front rear x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 array x Pointer selalu bergerak ke kanan, tak pernah kembali

42 Cara 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 n-1 n-2 1 front rear Queue adalah pada bagian yang berwarna hijau

43 Cara 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 n-1 n-2 1 front rear Queue adalah pada bagian yang berwarna hijau

44 Cara 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 n-1 n-2 1 rear front Queue adalah pada bagian yang berwarna hijau

45 Cara 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 n-1 n-2 1 rear front Queue adalah pada bagian yang berwarna hijau

46 Cara 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 n-1 n-2 1 rear front Queue adalah pada bagian yang berwarna hijau

47 Cara 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 n-1 n-2 1 rear front Queue adalah pada bagian yang berwarna hijau

48 Cara 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 n-1 n-2 1 rear front Queue adalah pada bagian yang berwarna hijau

49 Cara 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 n-1 n-2 1 rear front Queue adalah pada bagian yang berwarna hijau

50 Cara 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 n-1 n-2 1 rear==front Queue adalah pada bagian yang berwarna hijau

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

52 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-1 1 n-2


Download ppt "Queue."

Presentasi serupa


Iklan oleh Google