Anda di halaman 1dari 11

MODUL X

ADT QUEUE
IMPLEMENTASI QUEUE DENGAN LINKED LIST
DOUBLE LINKED LIST
1. DEFINISI QUEUE
Jika diartikan secara harafiah, queue berarti antrian, queue merupakan salah
satu contoh aplikasi dari pembuatan double linked list yang cukup sering kita temui
dalam kehiduypan sehari-hari, misalnya saat Anda mengantri di loket untuk membeli
tiket. Istilah yang cukup sering dipakai seseorang masuk dalam sebuah antrian
adalah enqueue. Dalam suatu antrian, yang dating terlebih dahulu akan dilayani
lebih dahulu. Istilah yang sering dipakai bila seseorang keluar dari antrian adalah
dequeue. Walaupun berbeda implementasi, struktur data queue setidaknya harus
memiliki operasi-operasi berikut :
n!ueue "emasukkan data ke dalam antrian
De!ueue "engeluarkan data terdepan dari antrian
#lear "enghapus seluruh antrian
Ismpty "emeriksa apakah antrian kosong
Is$ull "emeriksa apakah antrian penuh
2. Definisi Linked Lis
%inked list adalah urutan kesatuan record dan hubungan antara satu record
dengan record lainnya yang ditentukan oleh suatu pointer, yang dapat
digambarkan seperti :
................
&I%
'ada gambar diatas dapat kita lihat bah(a setiap record mempunyai satu
pointer yang menun)uk ke record yang berikutnya, dengan pengecualian untuk
record yang terakhir yang menun)uk ke record yang tidak ada. *ecord yang tidak
ada tersebut kita definisikan deng+n nilai &ull , &I% - yang artinya )uga sebagai
akhir suatu list.
Praktikum Struktur Data
Sofa Sofiana, S.Kom.
Pusat Bahan Ajar dan Elearning
Universitas Mercu Buana
12
1


