TEKNIK QUEUE
Annesya Athea Sepriani, Muhammad Ropianto
Program Studi Teknik Informatika
Universitas Ibnu Sina
Email :
[email protected],
[email protected]
1. Latar Belakang
Dalam terminology pemrogaman berorientasi objek, pada umumnya kita
mengenal suatu struktur data bentukan pengguna yang disebut sebagai
ADT (Abstrak Data Type), yang merupakan pengganti struktur data primitive
yang telah terdefinisi dalam Bahasa pemrograman tertentu (misalnya
int,String, dan sebagainya). Dalam bab ini kita akan mempelajari beberapa
ADT Statis (ADT yang menggunakan lokasi memory secara tetap) ADT yang
kita pelajari bab ini adalah QUEUE atau ANTRIAN.
Antrian dalam ilmu komputer bermakna sama dengan antrian pada
kehidupan nyata. Ada antrian konsumen di sebuah bank atau di
supermarket, dan ada pula antrian kendaraan di pintu masuk tol. Sama
halnya dengan komputer dapat mengirimkan permintaan cetak lebih cepat
daripada kemampuan printer dalam mencetak, antrian dokumen sering kali
terjadi pada sebuah printer. Aturan umum dalam memproses elemen –
elemen sebuah antrian adalah bahwa elemen terdepan antrian dilayani lebih
dulu dan elemen yang paling belakang akan dilayani setelah elemen –
elemen lain di depannya diproses. Jadi, antrian adalah sebuah struktur data
FIFO (First In, First Out). Antrian memiliki banyak aplikasi dalam ilmu
komputer. Kapan pun sebuah sistem dimodelkan menggunakan prinsip
FIFO, antrian pasti digunakan.
Queue merupakan kasus khusus ordered list. Dengan karakteristik terbatas
itu maka kita dapat melakukan optimasi representasi ADT Queue untuk
memperoleh kerja paling optimal. Namun sebagai mahasiswa bidang
komputer, tentu kita harus bisa mengkomputerkan apapun dari dunia nyata.
Untuk itu kita perlu memahami tentang struktur data queue, operasi –
operasi pada struktur data queue, dan bagaimanakah kita bisa
mengimplementasikan operasi – operasi struktur data queue tersebut
kedalam bahasa pemograman, disini kita bahas bahasa pemograman C++
2. Rumusan Masalah
1. Apakah struktur data queue itu
2.Apa saja operasi-operasi stuktur data queue
3.Bagaimana mengimplementasikan struktur data queue dalam bahasa C++
4. Apa saja contoh aplikasinya dalam kehidupan sehari-hari
3. Tujuan Penulisan
Tujuan pembuatan laporan ini adalah agar mahasiswa memahami tentang
struktur data queue, dan mengerti bagaimana cara mengimplemetasikan
dalam bahasa pemograman. Dan sebagai syarat pemenuhan tugas dalam
mata kuliah Struktur Data, sekaligus bisa memberikan pendidikan dasar bagi
penulis agar lebih banyak tahu tentang struktur data queue.
4. Manfaat Penulisan
1. Dapat memahami pengertian struktur data queue
2. Dapat memahami cara pengoperasian struktur data queue
3. Dapat mengimplementasikan struktur data queu ke dalam bahasa C++
4. Dapat mengetahui aplikasi struktur data queue dalam kehidupan.
5. Landasan Teori
Queue (antrian) adalah salah satu list linier dari struktur data yang
beroperasi dengan cara First In First Out (FIFO) yaitu elemen pertama yang
masuk merupakan elemen yang pertama keluar. Contohnya, ialah dalam
sebuah antrian pembelian tiket bagi yang pertama masuk maka dia pulalah
yang pertama keluar/selesai. Untuk penyisipan (INSERT) hanya dapat
dilakukan pada satu sisi yaitu sisi belakang (REAR), sedangkan untuk
penghapusan (REMOVE) pada sisi depan (FRONT) dari list.
Queue/antrian adalah ordered list dengan penyisipan di satu ujung, sedang
penghapusan di ujung lain. Ujung penyisipan biasa disebut rear/tail, sedang
ujung penghapusa disebut front/head. Fenomena yang muncul adalah
elemen
yang
lebih
dulu
disisipkan
akan
juga
lebih
dulu
diambil. Queue merupakan kasus khusus ordered list. Dengan karakteristik
terbatas itu maka kita dapat melakukan optimasi representasi ADT
Queue untuk memperoleh kerja paling optimal.
Misalnya Queue Q= (a1,a2,a3…,an), maka:
1. Elemen a1 adalah elemen paling depan
2. Elemen ai adalah diatas elemen ai-1, di mana 1<i<n.
3. Elemen an adalah elemen paling belakang.
Head (Front) menunjuk ke awal antrian Q (elemen terdepan),
sedangkan tail (rear) menunjuk akhir antrian Q (elemen paling belakang).
Disiplin FIFO pada Queue berimplikasi jika elemen A, B, C, D, E dimasukkan
ke Queue, maka penghapusan/ pengambilan elemen akan terjadi dengan
urutan A, B, C, D, E.
Sebagai gambaran, cara kerja queue dapat disamakan pada sebuah
antrean di suatu loket dimana berlaku prinsip ‘Siapa yang duluan antre dia
yang akan pertama kali dilayani‘, sehingga dapat dikatakan prinsip
kerja queue sama dengan prinsip sebuah antrean.
Karakteristik penting antrian sebagai berikut:
1.
Elemen antrian yaitu item-item data yang terdapat di elemen antrian.
2.
Head/Front (elemen terdepan dari antrian).
3.
Tail/Tear (elemen terakhir dari antrian).
4.
Jumlah elemen pada antrian (count).
Ada beberapa kondisi yang bisa kita temukan dalam queue. Kondisi antrian
yang menjadi perhatian adalah:
1.Penuh
Bila elemen di antrian mencapai kapasitas maksimum antrian. Pada kondisi
ini, tidak mungkin dilakukan penambahan ke antrian. Penambahan elemen
menyebabkan kondisi kesalahan Overflow.
2.Kosong
Bila tidak ada elemen di antrian. Pada kondisi ini, tidak mungkin dilakukan
pengambilan elemen dari antrian. Pengambilan elemen menyebabkan
kondisi kesalahan Underflow.
Operasi – Operasi dalam Queue dan Deklarasinya Dalam Program
Sebuah queue di dalam program komputer dideklarasikan sebagai sebuah
tipe bentukan baru, di dalam Bahasa C, biasa disebut struct. Sebuah
struktur data dari sebuah queue setidaknya harus mengandung tiga variabel,
yakni:
1.Variabel head yang akan berguna sebagai penanda bagian depan antrian,
2.Variabel tail yang akan berguna sebagai penanda bagian belakang
antrian.
3.Array data dari yang akan menyimpan data-data yang dimasukkan ke
dalam queue tersebut.
Dimana, nilai MAX didefinisikan sebagai jumlah tumpukan maksimum yang
dapat disimpan dalam queue. Setelah struktur data dari queue didefinisikan
dengan syntax di atas, maka setelah itu dapat dibuat variabel-variabel baru
yang mengacu pada tipe data Queue di atas, misalkan membuat sebuah
variabel bernama antrian yang bertipe Queue
Pada dasarnya, operasi-operasi dasar pada queue mirip dengan operasioperasi
dasar
pada stack.
Perbedaannya
hanya
pada
prosedur push dan pop saja. Pada queue, prosedur yang berfungsi untuk
memasukkan data/ nilai ke dalam antrian adalah enqueue, sedangkan
prosedur
untuk
mengeluarkan
data/
nilai
dari
antrian
adalah dequeue. Berikut adalah operasi – operasi dasar dalam Queue:
1.Prosedur Create
Sama
pada stack,
prosedur
ini
berfungsi
untuk
mengosongkan queue dengan cara meletakkan HEAD dan TAIL pada
indeks array ke-(-1).
2. Fungsi IsEmpty
Sama seperti fungsinya pada stack, fungsi ini berfungsi untuk melakukan
pengecekan terhadap queue, apakah queue tersebut kosong atau tidak.
Jika queue tersebut kosong (artinya, HEAD dan TAIL berada pada posisi -1,
atau bisa juga ketika HEAD > TAIL), maka fungsi akan mengembalikan nilai
1 (true), tetapi jika queue tersebut tidak kosong/ berisi (artinya, HEAD dan
TAIL tidak berada pada posisi -1), maka fungsi akan mengembalikan nilai 0
(false).
3.Fungsi IsFull
Fungsi ini berfungsi untuk melakukan pengecekan terhadap queue,
apakah queue tersebut penuh atau
tidak.
Jika queue tersebut
penuh
(artinya, TAIL berada pada posisi MAX), maka fungsi akan mengembalikan
nilai 1 (true), tetapi jika queue tersebut tidak penuh (artinya, TAIL tidak
berada pada posisi MAX), maka fungsi akan mengembalikan nilai 0 (false).
Berikut deklarasi fungsi IsFull dalam Bahasa C:
4.Prosedur EnQueue
Prosedur ini digunakan untuk memasukkan sebuah data / nilai ke
dalam queue. Sebelum sebuah data / nilai dimasukkan ke dalam queue,
maka prosedur ini terlebih dahulu melakukan pengecekan terhadap posisi
HEAD dan TAIL. Jika posisi HEAD dan TAIL masih berada pada indeks ke-(1) (artinya queue masih kosong), maka prosedur ini akan menempatkan
HEAD dan TAIL pada indeks ke-0 terlebih dahulu, baru setelah itu
memasukkan data / nilai ke dalam array data queue. Namun, jika posisi
HEAD dan TAIL tidak berada pada posisi ke-(-1), maka posisi TAIL yang
akan dinaikkan satu level. Jadi, pada proses enqueue, TAIL-lah yang
berjalan seiring masuknya data baru ke dalam antrian, sedangkan HEAD
akan tetap pada posisi ke-0.
5. Prosedur DeQueue
Prosedur ini digunakan untuk mengeluarkan atau membuang sebuah data/
nilai yang paling awal masuk (yang berada pada posisi HEAD, yakni yang
paling depan dari antrian) ke dalam queue. Pekerjaan yang dilakukan oleh
prosedur ini adalah menaikkan nilai HEAD satu level. Jadi, setiap satu kali
data dikeluarkan, maka posisi HEAD naik bertambah satu level. Misalkan
HEAD berada pada indeks ke-0, maka ketika akan mengeluarkan/
menghapus data pada posisi paling depan (pada posisi HEAD), prosedur ini
akan menaikkan posisi HEAD ke indeks array ke-1. Atau dengan cara
menggeser semua elemen antrian kedepan dan mengurangi TAIL dengan 1
penggeseran dilakukan dengan menggunakan looping.
6. Prosedur Clear
Untuk menghapus elemen-elemen queue dengan cara membuat Tail dan
Head=
-1.
Penghapusan
elemen-elemen queue sebenarnya
tidak
menghapus arraynya, namun hanya mengeset indeks pengaksesan-nya ke
nilai -1 sehingga elemen-elemen queue tidak lagi terbaca.
7. Prosedur Tampil
Untuk menampilkan nilai-nilai elemen queue menggunakan looping dari
HEAD sampai dengan TAIL. Berikut deklarasi prosedur tampil:
Macam – Macam Queue dan Representasinya
1. Queue dengan Linear Array
Linear array adalah suatu array yang dibuat seakan-akan merupakan suatu
garis lurus dengan satu pintu masuk dan satu pintu keluar. Berikut ini
diberikan deklarasi kelas QueueLinear sebagai implementasi dari Queue
menggunakan linear array. Dalam prakteknya, kita dapat menggantinya
sesuai dengan kebutuhan kita. Data dikses dengan field data, sedangkan
indeks item pertama dan terakhir disimpan dalam variabel Head dan Tail.
Konstruktor akan menginisialisasi nilai Head dan Tail dengan -1 untuk
menunjukkan bahwa antrian masih kosong dan mengalokasikan data
sebanyak MAX_QUEUE yang ditunjuk oleh data. Destruktor akan
mengosongkan antrian kembali dan mendealokasikan memori yang
digunakan oleh antrian.
Di bawah ini diperlihatkan suatu queue yang akan menempati N elemen
array memori, serta cara pengurangan (delete) dan penambahan (added)
elemen pada queue tersebut.
A
Tail
B
C
D
Head : 1
.....
:4
1
2
3
4
5
6
7
.....
N
.....
N
.....
N
REMOVE(Q)
B
Tail
C
D
Head : 2
.....
:4
1
2
3
4
5
6
7
INSERT(INSERT(E),F)
B
Tail
C
D
E
F
Head : 2
.....
:6
1
2
3
4
5
6
7
REMOVE(Q)
C
Tail
D
E
F
Head : 3
.....
:6
1
2
3
4
5
6
7
.....
N
Dapat dilihat bahwa setiap terjadi penghapusan elemen pada queue nilai
(index) dari Head bertambah satu (1) ; dapat ditulis HEAD = HEAD+1.
Begitu pula bila terjadi penambahan elemen pada queue nilai (index) Tail
bertambah satu (1); dapat ditulis TAIL = TAIL + 1.
Akan terjadi ketidakefisienan bila penambahan elemen sudah pada posisi
index N (Tail = N) maka tidak dapat lagi dilakukan penambahan elemen,
sedangkan dilokasi memori yang lain (nilai di bawah N) masih terdapat
memori array yang kosong. Untuk mengatasi hal tersebut maka kita
bayangkan bahwa memori dari queue tersebut berbentuk melingkar dimana
kedua ujungnya saling bertemu atau disebut juga dengan Circular Queue.
2. Queue dengan Circular Array
Circular array adalah suatu array yang dibuat seakan-akan merupakan
sebuah lingkaran dengan titik awal (head) dan titik akhir (tail) saling
bersebelahan jika array tersebut masih kosong. Jika menggunakan array
untuk
queue
seperti
di
atas,
maka
ketika
ada
proses
pengambilan (dequeue) ada proses pergeseran data. Proses pergeseran
data ini pasti memerlukan waktu apalagi jika elemen queue-nya banyak.
Oleh karena itu solusi agar proses pergeseran dihilangkan adalah dengan
metode circular array. Kelebihan jenis ini adalah alokasi penyimpanan data
yang optimal dan dinamis. Hal ini disebabkan penambahan maupun
pengurangan data/ item antrian yang baru selalu menempati pos kosong
yang disediakan sistem.
Queue dengan circular array dapat dibayangkan sebagai berikut:
5
1
6
7
2
9
3
Front =1
Tail
=4
4
5
Aturan-aturan dalam queue yang menggunakan circular array adalah:
1) Proses penghapusan dilakukan dengan cara nilai depan (front) ditambah
1: front=front+1.
2)Proses penambahan elemen sama dengan linear array yaitu nilai
belakang ditambah 1: tail=tail + 1.
3) Jika front = maks dan ada elemen yang akan dihapus, maka nilai front =
1.
4) Jika tail = maks dan front tidak 1 maka jika ada elemen yang akan
ditambahkan, nilai tail = 1
5) Jika hanya tinggal 1 elemen di queue (front = tail), dan akan dihapus
maka front diisi 0 dan tail diisi dengan 0 (queue kosong).
3. Queue dengan Linked-List
Selain menggunakan array, queue juga dapat dibuat dengan linked list.
Metode linked list yang digunakan adalah double linked list. Operasi-operasi
Queue dengan Double Linked List:
1. IsEmpty
Fungsi IsEmpty berguna untuk mengecek apakah queue masih kosong atau
sudah berisi data. Hal ini dilakukan dengan mengecek apakah head masih
menunjukkan pada Null atau tidak. Jika benar berarti queue masih kosong.
2. IsFull
Fungsi IsFull berguna untuk mengecek apakah queue sudah penuh atau
masih bias menampung data dengan cara mengecek apakah Jumlah Queue
sudah sama dengan MAX_QUEUE atau belum. Jika benar maka queue
sudah penuh.
3. EnQueue
Fungsi EnQueue berguna untuk memasukkan sebuah elemen ke dalam
queue (head dan tail mula-mula meunjukkan ke NULL).
4. DeQueue
Procedure DeQueue berguna untuk mengambil sebuah elemen dari queue.
Hal ini dilakukan dengan cara menghapus satu simpul yang terletak paling
depan (head).
Penerapan Aplikasi Queue
Meski Queue sangat sederhana, namun Queue merupakan kakas dasar
penyelesaian masalah-masalah besar. Penggunaan Queue yang utama
adalah untuk simulasi fenomena antrian di dunia nyata, serta fenomena
antrian di pengolahan data.
Penerapan Queue dalam Kehidupan Sehari – hari
1. Pada Pembelian Tiket
Dalam kehidupan sehari-hari kita bisa dapati melalui penerapan pembelian
tiket kereta api, tiket pesawat, tiket kapal laut, pembayaran tiket tol,
pembayaran listrik, pembayaran air, dan lain sebagainya. Saat mengantri di
loket untuk membeli tiket. Istilah yang cukup sering dipakai seseorang
masuk dalam sebuah antrian adalah enqueue. Dalam suatu antrian, yang
datang terlebih dahulu akan dilayani lebih dahulu. Istilah yang sering dipakai
bila seseorang keluar dari antrian adalah dequeue. Walaupun berbeda
implementasi, tapi pada prinsipnya sama saja.
2. Antrian Mobil di Pintu Tol
Ketika sebuah mobil datang, dari belakang akan menuju kedepan dari
antrian. Setelah mobil mendapatkan karcis tol, antrian yang berada didepan
akan maju. Pada saat menempatkan data pada ujung (tail) dari queue
disebut dengan enqueue. Pada saat memindahkan data dari kepala (head)
sebuah queue disebut dengan dequeue.
Penerapan Aplikasi Queue dalam Aplikasi Komputer
1. Pada Aplikasi Download Manager IDM
Queue juga dipakai sebagai salah satu fitur dari Internet Download
Manager atau yang biasa disebut dengan IDM. Fitur ini sangat membantu
bagi para pecinta download. Fitur ini akan membantu pengguna untuk
mendownload file yang anda pilih satu-persatu, jadi sebanyak apapun anda
mendownload, tetapi akan tetap dibuat antrian atau istilahnya queueing.
Sistem yang diterapkan dalam fitur ini adalah pada saat download file,
maka IDM akan mendownload satu per satu, hingga download file selesai
maka baru akan secara otomatis mendownload file berikutnya.
2. Printer Sharing
Pada suatu jaringan terdapat beberapa aplikasi yang dapat membantu kita
untuk mempermudah pekerjaan kita untuk melakukan cetak hanya dengan
menggunakan 1 printer yang dapat dipakai oleh banyak orang yaitu dengan
cara printer sharing. Aplikasi ini menggunakan cara kerja queue atau juga
disebut dengan antrian, untuk mencetak suatu document yang hanya
menggunakan 1 printer yang dapat diakses oleh orang banyak, penggunaan
queue diperlukan untuk mengatur sistem jaringan agar tidak terjadi error,
dengan cara siapa yang terlebih dahulu mencetak suatu dokumen, dia akan
dilayani terlebih dahulu untuk mencetak dokumen dan jika ada seseorang
yang ingin mencetak dokumen dia akan dimasukan kedalam antirian dan
menunggu untuk dapat mencetak sebuah document.
Penerapan Aplikasi Queue dalam Sistem Produksi
Dalam sistem produksi terdapat banyak sekali aplikasi antrian, misalnya
pada mesin pengisi (filling) botol minuman otomatis di pabrik. Mesin ini
digunakan agar mempermudah pekerjaan, meminimalisir waktu, dan masih
banyak lagi manfaat lainnya. Cara kerja dari mesin filling otomatis ini yaitu :
1. Beberapa botol disiapkan pada tempatnya.
2.Kemudian mesin akan mengisi air kedalam botol sesuai dengan posisinya.
3. Botol yang diletakkan paling depan akan diisi oleh mesin paling awal,
setelah botol paling depan terisi baru akan berjalan ke botol yang
dibelakangnya, dan seterusnya.
Prinsip queue atau antrian digunakan dalam mesin ini, karena FIFO (First In
First Out). Jadi botol yang paling awal/depan sampai pada pengisi air, maka
botol itu juga yang akan pertama keluar/diisi.
6. Kesimpulan
Queue (antrian) adalah salah satu list linier dari struktur data yang
beroperasi dengan cara First In First Out (FIFO) yaitu elemen pertama yang
masuk merupakan elemen yang pertama keluar. Data-data di dalam antrian
dapat bertipe integer, real, record dalam bentuk sederhana atau terstruktur.
Queue dilakukan dengan cara penyisipan di satu ujung, sedang
penghapusan di ujung lain. Ujung penyisipan biasa disebut rear/tail, sedang
ujung penghapusa disebut front/head.
Sebuah queue dalam program setidaknya harus mengandung tiga variabel,
yakni: head untuk penanda bagian depan antrian, tail unttuk penanda bagian
belakang antrian, dan array data untuk menyimpan data-data yang
dimasukkan ke dalam queue tersebut.
Pada queue ada operasi – operasi dasar, yaitu: prosedur create untuk
membuat queue baru yang kosog, fungsi IsEmpty untuk mengecek queue
tersebut kosong atau tidak, fungsi IsFull untuk mengecek queue tersebut
penuh atau tidak, prosedur EnQueue untuk memasukkan data kedalam
queue, prosedur DeQueue untuk mengeluarkan sebuah elemen pada
posisi head dari queue, fungsi clear untuk menghapus elemen queue, dan
prosedur tampil untuk menampilakn elemen yang ada pada queue.
Ada beberapa queue, yaitu: queue dengan linear array yaitu queue yang
dibuat seakan-akan merupakan suatu garis lurus dengan satu pintu masuk
dan satu pintu keluar, queue dengan circular array yaitu queue yang dibuat
seakan-akan merupakan sebuah lingkaran dengan titik awal (head) dan titik
akhir (tail) saling bersebelahan jika array tersebut masih kosong, dan queue
dengan linked-list.
7. Daftar Pustaka
Sianipar, R.H. 2015. Struktur Data C++ dengan Pemograman Generik.
Yogyakarta: ANDI YOGYAKARTA.
Kristanto, Andri. 2013. ALGORITMA DAN PEMROGRAMAN DENGAN C++
(edisi II).