P13 Queue
P13 Queue
memiliki sistem kerja pertama masuk makan akan menjadi pertama keluar ( FIFO :
First In First Out ).
Struktur Data Antrean (Queue) adalah suatu bentuk khusus dari List Linier
dengan operasi pemasukan data hanya diperbolehkan pada salah satu sisi, yang
disebut sisi Belakang / ekor (Tail) dan operasi penghapusan hanya diperbolehkan
pada sisi lainnya yang disebut sisi Depan / kepala (Head) dari LinkedList.
Prinsip Antrean : FIFO (First In First Out) dan FCFS (First Come First Serve). “Yang
Tiba lebih awal Maka akan dilayani Terlebih Dahulu”
Contoh yang paling populer untuk membayangkan sebuah queue adalah antrian
pada kasir sebuah bank. Ketika seorang pelanggan datang, akan menuju ke
belakang dari antrian. Setelah pelanggan dilayani, antrian yang berada di depan
akan maju. Pada saat menempatkan elemen pada ujung (tail) dari queue disebut
dengan enqueue, pada saat memindahkan elemen dari kepala (head) sebuah
queue disebut dengan dequeue.
CREATE
Untuk menciptakan dan menginisialisasi Queue Dengan cara membuat Head
dan Tail = -1
ISEMPTY
Untuk memeriksa apakah queue kosong
ISFULL
Untuk memeriksa apakah queue sudah penuh
ENQUEUE
Untuk menambahkan item pada posisi paling belakang
DEQUEUE
Untuk menghapus item dari posisi paling depan
CLEAR
Untuk mengosongkan queue
Create()
Untuk menciptakan dan menginisialisasi Queue
Dengan cara membuat Head dan Tail = -1
IsEmpty()
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
Fungsi IsFull
– 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
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
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
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 pengaksesan-nya ke nilai -1
sehingga elemen-elemen Antrian tidak lagi terbaca
1. Liniear QUEUE 0 1 2 3 4 5 6 7 8 9
x x x x F= Font
Q[]
R= Rear
F R
2. Circular QUEUE
0 1 2 3 4 5 6 7 8 9 4
Q[] x x x x Counter
F= Font
F R R= Rear
3. Double Ended QUEUE
0 1 2 3 4 5 6 7 8 9
Q[] x x x x
L= Left
L R R= Rightr
N-1
Misal N=10 Maxsize
0 1 2 3 4 5 6 7 8 9
F= Font
Q[]
R= Rear
R F
R maju dulu satu langkah Ambil dulu yang di Kembali dalam keadaan
( R= R+1 ) tunjuk oleh F, disimpan semula di mana F = 0
di X dan R = -1
Kemudian isi ditempat
yang di tunjuk oleh R Kemudian F maju satu
atau Q[R]=X langkah ( F=F+1
Misal N=10 Maxsize
Kondisi awal 0 1 2 3 4 5 6 7 8 9
antrian Q[] F = 0, R = -1
sebelum di isi F = R+1
R F R<n-1
Masuk 5 0 1 2 3 4 5 6 7 8 9
pengantri Q[] X X X X X F = 0, R = 4
belum dilayani
F R
Misalnya 0 1 2 3 4 5 6 7 8 9
dilayani 4 Q[] X X X X X F =4,
Pengantri F=R
F R
Masuk lagi 4 0 1 2 3 4 5 6 7 8 9
Pengantri Q[] X X X X X X X X X F <R+1
R < N-1
F R
F = R + 1 dan R = n – 1 kondisi ini adalah khusus, antrian di sebut KOSONG karena tidak
ada lagi yang perlu di layani
Untuk menghindari pemborosan waktu maka linear queue
dengan konsep penggeseran dirubah menjadi Circular Queue
tanpa melakukan penggeseran tetapi dengan memanfaatkan
tempat yang di tinggal oleh penganti yang keluar. Jadi bilai
antrian sudah sampai lokasi terakhir yaitu Q[n-1] antrian dapat
di lanjutkan ke Q[0], dan seterusnya
0 1 2 3 4 5 6 7 8 9
Q[] x x x x
F= Font
F R R= Rear
Karena antrian dalam pemrograman menggunakan array dimensi satu maka
ilustrasinya tetap menggunakan array dimensi satu, dengan pemahaman bahwa
sesudah elemen n-1 di lanjutkan ke no. nol
IF = ( R == n-1 ) R=R+1;
R=0; IF ( R == n )
[1] [4] Else
atau
R=0;
R=R+1 ;
[2] [3]
Bila (R+1) (R+1) % n
R= =
[1] [4] -1 0 0%6=0
0 1 1%6=1
1 2 2%6=2
[0] [5] 5 6 6%6=0
F=0
R=0
Ilustrasi Proses awal
0 1 2 3 4 5 6 7 8 9
Q[]
F= Font
R F 0 -1 0 R= Rear
F R Counter
Algoritma dasar ( Inisialisasi )
Void AWAL () F = Posisi pengantri paling depan
{F=0; R = posisi pengantri paling belakang
R = -1 ; Counter = jumlah pengantri
counter = 0 ; - Setiap kali insert counter akan ditambah 1 ( counter ++ )
} - Setiap kali delete counter akan dikurang 1 ( Counter --)
- Bila counter = 0 berarti antrian kosong dan bila counter n berarti
antrian penuh
Algoritma dasar Algoritma dasar
untuk Proses Insert Untuk Proses delete
Masuk 5 0 1 2 3 4 5 6 7 8 9 5
pengantri dan Q[] X X X X X Counter
belum ada
yang keluar F R
Keluar 2 0 1 2 3 4 5 6 7 8 9 3
pengantri Q[] X X X Counter
F R
Keluar lagi 3 0 1 2 3 4 5 6 7 8 9 0
pengantri Q[] Counter
F R
Masuk lagi 6 0 1 2 3 4 5 6 7 8 9 6
pengantri Q[] X X X X X X Counter
F R
Masuk 2 0 1 2 3 4 5 6 7 8 9 8
pengantri lagi Q[] X X X X X X X X Counter
R F
Masuk lagi 2 0 1 2 3 4 5 6 7 8 9 10
pengantri Q[] X X X X X X X X X X Counter
R F
Pada saat PENUH F = R+1 pada gambar 7 sama dengan kondisi kosong pada gambar 5
hanya saja pada saat PENUH counter = n dan pada saat kosong counter = 0
Insert Q[] Insert
Kiri 0 1 2 3 4 5 6 7 8 9 Kanan
x x x x
Delete Delete
Kiri L R Kanan
a. Index : L = Left dan R = Right
b. Pengantri dapat masuk dari pintu kiri, maupun dari pintu kanan dimana :
• yang masuk dari pintu kiri dapat keluar dari pintu kiri dapat juga keluar dari pintu
kanan tergantung kesempatan yang ada
• Yang masuk dari pintu kanan, dapat keluar dari pintu kanan dapat juga keluar dari
pintu kiri tergantung kesempatan yang ada.
Pada saat ini Array Q[] belum ada isinya , variabel X juga belum ada isinya dan Variabel
L isinya = 0 dan variabel R isinya = -1
Dalam proses ini proses yang bisa dilakukan hanya INSERT KANAN yaitu proses mengisi
dari kanan sedang proses INSERT KIRI tidak dapat di lakukan
Algoritma dasar untuk proses INSERT
L R
Keluar 5 Pengantri melalui Kiri ( delete Kiri )
0 1 2 3 4 5 6 7 8 9 Insert Kanan di Kondisi Artinya