Anda di halaman 1dari 15

MODUL PERKULIAHAN

Praktikum Algoritma
dan Struktur Data
IMPLEMENTASI QUEUE (ANTRIAN)

Fakultas : Ilmu Komputer Tatap Muka Kode Mata Kuliah : W4119004

Program Studi : Teknik Informatika


14 Disusun Oleh : Chaerul Anhar Tanof, S.Kom,MMSI

Asbtrak Tujuan
Queue merupakan sebuah struktur data abstrak yang Mahasiswa mampu :
berbentuk kumpulan data yang digambarkan seperti suatu - Memahami konsep Queue dan FIFO
antrian. Queue menggunakan kosep FIFO (first in fist out), - Mengimplementasikan Queue
dimana data yang pertama kali dimasukkan atau disimpan, - Mampu membuat sebuah program antrian
sederhana
maka data itulah yang pertama kali akan diakses atau
dikeluarkan. Pada sesi ini akan dibahas mengenai konsep
dari Queue dan operasi data pada queue disertai dengan
implementasi pada sebuah program.
STRUKTUR DATA QUEUE

1. Definisi dan konsep dari Queue

Queue dapat diartikan sebagai suatu kumpulan data yang dimuat kedalam sebuah antrian,
dimana penambahan elemen data hanya dapat dilakukan pada suatu ujung (yang disebut dengan
sisi belakang atau rear), dan penghapusan atau pengambilan elemen datanya dilakukan lewat
ujung yang lain (disebut depan atau front). Kaidah utama dalam konsep queue adalah FIFO yang
merupakan singkatan dari First In First Out, artinya data yang pertama kali dimasukkan atau
disimpan, maka data itulah yang pertama kali akan diakses atau dikeluarkan. Analoginya seperti
antrian di sebuah pintu masuk kereta orang yang datang lebih dahulu, maka akan masuk terlebih
dahulu dari orang-orang yang datang setelahnya. Gambar 1 mengilustrasikan kerja sebuah queue.

Gambar 1 - Ilustrasi queue

Seperti halnya pada antrian yang biasa kita lakukan sehari-hari, antrian dimulai dari depan
ke belakang, jika yang didepan belum pergi meninggalkan antrian maka antrian akan terus
bertambah dari belakang dan antrian paling belakang inilah yang dinamakan rear atau tail,
sedangkan posisi yang paling depan dari suatu antrian yang akan diproses dinamakan front.
Ketika antrian baru ditambahkan, maka antrian yang paling akhir masuk akan berubah menjadi
rear. Jika ada yang keluar dari antrian, data yang diambil adalah data yang paling depan (front)
dan data berikutnya setelah data yang keluar berubah menjadi yang paling depan (head/front).

2020 Praktirum Algoritma dan Struktur Data Pusat Bahan Ajar dan eLearning
2 Chaerul Anhar Tanof, S.Kom, MMSI http://www.undira.ac.id
Perbedaan antara stack dan queue terdapat pada aturan penambahan dan penghapusan
elemen data. Pada stack, operasi penambahan dan penghapusan elemen dilakukan di satu tempat
atau satu ujung. Sementara pada queue operasi penambahan dapat dilakukan di tempat yang
berbeda. Penambahan elemen dilakukan di salah satu ujung, biasa disebut dengan elemen depan,
dan ujung lainnya, yang biasa disebut dengan ujung belakang digunakan untuk penghapusan data.
Ilustrasi operasi pada queue dapat dilihat pada gambar 2.

Gambar 2 - Ilustrasi operasi pada queue

2. Operasi / Prosedur Standar pada QUEUE

QUEUE merupakan struktur data dinamis, ketika program dijalankan, jumlah elemennya
dapat berubah secara dinamis sesuai keperluan. Berikut ini operasi-operasi standar pada queue :
a. Inisialisasi, merupakan prosedur untuk membuat queue pada kondisi awal, yaitu queue
yang masih kosong (belum mempunyai elemen)
b. InQueue, Insert Queue merupakan prosedur untuk memasukkan sebuah elemen data
baru kedalam queue. Data yang ditambahkan akan berada di bagian paling belakang.
c. DeQueue, Delete Queue merupakan prosedur untuk mengambil sebuah data dari queue.
Elemen data yang diambil adalah elemen yang paling depan.
d. Selain tiga fungsi tersebut, kita akan membuat dua fungsi tambahan untuk mengecek
apakah antrian kosong (isEmpty) atau mengecek apakah antrian penuh (isFull) dan juga
untuk melihat isi dari suatu antrian (view).

