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
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)