Proses penyimpanan elemen queue dalam pointer mirip dengan operasi pada single linked list yang menggunakan penyimpanan tambah akhir dan hapus awal. Operasi-operasi yang dapat dilakukan dalam queue yang menggunakan representasi linked list adalah:
1. Pendeklarasian sebuah queue
Setiap queue memiliki elemen-elemen (field) berupa posisi depan, posisi belakang, elemen antrian, dan posisi penunjuk ke elemen berikutnya. Berikut ini adalah pendeklarasian queue yang disimpan dengan pointer.
struct node
{
int info;
struct node *next;
};
node *head,*tail,*newnode,*ptr;
2. Inisialisasi Queue
Proses inisialisasi queue yang disimpan dalam pointer adalah dengan memberikan nilai NULL ke pointer head dan tail yang menandakan bahwa pointer depan dan belakang belum menunjuk ke 1 elemen apapun.
void inisialisasi()
{
head=NULL;
tail=NULL;
}
3. Fungsi Cek Isi
Fungsi ini berguna untuk memeriksa apakah suatu queue dalam keadaan isi atau kosong. Fungsi ini berguna ketika proses dequeue yaitu ketika sebuah elemen akan diambil, maka harus diperiksa dulu apakah memiliki data atau tidak. Fungsi ini akan mempunyai nilai benar jika depan atau belakang bernilai NULL.
Implementasinya dalam bahasa C adalah:
int cekIsi()
{
if((head==NULL)&&(tail==NULL))
{
cout<<"\nAntrian kosong";
return(0);
}
else
{
return(1);
}
}
4. Operasi Enqueue
Proses enqueue adalah dengan menambahkan elemen baru ke posisi paling belakang (sambungkan field berikutnya dari field belakang ke posisi pointer baru). Setelah itu, pointer penunjuk belakang harus berpindah ke posisi baru tersebut. Proses ini seperti proses penambahan di belakang pada single linked list.
void enqueue(int item)
{
newnode = new(node);
newnode->info=item;
if((head==NULL)&&(tail==NULL))
{
head=newnode;
tail=newnode;
newnode->next=NULL;
}
else
{
tail->next=newnode;
newnode->next=NULL;
tail=newnode;
}
}
5. Operasi Dequeue
Proses dequeue adalah dengan mengambil data yang ditunjuk pointer depan dan kemudian pointer yang depan tersebut diambil dan kemudian dihapus. Pointer depan harus berpindah ke elemen antrian berikutnya. Proses tersebut dilakukan hanya jika linked list tidak kosong. Proses ini mirip dengan proses penghapusan data awal pada single linked list.
Implementasinya dalam bahasa C adalah:
void dequeue()
{
if(head==tail)
{
head=NULL;
tail=NULL;
}
else
{
head=head->next;
}
}
Program Lengkap:
#include <stdio.h>
#include <conio.h>
#include <process.h>
#include <iostream.h>
struct node
{
int info;
struct node *next;
};
node *head,*tail,*newnode,*ptr;
void menu();
void tampil();
int cekIsi();
void enqueue(int);
void dequeue();
void inisialisasi()
{
head=NULL;
tail=NULL;
}
void main()
{
clrscr();
inisialisasi();
menu();
}
void menu()
{
int pilih,item;
cout<<"MENU";
cout<<"\n1. Tambah";
cout<<"\n2. Hapus";
cout<<"\n3. Tampil";
cout<<"\n4. Keluar";
cout<<"\nMasukkan pilihan: ";
cin>>pilih;
switch(pilih)
{
case 1:
clrscr();
cout<<"\nData yang anda masukkan: ";
cin>>item;
enqueue(item);
clrscr();
cout<<"\nData dalam antrian:\n";
tampil();
getch();
clrscr();
menu();
break;
case 2:
clrscr();
if(cekIsi()==1)
{
dequeue();
if(cekIsi()==1)
{
cout<<"\nData dalam antrian:\n";
tampil();
}
}
getch();
clrscr();
menu();
break;
case 3:
clrscr();
if(cekIsi()==1)
{
cout<<"Data dalam antrian:\n";
tampil();
}
getch();
clrscr();
menu();
break;
case 4:
exit(1);
default:
clrscr();
cout<<"Pilihanmu salah\n\n";
menu();
}
}
int cekIsi()
{
if((head==NULL)&&(tail==NULL))
{
cout<<"\nAntrian kosong";
return(0);
}
else
{
return(1);
}
}
void enqueue(int item)
{
newnode = new(node);
newnode->info=item;
if((head==NULL)&&(tail==NULL))
{
head=newnode;
tail=newnode;
newnode->next=NULL;
}
else
{
tail->next=newnode;
newnode->next=NULL;
tail=newnode;
}
}
void dequeue()
{
if(head==tail)
{
head=NULL;
tail=NULL;
}
else
{
head=head->next;
}
}
void tampil()
{
int i;
ptr=head;
i=1;
while(ptr!=NULL)
{
cout<<"\nSimpul "<<i<<" : "<<ptr->info;
ptr=ptr->next;
i++;
}
}
Sumber
Mata kuliah Struktur Data. Disusun oleh Eko Riswanto
STMIK EL Rahma Yogyakarta.