2020 Praktirum Algoritma dan Struktur Data Pusat Bahan Ajar dan eLearning
3 Chaerul Anhar Tanof, S.Kom, MMSI http://www.undira.ac.id
3. Membuat queue sederhana

Pada bagian ini kita akan coba menyusun sebuah queue pada program sederhana. Adapun
proses penyusunan queue nya dilakukan secara bertahap dimulai dari inisialisasi, kemudian
menambahkan fungsi-fungsi yang merepresentasikan operasi pada queue.

a. Deklarasi Awal Queue


Variabel yang digunakan adalah data (array sebagai tempat queue), head dan tail.
Sama seperti Stack, nilai dari head dan tail dimulai dari -1 yang menandakan queue masih
dalam keadaan kosong. Sebagai contoh kita akan membuat queue dengan data maksimal
sebanyak 7 data dalam antrian.

#define max 7
int data[max];
int head =- 1, tail =- 1;

b. Membuat prosedur IsEmpty


Sama halnya operasi di Stack, IsEmpty digunakan untuk mengecek apakah sebuah queue
kosong atau tidak. Indikator kosong disini dilihat dari head dan tail yang nilainya -1
Sehingga kita dapat membuat fungsi nya sebagai berikut :

IsEmpty()
{
if (head == -1 && tail == -1)
return true;
else
return false;
}

c. Membuat prosedur IsFull


Operasi IsFull digunakan untuk mengecek apakah elemen data pada queue sudah penuh
atau belum. Indikatornya adalah jika nilai tail berisi = NilaiMax – 1. Mengapa? karena
nilai maksimal pada array yang mempunyai index berjumlah 7, sehingga pada saat
diakses akan mempunyai nilai maksimal 6.

2020 Praktirum Algoritma dan Struktur Data Pusat Bahan Ajar dan eLearning
4 Chaerul Anhar Tanof, S.Kom, MMSI http://www.undira.ac.id
prosedur IsFull yang dapat kita buat adalah sebagai berikut :

IsFull()
{
if (tail == max-1)
return true;
else
return false;
}

d. Enqueue
Enqueue digunakan untuk memasukkan data kedalam queue sama seperti operasi push
dalam stack. Sebelum memasukkan data kedalam antrian, kita harus mengecek terlebih
dahulu apakah queue udah penuh atau belum. Jika isi queue belum penuh maka kita harus
mengecek apakah posisi head sudah berada pada nilai 0 atau belum. Ini sangat penting
karena nilai head tidak akan lebih dari 0. Yang perlu diperhatikan, nilai yang akan
bergerak terus adalah posisi tail karena data yang baru masuk akan berada pada antiran
paling belakang (FIFO), sedangkan head hanya penunjuk urutan paling depan, sehingga
nilainya tidak pernah lebih dari 0, kecuali jika antrian kosong, maka posisi head dan tail
akan kembali menjadi -1. Script yang kita buat adalah sebagai berikut :

void Enqueue(){
if (IsFull())
{
cout << "Antrian sudah penuh, mohon tunggu beberapa saat lagi ";
getch();
}
else
{
if (IsEmpty())
{
head = tail = 0;
cout<<"Masukkan data : ";cin>>data[tail];
}
else
{
tail++;
cout << "Masukkan data : ";
cin >> data[tail];
}
}
}

2020 Praktirum Algoritma dan Struktur Data Pusat Bahan Ajar dan eLearning
5 Chaerul Anhar Tanof, S.Kom, MMSI http://www.undira.ac.id
e. Dequeue
Dequeue merupakan kebalikan dari fungsi enqueue yang sama seperti operasi pop pada
Stack, dequeue digunakan untuk mengambil data yang sudah masuk, dimana data yang
diambil adalah urutan pertama. Kita tinggal membaca data yang ada di posisi head. Inilah
fungsi dari head dalam sebuah queue. Jangan lupa untuk mengcek terlebih dulu apakah
queue kosong atau tidak. Jika terdapat isi dalam queue, setelah data diambil data
dibelakangnya harus digeser ke depan sehingga data tersebut menjadi head yang baru.

