You are on page 1of 24

Struktur Data

Queue (Antrian)
Definisi
Queue (Antrian) adalah list linier yang :
1. Dikenali elemen pertama (Head) dan elemen
terakhirnya (Tail)
2. Aturan penyisipan dan penghapusan elemennya
didefinisikan 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 dalam sistem operasi
2. Antrian dalam dunia nyata
Maka secara logik, sebuah Queue dapat
digambarkan sebagai list linier yang setiap
elemennya adalah :

Type ElmtQ = record


<Info : InfoType,
Next : address >
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.
Maka jika Q adalah Queue dan P adalah
Address, penulisan untuk Queue adalah :

Head(Q)
Tail(Q)
Next(P)
Info(P)
Operasi pada Queue Q :
„ Construct (bentuk) queue Q kosong
„ Tentukan apakah queue Q kosong (empty)
„ Insert item baru pada ekor queue Q
„ Untuk queue Q tidak kosong, remove item
dari Q terdepan.
Traversal pada Queue
Pada queue, jarang sekali dilakukan
traversal, karena keunikan Queue justru pada
operasi yang hanya menyangkut elemen
pertama dan terakhir.
Namun dibutuhkan traversal misalnya untuk
mencetak isi Antrian.
Search pada Queue
Pada Queue, elemen yang diproses hanyalah
elemen pada pertama dan terakhir. Maka
hampir tidak pernah dilakukan search.
Operasi dan fungsi dasar pada Queue

a. Test Queue kosong


Mengetahui bahwa Queue kosong atau tidak
sangat penting, sebab semua operasi akan
dilakukan berdasarkan kosong atau tidaknya
suatu Queue. Realisasi algoritma dari definisi
fungsional ini adalah sebuah fungsi yang
melakukan test terhadap Queue sebagai
berikut :
function IsQEmpty (Q : Queue) → Boolean
{ TEST Queue kosong : Mengirim true, jika
antrian kosong, false jika antrian tidak kosong}

Deklarasi
Deskripsi
return ((Head(Q) = Nil) and (Tail(Q) = Nil))
b. Pembuatan Queue kosong
Membuat Queue kosong diperlukan untuk memulai
memakai Queue.
Realisasi algoritma dari definisi fungsional ini adalah
sebuah prosedur yang melakukan inisialisasi Queue
sebagai berikut :

Procedure CreateEmptyQ (Output Q : Queue)


{K. Awal : sembarang,
K. Akhir : sebuah queue Q yang kosong terbentuk
Proses : Membuat queue kosong }

Deklarasi
Deskripsi
Head(Q) ← Nil
Tail(Q) ← Nil
c.Penambahan sebuah elemen pada Queue
Penambahan selalu dilakukan pada ekor,
dan karena alamat ekor diketahui maka
prosesnya sederhana, yaitu hanya
InsertLast.

Berikut ini akan diberikan skema prosedur


penyisipan tersebut.
Realisasi algoritma dari definisi fungsional
ini adalah salah satu dari dua buah
prosedur yang melakukan penambahan
elemen Queue sebagai berikut :

„ Prosedur pertama menambahkan suatu


Elemen Queue yang diketahui alamatnya
„ Prosedur kedua menambahkan suatu nilai
Elemen queue yang diberikan
procedure InsertQ@ (Input/Output Q : Queue
Input P : address)
{K.Awal : Queue mungkin kosong, P terdefinisi
(berarti terdefinisi informasinya, Next (P) = Nil
K.Akhir : P menjadi elemen Tail dari Q dan
Tail yang baru adalah P
Proses : Insert sebuah elemen beralamat P
pada Tail dari antrian Q }
Deklarasi
Deskripsi
If IsQEmpty(Q) then
Head(Q) ← P
Tail(Q) ← P
else
Next(Tail(Q)) ← P
Tail(Q) ← P
endif
procedure InsertQ(Input/Output Q : Queue
Input E : InfoType)
{K.Awal : Queue mungkin kosong, E terdefinisi
K.Akhir : Elemen Tail dari Q yang baru
bernilai E
Proses : Insert sebuah elemen nilai pada
Tail dari antrian Q }
Deklarasi
Deskripsi
Alokasi (P)
Info (P) ← E
If IsQEmpty(Q) then
Head(Q) ← P
Tail(Q) ← P
else
Next(Tail(Q)) ← P
Tail(Q) ← P
endif
d. Penghapusan Elemen Pada QueuE

Penghapusan elemen pada queue selalu


dilakukan pada elemen pertama, hanya
sajaperlu diperhitungkan bahwa mungkin
queue menjadi kosong akibat terjadinya
penghapusan.
Jika queue menjadi kosong, maka harga Tail
harus diganti. Jika akibat penghapusan
queue tidak kosong, maka elemen terakhir
tidak berubah.
Berikut adalah skema penghapusan tersebut :

„ Prosedur pertama melakukan penghapusan


ElmtQ yang berada di Head dan yang dicatat
adalah alamatnya, yaitu P.
„ Prosedur yang kedua menghapus elemen
Head dari queue dan menyimpannya pada
suatu elmtQ serta membebaskan alamat
yang tadinya dipakai oleh elemen Head
tersebut.
procedure DeleteQ@(Input/Output Q : Queue
Output P : address)
{K.Awal : Queue tidak kosong
K.Akhir : P bukan lagi elemen dari Q, P ≠ Nil,
Next(P) = Nil
Proses : Menghapus elemen Head dari antrian,
antrian tidak boleh kosong dan mungkin
menjadi kosong }
Deklarasi
Deskripsi
P ← Head(Q)
Head(Q) ← Next(Head(Q))
if (Head(Q) = Nil) then
Tail(Q) ← Nil
endif
Next(P) ← Nil
procedure DeleteQ(Input/Output Q : Queue
Output E : InfoType)
{K.Awal : Queue tidak kosong
K.Akhir : Jika P adalah Head(Q). P bukan lagi
elemen dari Q, P ≠ Nil, Next(P) = Nil
Proses : Menghapus elemen Head dari antrian,
antrian tidak boleh kosong dan
mungkin menjadi kosong }
Deklarasi
Deskripsi
P ← Head(Q)
E ← Info(Head(Q))
Head(Q) ← Next(Head(Q))
if (Head(Q) = Nil) then
Tail(Q) ← Nil
endif
Next(P) ← Nil
Dealokasi(P)

You might also like