'rinsip pada suatu list dapat kita bandingkan seperti suatu rantai yang
matanya dihubungan satu sama lain. "ata rantai tersebut dapat kita
sosialisasikan dengan record atau node. Jadi, untuk selan)utnya dalam konteks
linked list kita menggunakan terminologi &.D untuk pengertian sebuah record.
#iri khas suatu node dalam linked list adalah harus selalu terdapat field paling
sedikit dua bagian , yaitu:
/. Data
0. 'ointer
1ecara umum linked list dibedakan atas 0 macam, yaitu :
/. 1ingle linked list dan
0. Double linked list
1ingle linked list mempunyai satu pointer untuk setiap node yang menun)uk ke
node berikutnya , artinya hanya punya satu arah. Double linked list mepunyai dua
pointer yang menun)uk ke node berikutnya dan sebelumnya, artinya punya dua
arah.
Double linked list dapat dilihat pada gambar diatas pointer node pertama
tidak mempunyai pendahulu, )adi pointer yang menun)uk ke elemen sebelumnya
adalah elemen yang tidak ada , &I% - dan anolog untuk node terakhir, dimana
pointer yang menun)uk ke elemen berikutnya adalah elemen yang tidak ada ,&I%-.
1. SINGLE LINKED LIST
1ingle linked listmempunyai satu pointer untuk setiap node yang menun)uk ke
node berikutnya. &ode untuk 1ingle linked list dapat kita gambarkan seperti 2
DATA NEXT
! POINTE"
Praktikum Struktur Data
Sofa Sofiana, S.Kom.
Pusat Bahan Ajar dan Elearning
Universitas Mercu Buana
12
2
&I%
&I%
3ulis dalam struktur record yang rekursif untuk mendefiniskan single lingked list
dengan # seperti :
struct list
{ char nama[20] /*data*/
struct list *next / * pointer*/
42
5ang dimaksud dengan rekursi6 adalah 6ariabel yang dipergunakan adalah
6ariablenya sendiri. 'ada contoh record list, kita menentukan record selan)utnya
dengan mendeklarasi sebuah pointer 6ariabel 7ne8t yang menun)uk ke record itu
sendiri. *ecord struct list contoh diatas mempunyai 0 6ariable, yaitu :
char nama 90:; dan struct list 7ne8t
char nama 90:; adalah deklarasi sebuah 6ariable untuk menentukan bah(a data
yang akan diolah adalah datatype character dan mempunyai pan)ang 0:
character. 1truct list 7 ne8t adalah deklarasi sebuah 6ariable yang berbentuk
record , struct - yang fungsinya sebagai pointer yang menun)uk ke record
berikutnya. <husus dalam hal ini record yang ditun)uk oleh pointer 7ne8t adalah
recordnya sendiri. 3idak tertutup kemungkinan untuk mendeklarasi suatu node
yang mempunyai sebuah struktur record yang telah didefinisikan sebelumnya,
seperti :
struct id
{ char nama [20]
char jalan [20]
char Kota [20]
int Kodepost
};
struct list
{ struct id mahasiswa
struct list *list
};
<eterangan :
Praktikum Struktur Data
Sofa Sofiana, S.Kom.
Pusat Bahan Ajar dan Elearning
Universitas Mercu Buana
12
3
=ariable nama, )alan dan kota di struct id di deklarasikan dengan array dari type
character, yang pan)ang characternya dapat disimpan dalam memory sudah
ditentukan secara e8plisit, yaitu maksimal sepan)ang 0: character. Jika character
yang ditulis melebihi pan)ang maksimum, maka sisanya akan diabaikan. >erbeda
dengan 6ariable kodepost yang di deklarasikan dengan type integer. Disini
ditentukan pan)ang maksimum secara e8plisit, seperti yang kita lakukan pada
6ariable nama, )alan, dan kota. <arena sistem type integer sudah mempunyai
batas nilainya, kita tidak perlu menentukan pan)ang maksimumnya lagi.
1.1. O#e$%si d%s%$ #%d% sin&'e 'is(
/. #reate ? penciptaan struktur data list: untuk menciptakan linked list yang
baru dan kosong. #reate ? penciptaan struktur data list: untuk menciptakan
linked list yang baru dan kosong.
#include <stdioh!
#include<malloch!
t"pede# int tipedata;
struct node{
tipedata data;
node *next;
};
node *head$ *current;
%oid create&'
{
head ( null;
current ( null;
}
0. 3ra6ersal ? penelusuran list: untuk melakukan penelusuran terhadap list yang
ada. Dimulai dari head sampai dengan ne8t @ null.
current ( head;
while &current)!next *( null'{
current ( current )!next;}
Praktikum Struktur Data
Sofa Sofiana, S.Kom.
Pusat Bahan Ajar dan Elearning
Universitas Mercu Buana
12
4
A. Insert ? penyisipan elemen kedalam list: untuk menambahkan satu elemen
data kedalam list. 'enyisipan ini dapat dilakukan didepan list, dibelakang list
atau sesuai dengan keinginan.
'enyisipan dibagian depan list
%oid sisipdepan &tipedata n'
{
node *p;
p ( &node*' malloc &si+eo#&struct node'';
p)!data ( n;
p)!next ( head;
head ( p;
}
'enyisipan dibagian belakang list. 'enyisipan dibelakang list harus
dilakukan setelah terlebih dahulu memposisikan pointer current pada
posisi belakang list. 1etelah itu baru dilakukan penyisipan setelah
current.
%oid sisip,ela-an. &tipedata n'
{
node *p;
p ( &node*' malloc &si+eo#&struct node'';
p)!data ( n;
current ( head;
while &current)!next *( null'{
current ( current)!next;}
current)!next ( p;
p)!next ( null;
}
Praktikum Struktur Data
Sofa Sofiana, S.Kom.
Pusat Bahan Ajar dan Elearning
Universitas Mercu Buana
12
5
'enyisipan dibagian yang dikehendaki. Bal ini baru dapat dilakukan
apabila kita sudah mengetahui diposisi mana node?elemen baru
tersebut akan disisipkan. "isalkan terdapat sebuah list terurut
ascending sebagai berikut:
<emudian dari list tersebut akan di sisipkan node baru dengan isi nya CD.
&ode baru ini akan disisipkan ditengan C: dan D:, berarti kita akan
menggunakan sebuah pointer yang harus berhenti tepat dibelakang D:.
n ( /0;
node *p;
p ( &node*' malloc &si+eo#&struct node'';
p ( head;
p)!data ( n;
current ( head;
while &current)!nextdata < pdata'{
current ( current)!next;}
p ( current)!next;
currentnext ( p;
C. Delete ? penghapusan elemen dari list
D. $ungsi empty ? pengecekan apakah list kosong atau tidak
E. $ungsi full ? pengecekan apakah list penuh atau tidak
F. Gpdate ? mengganti elemen yang ada di list
H. $indIfirst ? mencari elemen pertama
J. $indIne8t ? mencari elemen sesudah elemen yang telah ditentukan
/:. $indIK ? "encari lemen K Dalam %ist
Implementasi Queue dengan Double Linked List
Selain menggunakan array, queue juga dapat dibuat dengan linked list. Metode
linked list yang digunakan adalah double linked list.
Praktikum Struktur Data
Sofa Sofiana, S.Kom.
Pusat Bahan Ajar dan Elearning
Universitas Mercu Buana
12
6
20 0 !0 "0
). Operasi-operasi Queue dengan Double Linked List
IsEmpty
#ungsi $s%mpty berguna untuk mengecek apakah queue masih kosong atau sudah
berisi data. &al ini dilakukan dengan mengecek apakah head masih menunjukkan
pada 'ull atau tidak. (ika benar berarti queue masih kosong.
IsFull
#ungsi $s#ull berguna untuk mengecek apakah queue sudah penuh atau masih bias
menampung data dengan cara mengecek apakah (umlah )ueue sudah sama dengan
M*+,)U%U% atau belum. (ika benar maka queue sudah penuh.
EnQueue
#ungsi %n)ueue berguna untuk memasukkan sebuah elemen ke dalam queue -head
dan tail mula.mula meunjukkan ke 'U//0.
Praktikum Struktur Data
Sofa Sofiana, S.Kom.
Pusat Bahan Ajar dan Elearning
Universitas Mercu Buana
12
7
DeQueue
1rocedure 2e)ueue berguna untuk mengambil sebuah elemen dari queue. &al ini dilakukan
dengan cara menghapus satu simpul yang terletak paling depan -head0.
Contoh Program Queue dengan menggunakan Linked List :
3utput 4
*$*&1I
/. Daniel $ 1tubbs L &eil W. Webre ,/JHD-. Data Structures with Abstract Data
Type and Pascal. >rook? #ole 'ublishing #ompany
0. Aaron ". 3anenbaum, 5edidyah %angsam, "oshe J Augenstein ,/JJ:-, Data
Structures Using C, 'rentice Ball.
A. Berbert 1childt ,/JJ:-, Using Turbo C++, "cMra(Bill.
C. >ambang, Wira(an ,0::C-, Struktur Data dengan C, 'ernerbit Andi
Jogyakarta.

Anda mungkin juga menyukai