void Dequeue()
{
if (IsEmpty())
{
cout << "Antrian kosong ! ";
getch();
}
else
{
cout << "Data yang diambil : " << data[head];
for (a = head; a <= tail-1 ;a++)
data[a] = data[a+1];
tail--;
if(tail == -1)
head = -1;
}
}

f. Clear
Operasi clear digunakan untuk menghapus seluruh data yang ada di dalam queue. Cara
mudahnya adalah merubah nilai pada head dan tail menjadi -1, tidak perlu diperhatikan
data yang ada di dalam array, karena nantinya data tersebut juga akan ditimpa.
Penghapusan queue ini sebenarnya tidak menghapus array-nya, tetapi hanya mengeset
indeks aksesnya ke nilai -1 sehingga elemen-elemen antrean tidak lagi terbaca.

void Clear()
{
head = tail =- 1;
cout << "Antrian sudah dikosongkan ! ";
getch();
}

2020 Praktirum Algoritma dan Struktur Data Pusat Bahan Ajar dan eLearning
6 Chaerul Anhar Tanof, S.Kom, MMSI http://www.undira.ac.id
g. View
Operasi view digunakan untuk melihat data yang ada didalam queue. Caranya adalah
dengan membaca data pada index yang terdapat diantara head sampai dengan tail.

void View() {
if (IsEmpty())
{
cout << "Antrian kosong ! ";
getch();
}
else
{
for(a = head; a <= tail; a++)
cout << "Data pada antrian ke " << a << " = " << data[a] << endl;
getch();
}
}

Secara konsep, queue di logikakan seperti sebuah antrian. Berikut adalah kompilasi script
program tersebut secara keseluruhan :

#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
using namespace std;

main (void)
{
int cek = 0, data[8], x, hapus;
char pil;

do
{
cout << "Praktikum Struktur Data Queque" << endl;
cout << endl;
printf ("1. Masukan Data Antrian\n");
printf ("2. Hapus Data Antrian\n");
printf ("3. Lihat Data Antrian\n");
printf ("4. Exit Program\n");
cout << endl;
printf ("Masukan pilihan anda : ");
pil = getche();
cout << endl;
// SCRIPT DILANJUT KE HALAMAN BERIKUTNYA

2020 Praktirum Algoritma dan Struktur Data Pusat Bahan Ajar dan eLearning
7 Chaerul Anhar Tanof, S.Kom, MMSI http://www.undira.ac.id
if (pil != '1' && pil != '2' && pil != '3' && pil != '4')
printf ("\n\nPilihan tidak dikenali, ulangi lagi . . .\n");
else
{
if (pil == '1') //PUSH
{
if (cek == 8)
printf ("\nAntrian penuh\n");
else
{
printf ("\nMasukan angka-> "); scanf ("%i", &x);
data[cek] = x;
cek++;
}
}
else
{
if (pil == '2') //POP
{
if (cek == 0)
printf ("Maaf tidak ada antrian untuk dihapus\n\n");
else
{
hapus = data[0];
for (int v = 0; v < cek; v++)
data[v] = data[v + 1];
data[cek - 1] = NULL;
cek--;
cout << endl;
printf ("Yakin anda ingin data ini dihapus ?");
cout << endl;
printf ("\nData dengan nilai = %i akan terhapus. [Tekan Enter]", hapus);
}
getch();
}
else
{
if (pil == '3') //mengecek data
{
if (cek == 0)
printf ("\nMaaf tidak ada antrian untuk ditampilkan\n\n");

// SCRIPT DILANJUT KE HALAMAN BERIKUTNYA

2020 Praktirum Algoritma dan Struktur Data Pusat Bahan Ajar dan eLearning
8 Chaerul Anhar Tanof, S.Kom, MMSI http://www.undira.ac.id
else
{
printf ("\n");
for (int z = 0; z < cek; z++)
{
printf (" { ");
printf ("%i", data[z]);
printf (" } ");
}
}
getch();
}
}
}
}
}

while (pil != '4');


cout << endl;
cout << endl;
printf ("Yakin anda ingin keluar ? {{{Tekan Enter}}}");
pil = getche();
}

