Anda di halaman 1dari 9

STACK DAN QUEUE DGN LINKED LIST

I. STACK DAN QUEUE DENGAN LINKED LIST


Pengertian Linked list :
sekumpulan elemen bertipe sama, yang mempunyai keterurutan tertentu, yang setiap elemennya
terdiri dari dua bagian
struktur berupa rangkaian elemen saling berkait dimana setiap elemen dihubungkan elemen lain
melalui pointer. Pointer adalah alamat elemen. Penggunaan pointer untuk mengacu elemen
berakibat elemen-elemen bersebelahan secara logik walau tidak bersebelahan secara fisik di
memori.
Bentuk Umum :
Infotype sebuah tipe terdefinisi yang menyimpan informasi sebuah elemen list
Next address dari elemen berikutnya (suksesor)
ika ! adalah list, dan P adalah address, maka alamat elemen pertama list ! dapat diacu dengan notasi "
#ebelum digunakan harus dideklarasikan terlebih dahulu "
$lemen yang diacu oleh P dapat dikonsultasi informasinya dengan notasi "
Beera!a De"inisi :
%. !ist l adalah list kosong, &ika 'irst(!) ( Nil
). $lemen terakhir dikenali, dengan salah satu cara adalah karena
Next(!ast) ( Nil
Nil adalah pengganti Null, perubahan ini dituliskan dengan *define Nil Null
Single Linked List
Pada gambar di atas tampak bahwa sebuah data terletak pada sebuah lokasi memori area.
+empat yang disediakan pada satu area memori tertentu untuk menyimpan data dikenal dengan sebutan
node atau simpul. #etiap node memiliki pointer yang menun&uk ke simpul berikutnya sehingga terbentuk
satu untaian, dengan demikian hanya diperlukan sebuah ,ariabel pointer. #usunan berupa untaian
semacam ini disebut #ingle !inked !ist (N-!! memilik nilai khusus yang artinya tidak menun&uk ke mana-
mana. .iasanya !inked !ist pada titik akhirnya akan menun&uk ke N-!!).
Pembuatan #ingle !inked !ist dapat menggunakan ) metode"
!I'/ (!ast In 'irst /ut), aplikasinya " #tack (+umpukan)
'I'/ ('irst In 'irst /ut), aplikasinya " 0ueue (1ntrean)
Double Linked List
#alah satu kelemahan single linked list adalah pointer (penun&uk) hanya dapat bergerak satu
arah sa&a, ma&u2mundur, atau kanan2kiri sehingga pencarian data pada single linked list hanya dapat
bergerak dalam satu arah sa&a. -ntuk mengatasi kelemahan tersebut, dapat menggunakan metode
double linked list. !inked list ini dikenal dengan nama !inked list berpointer 3anda atau 4ouble !inked
!ist.
Circular Double Linked List
Harjanto Sutedjo Page 1
STACK DAN QUEUE DGN LINKED LIST
5erupakan double linked list yang simpul terakhirnya menun&uk ke simpul terakhirnya menun&uk
ke simpul awalnya menun&uk ke simpul akhir sehingga membentuk suatu lingkaran.
#!erasi$#!erasi %ang ada !ada Linked List
Insert
Istilah Insert berarti menambahkan sebuah simpul baru ke dalam suatu linked list.
IsEm!t%
'ungsi ini menentukan apakah linked list kosong atau tidak.
&ind &irst
'ungsi ini mencari elemen pertama dari linked list
&ind Ne't
'ungsi ini mencari elemen sesudah elemen yang ditun&uk now
(etrie)e
'ungsi ini mengambil elemen yang ditun&uk oleh now. $lemen tersebut lalu dikembalikan oleh
fungsi.
U!date
'ungsi ini mengubah elemen yang ditun&uk oleh now dengan isi dari sesuatu
Delete N*+
'ungsi ini menghapus elemen yang ditun&uk oleh now. ika yang dihapus adalah elemen pertama
dari linked list (head), head akan berpindah ke elemen berikut.
Delete ,ead
'ungsi ini menghapus elemen yang ditun&uk head. 6ead berpindah ke elemen sesudahnya.
Clear
'ungsi ini menghapus linked list yang sudah ada. 'ungsi ini wa&ib dilakukan bila anda ingin
mengakhiri program yang menggunakan linked list. ika anda melakukannya, data-data yang
dialokasikan ke memori pada program sebelumnya akan tetap tertinggal di dalam memori.
A. STACK DENGAN SINGLE LINKED LIST
#elain implementasi stack dengan array seperti telah di&elaskan sebelumnya, stack daat
diimplementasikan dengan single linked list. 7eunggulannya dibandingkan array adalah penggunaan
alokasi memori yang dinamis sehingga menghindari pemborosan memori.
5isalnya pada stack dengan array disediakan tempat untuk stack berisi %89 elemen, sementara
ketika dipakai oleh user stack hanya diisi 89 elemen, maka telah ter&adi pemborosan memori untuk sisa
%99 elemen, yang tak terpakai. 4engan penggunaan linked list maka tempat yang disediakan akan
sesuai dengan banyaknya elemen yang mengisi stack.
4alam stack dengan linked list tidak ada istilah "ull, sebab biasanya program tidak menentukan
&umlah elemen stack yang mungkin ada (kecuali &ika sudah dibatasi oleh pembuatnya). Namun demikian
sebenarnya stack ini pun memiliki batas kapasitas, yakni dibatasi oleh &umlah memori yang tersedia.
#!erasi$*!erasi untuk Sta-k dengan Linked List
IsEm!ty
'ungsi memeriksa apakah stack yang adamasih kosong.
Pus.
'ungsi memasukkan elemen baru ke dalam stack. Push di sini mirip dengan insert dalam single
linked list biasa.
P*!
'ungsi ini mengeluarkan elemen teratas dari stack.
Clear
'ungsi ini akan menghapus stack yang ada.
Harjanto Sutedjo Page 2
STACK DAN QUEUE DGN LINKED LIST
B. QUEUE DENGAN D#UBLE LINKED LIST
#elain menggunakan array, :ueue &uga dapat dibuat dengan linked list. 5etode linked list yang
digunakan adalah double linked list.
#!erasi$*!erasi Queue dengan D*ule Linked List
IsEm!t%
'ungsi Is$mpty berguna untuk mengecek apakah :ueue masih kosong atau sudah berisi data.
6al ini dilakukan dengan mengecek apakah head masih menun&ukkan pada Null atau tidak. ika
benar berarti :ueue masih kosong.
Is&ull
'ungsi Is'ull berguna untuk mengecek apakah :ueue sudah penuh atau masih bisa menampung
data dengan cara mengecek apakah umlah 0ueue sudah sama dengan 51;<0-$-$ atau
belum. ika benar maka :ueue sudah penuh.
EnQueue
'ungsi $n0ueue berguna untuk memasukkan sebuah elemen ke dalam :ueue (head dan tail
mula-mula meun&ukkan ke N-!!).
DeQueue
Procedure 4e0ueue berguna untuk mengambil sebuah elemen dari :ueue. 6al ini dilakukan
dengan cara menghapus satu simpul yang terletak paling depan (head).
II. STACK DAN QUEUE DENGAN A((A/
0. STACK DENGAN 1ENGGUNAKAN A((A/
Pengertian Sta-k
#tack atau tumpukan adalah suatu stuktur data yang penting dalam pemrograman
.ersifat !I'/ (Last In First Out)
.enda yang terakhir masuk ke dalam stack akan men&adi benda pertama yang dikeluarkan dari
stack
=ontohnya, karena kita menumpuk =ompo di posisi terakhir, maka =ompo akan men&adi elemen
teratas dalam tumpukan. #ebaliknya, karena kita menumpuk +ele,isi pada saat pertama kali,
Harjanto Sutedjo Page 3
STACK DAN QUEUE DGN LINKED LIST
maka elemen +ele,isi men&adi elemen terbawah dari tumpukan. 4an &ika kita mengambil elemen
dari tumpukan, maka secara otomatis akan terambil elemen teratas, yaitu =ompo &uga.
#!erasi$*!erasi2"ungsi Sta-k
Pus. : digunakan untuk menambah item pada stack pada tumpukan paling atas
P*! : digunakan untuk mengambil item pada stack pada tumpukan paling atas
Clear : digunakan untuk mengosongkan stack
IsEm!t% : fungsi yang digunakan untuk mengecek apakah stack sudah kosong
Is&ull : fungsi yang digunakan untuk mengecek apakah stack sudah penuh
Sta-k +it. Arra% *" Stru-t
4efinisikan #tack dengan menggunakan struct
4efinisikan 51;<#+1=7 untuk maksimum isi stack
.uatlah ,ariabel array data sebagai implementasi stack secara nyata
4eklarasikan operasi-operasi2function di atas dan buat implemetasinya
Deklarasi 1A34STACK
*define 51;<#+1=7 %9 22hati-hati mulai dari 9 &adi 9->
Deklarasi STACK dengan stru-t dan arra% data
typedef struct #+1=7?
int top@
char dataA%9BA%9B@ 22misalkan " data adalah array of string
22ber&umlah %9 data, masing-masing string
22menampung maksimal %9 karakter
C@
Deklarasi2uat )ariael dari stru-t
#+1=7 tumpuk@
Inisialisasi Sta-k
Pada mulanya isi top dengan -%, karena array dalam = dimulai dari 9, yang berarti stack adalah
7/#/N3D
+op adalah suatu ,ariabel penanda dalam #+1=7 yang menun&ukkan elemen teratas #tack
sekarang. +op /f #tack akan selalu bergerak hingga mencapai 51; of #+1=7 sehingga
menyebabkan stack P$N-6D
Ilustrasi stack pada saat inisialisasi"
&ungsi Is&ull
-ntuk memeriksa apakah stack sudah penuhE
Harjanto Sutedjo Page 4
STACK DAN QUEUE DGN LINKED LIST
4engan cara memeriksa top of stack, &ika sudah sama dengan
51;<#+1=7-% maka full, &ika belum (masih lebih kecil dari 51;<#+1=7-%) maka belum full
Ilustrasi"
&ungsi IsEm!t%
-ntuk memeriksa apakah stack masih kosongE
4engan cara memeriksa top of stack, &ika masih -% maka berarti stack masih kosongD
Program"
&ungsi Pus.
-ntuk memasukkan elemen ke stack, selalu men&adi elemen teratas stack
+ambah satu (increment) nilai top of stack terlebih dahulu setiap kali ada penambahan elemen
stack, asalkan stack masih belum penuh, kemudian isikan nilai baru ke stack berdasarkan indeks
top of stack setelah ditambah satu (diincrement)
Ilustrasinya"
&ungsi P*!
-ntuk mengambil elemen teratas dari stack.
1mbil dahulu nilai elemen teratas stack dengan mengakses top of stack, tampilkan nilai yang
akan diambil terlebih dahulu, baru didecrement nilai top of stack sehingga &umlah elemen stack
berkurang
Ilustrasinya"
Programnya"
&ungsi Print
-ntuk menampilkan semua elemen-elemen stack
4engan cara looping semua nilai array secara terbalik, karena kita harusmengakses dari indeks
array tertinggi terlebih dahulu baru ke indeks yang kecilD
Program"
5. QUEUE DENGAN 1ENGGUNAKAN A((A/
0ueue ( 1ntrian
$lemen yang pertama kali masuk ke antrian akan keluar pertama kalinya
4$0-$-$ adalah mengeluarkan satu elemen dari suatu 1ntrian
1ntrian dapat dibuat dengan menggunakan" !iniear 1rray dan =ircular
1rray
QUEUE DENGAN LINIEA( A((A/
+erdapat satu buah pintu masuk di suatu u&ung dan satu buah pintu keluar
di u&ung satunya
#ehingga membutuhkan ,ariabel 6ead dan +ail
Harjanto Sutedjo Page 5
STACK DAN QUEUE DGN LINKED LIST
DEKLA(ASI QUEUE
#PE(ASI$#PE(ASI PADA QUEUE
- Create67
o -ntuk menciptakan dan menginisialisasi 0ueue
o 4engan cara membuat 6ead dan +ail ( -%
- IsEm!t%67
o -ntuk memeriksa apakah 1ntrian sudah penuh atau belum
o 4engan cara memeriksa nilai +ail, &ika +ail ( -% maka empty
o 7ita tidak memeriksa 6ead, karena 6ead adalah tanda untuk kepala
antrian (elemen pertama dalam antrian) yang tidak akan berubahubah
o Pergerakan pada 1ntrian ter&adi dengan penambahan elemen
1ntrian kebelakang, yaitu menggunakan nilai +ail
- Is&ull67
o -ntuk mengecek apakah 1ntrian sudah penuh atau belum
o 4engan cara mengecek nilai +ail, &ika +ail F( 51;-% (karena 51;-%
adalah batas elemen array pada =) berarti sudah penuh
- En8ueue6data7
o -ntuk menambahkan elemen ke dalam 1ntrian, penambahan
elemen selalu ditambahkan di elemen paling belakang
o Penambahan elemen selalu menggerakan ,ariabel +ail dengan cara
increment counter +ail
- De8ueue67
o 4igunakan untuk menghapus elemen terdepan2pertama dari 1ntrian
o 4engan cara mengurangi counter +ail dan menggeser semua
elemen antrian kedepan.
o Penggeseran dilakukan dengan menggunakan looping
- Clear67
o -ntuk menghapus elemen-elemen 1ntrian dengan cara membuat
+ail dan 6ead ( -%
o Penghapusan elemen-elemen 1ntrian sebenarnya tidak menghapus
arraynya, namun hanya mengeset indeks pengaksesan-nya ke nilai
-% sehingga elemen-elemen 1ntrian tidak lagi terbaca
- Tam!il67
o -ntuk menampilkan nilai-nilai elemen 1ntrian
o 5enggunakan looping dari head s2d tail
PE1BA,ASAN
Harjanto Sutedjo Page 6
STACK DAN QUEUE DGN LINKED LIST
Perandingan Antara
Sta-k$Queue Dengan Linked List 9s Sta-k$Queue Dengan Arra%
0. Sta-k Dengan Linked List 9S Sta-k Dengan Arra%
.erikut ini adalah perbandingan algoritma pada operasi-operasi dasar dari #tack 4engan !inked !ist
dan #tack 4engan 1rray, dengan menggunakan bahasa pemrograman Pascal
Sta-k Dengan Linked List Sta-k Dengan Arra%
*!erasi : -reate67
procedure create@
begin
top "( nil @
end@
procedure create@
begin
top "( 9@
end@
*!erasi : em!t%67
function empty " boolean@
begin
empty "( false @
if top ( nil then empty "( true @
end@
function empty " boolean@
begin
empty "( false @
if top ( 9 then empty "( true @
end@
*!erasi : "ull67
tidak ada istilah full pada stack.
program tidak menentukan &umlah elemen
stack yang mungkin ada. kecuali dibatasi
oleh pembuat program dan &umlah
memory yang tersedia. tempat akan
sesuai dengan banyaknya elemen yang
mengisi stack.
function full " boolean@
begin
full "( false @
if top ( max then full "( true @
end@
*!erasi : !us.67
procedure push (elemen " typedata) @
,ar now"point @
begin
now(now) @
nowG.isi "( elemen @
if empty then
nowG.next "( nil @
else
nowG.next "( top @
top "( now @
end@
procedure push (elemen " typedata) @
begin
if not full then
begin
top "( top H % @
stack AtopB "( elemen @
end@
end@
*!erasi : !*!67
procedure pop (,ar elemen " typedata) @ procedure pop (elemen " typedata) @
Harjanto Sutedjo Page 7
STACK DAN QUEUE DGN LINKED LIST
,ar now"point @
begin
if not empty then
begin
elemen "( nowG.isi @
now "( top @
top "( topG.next @
dispose(now) @
end@
end@
begin
if not empty then
begin
elemen "( stack AtopB @
top "( top I % @
end@
end@
*!erasi : -lear
procedure clear @
,ar trash " typedata @
begin
while not empty do pop(trash) @
end@
procedure clear @
begin
top "( 9 @
end@
PE1BA,ASAN
4ari perbandingan diatas, dapat dilihat pada linked list tidak dikenal istilah full. 6al ini berkaitan
dengan penggunaan alokasi memori pada linked list yang lebih dinamis &ika dibandingkan dengan array,
sehingga pemborosan memory dapat dihindari. Program tidak menentukan &umlah elemen stack yang
mungkin ada. 7ecuali dibatasi oleh pembuat program dan &umlah memory yang tersedia. +empat akan
sesuai dengan banyaknya elemen yang mengisi stack.
5. Queue Dengan Linked List 9S Queue Dengan Arra%
Implementasi :ueue menggunakan array
Implementasi sederhana
-kuran memori harus ditentukan ketika sebuah ob&ek :ueue dideklarasikan
Pemborosan tempat (memori) ketika menggunakan &umlah data yang lebih sedikit dari alokasi
memori
+idak dapat menambahkan data melebihi maksimal ukuran array yang telah dideklarasikan
Implementasi :ueue menggunakan linked list
Pengalokasian memori dinamis
5enggunaka ) buah pionter, qFront dan qRear, untuk menandai posisi depan dan belakang dari
:ueue
Perbandingan implementasi :ueue, array J# linked list (contoh %)
5emory re:uirements
o 1rray-based implementation
4iasumsikan ukuran :ueue %99 (string KL9bytes)
4iasumsikan index membutuhkan ) bytes
+otal memory" (L9 bytes x %9% slots) H () bytes x ) indexes) ( L9LM bytes
o !inked-list-based implementation
Harjanto Sutedjo Page 8
STACK DAN QUEUE DGN LINKED LIST
4iasumsikan pointers membutuhkan M bytes
+otal memory per node" L9 bytes H M bytes ( LM bytes
3ambar "
Perbandingan implementasi :ueue, array J# linked list (contoh ))
5emory re:uirements
o 1rray-based implementation
4iasumsikan ukuran :ueue %99 (string K)bytes)
4iasumsikan index membutuhkan ) bytes
+otal memory" () bytes x %9% slots) H () bytes x ) indexes) ( )9N bytes
o !inked-list-based implementation
4iasumsikan pointers membutuhkan M bytes
+otal memory per node" ) bytes H M bytes ( N bytes
3ambar "
KESI1PULAN
Perbandingan 1ntara #tack-0ueue 4engan !inked !ist Js #tack-0ueue 4engan 1rray
-ntuk stack dan :ueue yang berukuran besar, terutama &umlah maksimal data tidak diketahui,
lebih baik menggunakan linked list.
-ntuk perangkat yang memiliki memori terbatas, seperti small handheld de,ices, linked list
memiliki performa yang lebih bagus.
Harjanto Sutedjo Page 9

Anda mungkin juga menyukai