0% menganggap dokumen ini bermanfaat (0 suara)
13 tayangan28 halaman

P13 Queue

Diunggah oleh

hanifkuliah13
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
13 tayangan28 halaman

P13 Queue

Diunggah oleh

hanifkuliah13
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
Anda di halaman 1/ 28

 Antrian atau queue ( baca :qyu ) adalah salah satu konsep struktur data yang

memiliki sistem kerja pertama masuk makan akan menjadi pertama keluar ( FIFO :
First In First Out ).

 Karakteristik yang membedakan queue (antrian) dari stack adalah cara


menyimpan dan mengambil data dengan struktur first in first out (FIFO). Hal ini
berarti elemen pertama yang ditempatkan pada queue adalah yang pertama
dipindahkan.

 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

 PROSES AWAL ( Inisialisasi )


Void AWAL ()
F=0 Bila ditulis dalam sebuah fungsi {
R=-1 dapat di tulis sbb: Artinya
F = 0;
F>R berarti kosong
R = -1’
}
 Algoritma dasar  Algoritma dasar  Algoritma dasar
untuk Proses Insert Untuk Proses delete Untuk Proses Reset

Void INSERT () Void INSERT () Void INSERT ()


{ { {
R=R+1; X = Q[F}; F= 0;
Q[R] = X ; F = F + 1; R= -1
} } }

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

Karena antrian melingkar maka baik R maupun F


[2] [3] bila maju satu langkah, bila melampaui n-1 maka
harus kembali ke 0 sehingga algoritma sbb:

IF = ( R == n-1 ) R=R+1;
R=0; IF ( R == n )
[1] [4] Else
atau
R=0;
R=R+1 ;

Dua algoritma diatas dapat di ganti dengan satu


[0] [5] instruksi pembagian modulus (%)
F=0
R=0 R = ( R+1 ) % n
Untuk n = 6 ( antrian mulai Q[0] sampai dengan Q[5}

[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

Void INSERT () Void DELETE()


{ {
R = (R + 1) % n ; X = Q[F};
Q[R] = X ; F = (F + 1)% n;
Counter ++ ; Counter --;
} Return (X);
R maju dulu satu langkah }
( R= R+1 )
Ambil dulu yang di
Kemudian isi ditempat tunjuk oleh F, yaitu Q[F]
yang di tunjuk oleh R dan menyimpan ke
atau Q[R]=X dalam variabel X

Kemudian F maju satu


langkah
Counter > 0 ada
 Kondisi awal 0 1 2 3 4 5 6 7 8 9 isinya, F<> R+1
0
antrian ada isinya ,
Q[] Counter counter < n bisa
sebelum di isi
R F diisi

 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.

Insert Kiri = Masuk dari pintu kiri


Insert kanan = masuk dari pintu kanan
Delete kiri = keluar dari pintu kiri
Delete kanan = keluar dari pintu kanan
Bukan FIFO atau LIFO tapi keluar masuk dari kedua ujung antrian sesuai dengan kesempatan
yang ada
Algoritma dasar untuk proses AWAL ( Inisiallisasi )
Q[]
0 1 2 3 4 5 6 7 8 9 Void awal ()
{L=0;
R = -1;
}
R L 0 -1
L R X

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

Void Insertkiri() Void Insertkanan()


{ {
L = L-1; R= R + 1;
Q(L) = X; Q(R) = X;
} }
L mundur satu langkah R maju satu langkah
Isi ditempat yang di tunjuk oleh L Isi ditempat yang di tunjuk oleh R

Algoritma dasar untuk proses DELETE


Void Deletekiri() Void Deletekanan()
{ {
Q(L) = X; Q(R) = X
L = L+1; R= R - 1
} }
Ambil isi elemen yang di tunjuk oleh L Ambil isi elemen yang di tunjuk oleh R
Dan menyimpan dalam variabel X Dan menyimpan dalam variabel X
 Antrian Belum di isi Pada saat ini hanya Kondisi Artinya
bisa insert ke Kanan 1 L = 0; R=-1 Saat Awal
0 1 2 3 4 5 6 7 8 9
di Q[]. Insert Kiri 2 L=R+1 Kosong
tidak bisa. Delete 3 L=0 Penuh Kiri
tentu saja tidak bisa 4 R<n-1 Bisa Insert Ke kanan
R L
 Misalnya masuk 4 Pengantri dari Kanan ( Insert Kanan)
0 1 2 3 4 5 6 7 8 9 Insert Kanan di Kondisi Artinya

X X X X Q[4] insert kiri 1 L<R+1 Ada


tidak bisa 2 L=0 Penuh Kiri
3 R<n-1 Bisa Insert Ke kanan
L R
 Misalnya Keluar 1 Pengantri dari Kiri ( Delete Kiri )
0 1 2 3 4 5 6 7 8 9 Insert Kanan di Kondisi Artinya

X X X Q[4] insert kiri di 1 L<R+1 Ada


Q[0] 2 L>0 Bisa Insert Ke kiri
3 R<n-1 Bisa Insert Ke kanan
L R
 Misalnya masuk lagi 3 Penganrtri dari kanan Kondisi Artinya
1 L<R+1 Antrian ada isinya
0 1 2 3 4 5 6 7 8 9
2 L>0 Bisa Insert Kiri
X X X X X X 3 R<n-1 Bisa Insert Ke kanan

L R
 Keluar 5 Pengantri melalui Kiri ( delete Kiri )
0 1 2 3 4 5 6 7 8 9 Insert Kanan di Kondisi Artinya

X Q[7] insert kiri di 1 L<R+1 Ada


Q[5] 2 L>0 Bisa Insert Kiri
L R 3 R<n-1 Bisa Insert Ke kanan

 Masuk 3 Pengantri dari kiri dan masuk 2 pengantri dari kanan


0 1 2 3 4 5 6 7 8 9 Insert Kanan di Kondisi Artinya

X X X X X Q[10] insert kiri di 1 L<R+1 Ada


Q[3] 2 L>0 Bisa Insert Ke kanan
3 R<n-1 Bisa Insert Ke kanan
L R
1. Tuliskan apa yang dimaksud dengan Queue !
2. Tuliskan dan uraikan operasi pada antrian !
3. Tulislah Algoritma dasar untuk :
a. Inisialisasi
b. Insert sebuah record ( Linier Queue, Circular Queue dan Deque )
c. Delete sebuah record ( Linier Queue, Circular Queue dan Deque )

4. Terdapat Table data pelanggan kemudian di isi data pelanggan dengan


urutan ayu, ami, aso dan asih kemudian proses query data pelanggan ayu di
layani lebih dahulu, lalu tambah data pelanggan baru yaitu mario, maria dan
najib setelah itu giliran ami dan aso proses querynya di layanin lebih dahulu
lakukan hal yang sama sampai data pelanggan akhirnya semua di layanin.
Buatlah ilustrasi linier Queue terhadap uraian tersebut !.( maksimal antrian =
10 )

5. Berikan 5 contoh implementasi pada antrian !

Anda mungkin juga menyukai