Hasil dari eksekusi program tersebut adalah sebagai berikut :

2020 Praktirum Algoritma dan Struktur Data Pusat Bahan Ajar dan eLearning
9 Chaerul Anhar Tanof, S.Kom, MMSI http://www.undira.ac.id
4. Implementasi Queue dengan Array linear

Karena queue merupakan suatu kumpulan data, maka tipe data yang sesuai untuk menyajikan
nya adalah menggunakan array atau linked list.

#include <iostream>
#define MAX 20 //maksimum data queue
using namespace std;

//Deklarasi struct antrian


struct Queue {
int front, rear, data[MAX];
}Q;

//cek apakah antrian penuh


bool isFull() {
return Q.rear == MAX;
}

//cek apakah antrian kosong


bool isEmpty() {
return Q.rear == 0;
}

//Menampilkan Queue
void printQueue() {
if (isEmpty()) {
cout << "Antrian kosong"<<endl;
}
else { cout << "QUEUE : ";
for (int i = Q.front; i < Q.rear; i++) {
cout << Q.data[i] << ((Q.rear == i) ? "" : ",");
cout << endl;
}
}
}

//manambahkan data ke antrian


void enqueue() {
if (isFull()) { cout << "Antrian penuh!"<<endl; }
else {
int data;
//menambahkan data ke antrian
cout << "Masukkan Data : ";cin >> data;
Q.data[Q.rear] = data;

//menempatkan tail pada elemen data terakhir yang ditambahkan


Q.rear++;
cout << "Data ditambahkan\n";
printQueue();
}
}

//script dilanjutkan ke halaman berikutnya

2020 Praktirum Algoritma dan Struktur Data Pusat Bahan Ajar dan eLearning
10 Chaerul Anhar Tanof, S.Kom, MMSI http://www.undira.ac.id
// mengambil data dari antrian
void dequeue() {
if (isEmpty()) {
cout << "Antrian masih kosong"<<endl;
}
else{
cout << "Mengambil data \"" << Q.data[Q.front] << "\"..." << endl;
//menggeser antrian data ke head
for (int i = Q.front; i < Q.rear; i++)
Q.data[i] = Q.data[i + 1];
//menempatkan tail pada data terakhir yang d igeser
Q.rear--;
printQueue();
}
}

int main() {
int choose;
do {
//Tampilan menu
cout << "-------------------\n"
<< " Menu Pilihan\n"
<< "-------------------\n"
<< " [1] Enqueue \n"
<< " [2] Dequeue\n"
<< " [3] Keluar \n\n"
<< "-------------------\n"
<< "Masukkan pilihan : "; cin >> choose;
switch (choose) {
case 1:
enqueue();
break;
case 2:
dequeue();
break;
default:
cout << "Pilihan tidak tersedia";
break;
}
} while (choose !=3);
return 0;
}

2020 Praktirum Algoritma dan Struktur Data Pusat Bahan Ajar dan eLearning
11 Chaerul Anhar Tanof, S.Kom, MMSI http://www.undira.ac.id
5. Contoh program antrian

Berikut adalah implementasi queue pada program antrian sederhana di salah satu bank.
Dimana terdapat menu untuk menambahkan antrian, memproses antrian dan memeriksa antrian
yang belum dilayani. Berikut adalah script programnya :

#include <iostream>
#include <conio.h>
#include <windows.h>
#define MAX 10
using namespace std;

int nomer[MAX];
int head=-1, tail=-1, k=1;

bool IsEmpty(){
if(tail == -1){
return true;
}else{
return false;
}
}

bool IsFull(){
if(tail == MAX-1){
return true;
}else{
return false;
}
}
void Masuk(int ya){
if (IsEmpty()){
head=tail=0;
}else {
tail++;
}
nomer[tail]=ya;
}
void Keluar(){
if(IsEmpty()){
cout<<"Antrian sudah kosong ! ";

} else {
for(int j=head;j<tail;j++){
nomer[j]=nomer[j+1];
}
tail--;
if(tail == -1){
head = -1;
}
}
}
void Clear(){
head=tail=-1;
k=1;
} //script dilanjutkan ke halaman berikutnya

2020 Praktirum Algoritma dan Struktur Data Pusat Bahan Ajar dan eLearning
12 Chaerul Anhar Tanof, S.Kom, MMSI http://www.undira.ac.id
void View(){
if(IsEmpty()){
cout<<"Antrian kosong ! ";

}else {
{int j;

cout<<endl;
cout<<"== No. Antrian yang telah dilayani =="<<endl;
for(int k=1;k<=j;k++)
{
cout << "---------------------------------"<<endl;
cout << "No. Antrian : [" << k << "]"<<endl;
cout << "----------------------------------"<< endl;}
cout<<endl;
cout<<endl;
cout<<"== No. Antrian yang Belum dilayani =="<<endl;
for(j=head;j<=tail;j++)
{
cout << "----------------------------------"<<endl;
cout << "No. Antrian : [" << nomer[j] << "]"<<endl;
cout <<"-----------------------------------"<< endl;}}
}
}

int main(){
int pilihan, urutan;
do{
system("cls");
cout << "\n==== PROGRAM ANTRIAN BANK ====="<<endl;
cout << "================================="<<endl;
cout << "|1. Tambahkan Antrian |"<<endl;
cout << "|2. Panggilkan Antrian |"<<endl;
cout << "|3. Lihat semua daftar |"<<endl;
cout << "|4. Hapus Semua daftar |"<<endl;
cout << "|5. Exit |"<<endl;
cout << "================================="<<endl;
cout << "\nPilih : "; cin >> pilihan;
cout <<endl;
if(pilihan == 1){
if(IsFull()) {
cout<<"Antrian sudah penuh, mohon tunggu beberapa saat lagi ";
}
else{
urutan=k;
Masuk(urutan);
cout << "No. Antrian : "<< k<<endl;
cout << "Antian yang Menunggu : "<< tail<<endl;
k++;
}
}
else if(pilihan == 2){
cout << "No. Antrian : " << nomer[head] << endl;
Keluar();
cout << "Silahkan! Anda Dipanggil!" << endl;
}

//script dilanjutkan ke halaman berikutnya

2020 Praktirum Algoritma dan Struktur Data Pusat Bahan Ajar dan eLearning
13 Chaerul Anhar Tanof, S.Kom, MMSI http://www.undira.ac.id
else if(pilihan == 3){
View();
}
else if(pilihan == 4){
Clear();
cout<<"Antrian Berhasil dikosongkan ! ";
}
else if(pilihan == 5){
}
else{
cout << "Input yang dimasukan anda salah ! "<< endl;
}
getch();
}
while(pilihan!=5);
}

Hasil eksekusi programnya adalah sebagai berikut :

Nomor antrian yang dipanggil / diproses adalah nomor 1


karena menggunakan prinsip FIFO.
setlah nomor antrian 1 dipanggil, nomor antrian berikutnya yang
akan keluar jika dipanggil adalah 2

2020 Praktirum Algoritma dan Struktur Data Pusat Bahan Ajar dan eLearning
14 Chaerul Anhar Tanof, S.Kom, MMSI http://www.undira.ac.id
DAFTAR PUSTAKA
1. Utami, E. Dhuhita, Windha MP, Langkah Mudah Belajar Struktur Data Menggunakan C/C++, Jakarta: Elex
Media Komputindo, 2017
2. Reema Thareja, Data structures using C. 02. OXFOR, New Delhi, 2014.
3. FourtMark Allen Weiss, Fourth Edition Data Structures and Algorithm Analysis in C++, Pearson, 2014.
4. Kjell Backman, Structured Programmming with c++, 2012.
5. Budi R, Pemrograman C++, Informatika, Bandung, 2010.
6. Sjukani M, Algoritma: Algoritma dan Struktur Data 1 dengan C, C++ dan Java Edisi 6. Jakarta, Mitra Wacana
Med, 2010.

2020 Praktirum Algoritma dan Struktur Data Pusat Bahan Ajar dan eLearning
15 Chaerul Anhar Tanof, S.Kom, MMSI http://www.undira.ac.id

Anda mungkin juga menyukai