Anda di halaman 1dari 19

PRAKTIKUM 4

Linked List, Queue dan Stack

A. TUJUAN
Setelah melakukan praktikum bab ini, mahasiswa diharapakan mampu :
1. Mahasiswa mampu mengidentifikasi dan mengimplementasikan konsep Linked
List, Queue dan Stack.
2. Mahasiswa mampu mengimplementasikan konsep Linked List, Queue dan Stack
pada program komputer sederhana.
3. Mahasiswa mampu membangun program komputer untuk memecahkan suatu
masalah menggunakan konsep Linked List, Queue dan Stack.

B. DASAR TEORI
B.1 LINKED LIST
DEFINISI LINKED LIST
List merupakan suatu struktur data popular untuk menyimpan data dengan urutan
sekuensial, saling sambung-menyambung, dinamis, dan terbatas. Ada dua cara untuk
mengimplementasikan suatu list, yaitu: array dan linked list (Senarai Berantai).
Perbedaan Array dan linked list dapat dilihat sebagai berikut:
Tabel 4.1 Perbedaan Array List dan Linked List

Array Linked List


Statis Dinamis
Penambahan/Penghapusan terbatas Penambahan/Penghapusan tidak terbatas
Random acces Sequential acces
Penghapusan array tidak mungkin Penghapusan linked list mudah

Pada bab ini akan dibahas list yang berupa linked list. Dalam linked list, setiap elemen
dimuat dalam suatu struktur, yang disebut dengan simpul (node). Setiap simpul
dihubungkan ke simpul tetangganya. Artinya, linked list merupakan node-node yang
saling terhubung satu sama lain. Beberapa karakteristik linked list:
o Variabel kepala merujuk pada simpul pertama, sebaliknya variabel akhir dirujuk
pada simpul terakhir.
o Jika list kosong, maka kepala dan ekor bernilai null
Operasi-operasi yang biasa diterapkan pada list adalah:
o Menyisipkan elemen baru ke dalam list
o Menghapus elemen dari dalam list
o Mencari jumlah elemen dalam list
o Menemukan elemen dalam list
Linked list memiliki tempat untuk menyimpan pointer (di kepala) dan value (di ekor).
Ilustrasi sebuah node pada linked list adalah seperti pada Gambar 4.1.

Gambar 4.1 Ilustrasi Node

SINGLE LINKED LIST


Single artinya field pointer-nya hanya satu buah saja dan satu arah serta pada akhir
node pointer menunjuk NULL. Setiap node pada linked list mempunyai field yang berisi
pointer ke node berikutnya, dan juga memiliki field yang berisi data. Node terakhir akan
menunjuk ke NULL yang akan digunakan sebagai kondisi berhenti pada saat pembacaan
isi linked list. Gambaran Single Linked List (SLL) dapat dilihat pada Gambar 4.2 berikut
ini.

Gambar 4.2 Ilustrasi Struktur Single Linked List

Untuk menciptakan sebuah SLL, berikut ini langkah-langkah yang harus dilakukan:
Langkah 1. Mendeklarasikan kepala dan ekor
Langkah 2. Menciptakan simpul pertama dan menyambungnya ke dalam list. Pointer
simpul pertama ini mengarah pada null.
Langkah 3. Menciptakan simpul kedua dan menyambungnya ke dalam list. Pointer
simpul kedua ini mengarah pada pointer simpul pertama.
Operasi yang bisa dilakukan pada Single Linked List adalah sebagai berikut:
o Create: menciptakan sebuah linked list
POLITEKNIK KEDIRI 2
o Insert: menambahkan node pada linked list di depan, tengah, dan belakang
o Remove: menghapus node pada linked list di depan, tengah, dan belakang
o IsEmpty: mengecek pada linked list apakah terdapat node atau tidak
o GetSize: mengecek pada ukuran linked list atau banyaknya node di dalam linked list

Contoh ilustrasi beberapa operasi pada Single Linked List dapat dilihat pada contoh
berikut ini:
Contoh #1 : Membuat node baru

NUL
L

Contoh #2 : Menambahkan elemen baru pada posisi terakhir

NUL
L

NUL
L

NUL
L

Contoh #3 : Menambahkan elemen baru pada posisi pertama

NUL
L

NUL
L

NUL
L

POLITEKNIK KEDIRI 3
Contoh #4 : Menghapus elemen pada posisi terakhir

NUL
L

NUL
L

NUL
L

SINGLE LINKED LIST CIRCULAR


Single Linked List Circular (SLLC) adalah Single Linked List yang pointer nextnya
menunjuk pada dirinya sendiri. Jika Single Linked List tersebut terdiri dari beberapa
node, maka pointer next pada node terakhir akan menunjuk ke node terdepannya.
Artinya tidak ada pointer yang merujuk pada null. Gambaran struktur Single Linked List
Circular dapat dilihat pada Gambar 4.3 berikut ini.

Gambar 4. 3 Ilustrasi Struktur Single Linked List Circular

Setiap node pada SLLC mempunyai field yang berisi pointer ke node berikutnya,
dan juga memiliki field yang berisi data. Pada akhir linked list, node terakhir akan
menunjuk ke node terdepan sehingga linked list tersebut berputar.

DOUBLE LINKED LIST


Double Linked List (DLL) adalah Linked List yang memiliki 2 buah pointer yaitu
pointer next dan prev. Pointer next menunjuk pada node setelahnya dan pointer prev
menunjuk pada node sebelumnya. Pada DLL, pointer prev dan next dari node ujung akan
menunjuk pada NULL. Gambaran struktur DLL dapat dilihat pada Gambar 4.4 berikut ini.

POLITEKNIK KEDIRI 4
Gambar 4.4 Ilustrasi Struktur Double Linked List

Setiap node pada DLL mempunyai 3 field, masing-masing field yang berisi data,
pointer ke node berikutnya, & pointer ke node sebelumnya. Untuk pembentukan node
baru, mulanya pointer next dan prev akan menunjuk ke nilai NULL. Selanjutnya pointer
prev akan menunjuk ke node sebelumnya, dan pointer next akan menunjuk ke node
selanjutnya pada list.

DOUBLE LINKED LIST CIRCULAR


Double Linked List Circular (DLLC) adalah linked list yang memiliki 2 buah pointer
yaitu pointer next dan prev. Pointer next menunjuk pada node setelahnya dan pointer
prev menunjuk pada node sebelumnya. Jika Double Linked List tersebut terdiri dari
beberapa node, maka pointer next pada node terakhir akan menunjuk ke node
terdepannya. Gambaran struktur Double Linked List Circular dapat dilihat pada Gambar
4.5.

Gambar 4. 5 Ilustrasi Struktur Double Linked List Circular

Setiap node pada DLLC mempunyai 3 field, yaitu field yang berisi data, field yang
berisi pointer ke node berikutnya, & field yang berisi pointer ke node sebelumnya. Pada
akhir linked list, node terakhir akan menunjuk ke node terdepan sehingga linked list
tersebut berputar.

ALGORITMA OPERASI UMUM PADA LINKEDLIST


Berikut ini adalah pseudocode operasi umum pada linked list:
Operasi 1. Create
Pseudocode 4.1
create(){
head = null
tail = null
size = 0
}

POLITEKNIK KEDIRI 5
Operasi 2. IsEmpty
Pseudocode 4.2
isEmpty(){
return head == null
}

Operasi 3. Insert di depan


Pseudocode 4.3
insertAtStart(value){
if (head == null)
head = value
tail = head
else
value->link = head->link
head = value
}

Operasi 4. Insert di tengah


Pseudocode 4.4
insertAtMiddle(value, pos){
for i:0 to size
if (i == pos)
prev->link = value->link
value->link = next->link
break
prev->link = prev
}

Operasi 5. Insert di belakang


Pseudocode 4.5
insertAtEnd (value){
if (head == null)
head = value
tail = head
else
tail->link = value->link
tail = value
}

Operasi 6. Remove di depan


Pseudocode 4.6
RemoveAtStart(){
start=next
size--
}

POLITEKNIK KEDIRI 6
DEFINISI STACK
Secara sederhana stack diartikan sebagai sebagai tumpukan dari benda atau
sekumpulan data yang seolah-olah diletakkan di atas data yang lain. Stack adalah sebuah
Abstract Data Type (ADT). Menambahkan data/elemen pada sebuah stack berarti
menambah elemen di posisi paling atas. Operasi ini disebut dengan push. Menghapus
data/elemen dari sebuah stack berarti menghapus elemen di posisi paling atas. Operasi
ini disebut dengan pop. Stack bersifat LIFO (last-in first-out) artinya elemen yang terakhir
masuk akan dikeluarkan pertama kali. Operasi stack push dan pop hanya dapat bekerja
di posisi paling atas. Oleh karenanya stack tidak dapat ditambah atau dihapus di sebarang
posisi. Berikut ini contoh gambaran memasukan elemen ke dalam Stack secara berturut-
turut.

OPERASI PADA STACK


ADT stack dapat direpresentasikan dengan 2 cara, yaitu dengan menggunakan
alokasi memori statis berupa array 1D atau dengan menggunakan alokasi memori
dinamis, berupa Linked List. Untuk menciptakan sebuah stack, berikut ini langkah-
langkah yang harus dilakukan:

POLITEKNIK KEDIRI 7
Langkah 1. Mendefinisikan sebuah stack baru yang masih kosong.
Langkah 2. Isi (push) stack dengan node, definisikan sebagai top
Langkah 3. Isi lagi (push) stack dengan node dan definisikan sebagai top
Langkah 4. Jika ingin menghapus (pop) maka node yang terhapus adalah node yang
sebagai top
Operasi yang bisa dilakukan pada stack adalah sebagai berikut:
o Create: menciptakan sebuah stack kosong
▪ syarat awal : tidak ada
▪ input : stack
▪ output : stack kosong
▪ syarat akhir : stack dalam keadaan kosong
o Push: menambahkan elemen, info baru pada stack pada posisi paling atas
▪ syarat awal : stack tidak penuh
▪ input : stack dan Info baru
▪ output : stack yang bertambah satu elemen
o Pop: mengeluarkan elemen dari stack yang berada pada posisi paling atas
▪ syarat awal : stack tidak kosong
▪ input : stack
▪ output : stack yang berkurang satu elemen
o Peek
▪ syarat awal : stack tidak kosong
▪ input : stack
▪ output : elemen yang terletak di ekor
o IsFull: memeriksa apakah stack yang ada sudah penuh
▪ syarat awal : tidak ada
▪ input : stack
▪ output : boolean (true/false)
▪ syarat akhir : stack penuh bernilai true jika stack dalam keadaan penuh
o IsEmpty: mengecek pada stack apakah terdapat node atau tidak
▪ syarat awal : tidak ada
▪ input : stack
▪ output : boolean (true/false)
▪ syarat akhir : stack kosong bernilai true jika stack dalam keadaan kosong

POLITEKNIK KEDIRI 8
o GetSize: mengecek pada ukuran stack atau banyaknya node di dalam stack
▪ syarat awal : tidak ada
▪ input : stack
▪ output : banyaknya node di dalam stack

ALGORITMA OPERASI UMUM PADA STACK


Berikut ini adalah pseudocode operasi umum pada stack:
Operasi 1. Create
Pseudocode 4.7
create(N){
size = N
len = 0
stack = int[size]
top = -1
}

Operasi 2. IsEmpty
Pseudocode 4.8
isEmpty(){
return top == -1
}

Operasi 3. IsFull
Pseudocode 4.9
isFull(){
return top == size-1
}

Operasi 4. GetSize
Pseudocode 4.10
getSize(){
return len
}

Operasi 5. Peek
Pseudocode 4.11
peek(){
if (isEmpty()==false)
return stack[top]
}

POLITEKNIK KEDIRI 9
Operasi 6. Push
Pseudocode 4.12
push (value){
if(top+1 >= size)
//index out of bounds
If(top+1 <size)
stack[++top]=value
len++
}

Operasi 7. Pop
Pseudocode 4.13
pop (){
if(isEmpty()==false)
len --
return stack[top--]
}

POLITEKNIK KEDIRI 10
DEFINISI QUEUE
Secara sederhana queue diartikan sebagai sebagai antrian dari benda atau
sekumpulan data yang seolah-olah diletakkan berjajar dari data yang lain. Queue juga
merupakan sebuah ADT (abstract data type). Menambahkan elemen pada sebuah stack
berarti menambah elemen di posisi paling akhir. Operasi ini disebut dengan insert atau
enqueue. Menghapus elemen dari sebuah stack berarti menghapus elemen di posisi
paling awal. Operasi ini disebut dengan remove atau dequeue. Queue bersifat FIFO (First-
in first-out) artinya elemen yang pertama masuk akan dikeluarkan pertama kali. Operasi
queue insert hanya dapat bekerja di posisi paling akhir dan remove hanya dapat bekerja
di posisi paling awal. Sama seperti stack, queue tidak dapat ditambah atau dihapus di
sebarang posisiBerikut ini contoh gambaran memasukan elemen ke dalam Stack secara
berturut-turut.

Gambar 4.3 Ilustrasi Struktur Data Queue

OPERASI PADA QUEUE


ADT queue dapat direpresentasikan dengan 2 cara, yaitu dengan menggunakan
alokasi memori statis berupa array 1D atau dengan menggunakan alokasi memori
dinamis, berupa Linked List. Untuk menciptakan sebuah queue, berikut ini langkah-
langkah yang harus dilakukan:

POLITEKNIK KEDIRI 11
Langkah 1. Mendefinisikan sebuah queue baru yang masih kosong.
Langkah 2. Isi (enqueue) queue dengan node, definisikan sebagai kepala dan ekor
Langkah 3. Isi lagi (enqueue) queue dengan node dan definisikan sebagai ekor
Langkah 4. Jika ingin menghapus (dequeue) maka node yang terhapus adalah node
yang sebagai kepala
Operasi yang bisa dilakukan pada queue adalah sebagai berikut:
o Create: menciptakan sebuah queue kosong
▪ syarat awal : tidak ada
▪ input : queue
▪ output : queue kosong
▪ syarat akhir : queue dalam keadaan kosong
o Enqueue/insert: menambahkan elemen, info baru pada queue pada posisi paling
akhir
▪ syarat awal : queue tidak penuh
▪ input : queue dan Info baru
▪ output : queue yang bertambah satu elemen
o Dequeue/remove: mengeluarkan elemen dari queue yang berada pada posisi paling
awal
▪ syarat awal : queue tidak kosong
▪ input : queue
▪ output : queue yang berkurang satu elemen
o Peek
▪ syarat awal : queue tidak kosong
▪ input : queue
▪ output : elemen yang terletak di kepala
o IsFull: memeriksa apakah queue yang ada sudah penuh
▪ syarat awal : tidak ada
▪ input : queue
▪ output : boolean (true/false)
▪ syarat akhir : queue penuh bernilai true jika queue dalam keadaan penuh
o IsEmpty: mengecek pada queue apakah terdapat node atau tidak
▪ syarat awal : tidak ada
▪ input : queue

POLITEKNIK KEDIRI 12
▪ output : boolean (true/false)
▪ syarat akhir : queue kosong bernilai true jika queue dalam keadaan kosong
o GetSize: mengecek pada ukuran stack atau banyaknya node di dalam stack
▪ syarat awal : tidak ada
▪ input : stack
▪ output : banyaknya node di dalam stack

ALGORITMA OPERASI UMUM PADA QUEUE


Berikut ini adalah pseudocode operasi umum pada stack:
Operasi 1. Create
Pseudocode 4.14
create(N){
size = N
len = 0
queue = int[size]
front = -1
rear = -1
}

Operasi 2. IsEmpty
Pseudocode 4.15
isEmpty(){
return front == -1
}

Operasi 3. IsFull
Pseudocode 4.16
isFull(){
return (front == 0 && rear == size-1)
}

Operasi 4. GetSize
Pseudocode 4.17
getSize(){
return len
}

Operasi 5. Peek
Pseudocode 4.18
peek(){
if (isEmpty()==false)
return queue[front]
}

POLITEKNIK KEDIRI 13
Operasi 6. Enqueue
Pseudocode 4.19
enqueue (value){
if(rear == -1)
front = 0
rear = 0
queue[rear] = value;

if(rear+1 >= size)


//index out of bounds
if(rear+1 <size)
queue[++rear]=value
len++
}

Operasi 7. Dequeue
Pseudocode 4.20
dequeue(){
if(isEmpty()==false)
len --
if(front == rear)
front = -1
rear = -1
else
front++
}

C. TUGAS PENDAHULUAN
1. Apa yang kamu ketahui tentang Linked List, Queue dan Stack?
2. Jelaskan perbedaan mendasar antara Linked list, queue dan stack!

D. PERALATAN DAN KOMPONEN


1. Komputer /Laptop sebagai hardware
2. Netbeans sebagai editor source code
E. LANGKAH PRAKTIKUM
E.1 LINKED LIST
Java sebenarnya telah menyediakan kelas LinkedList() untuk memodelkan struktur data
linked list. Untuk mendeklarasikannya digunakan syntax sebagai berikut:
LinkedList namalist = new LinkedList();

Source Code 4.1 berikut ini adalah contoh kode yang menggunakan kelas linked list
bawaan dari java:

POLITEKNIK KEDIRI 14
Source Code 4.1
LinkedList list = new LinkedList();

list.add("Siantar"); //_menambah ke list


System.out.println("1. "+list);

list.add(0, "Klaten"); //_menambah ke list di awal


System.out.println("2. "+list);

list.add(2, "Batam"); //_menambah ke list di idx 2


System.out.println("3. "+list);

list.add("Balige"); //_menambah ke list di akhir


System.out.println("4. "+list);

list.addFirst("Kediri"); //_menambah ke list di awal


System.out.println("5. "+list);

list.addLast("Jogja"); //_menambah ke list di akhir


System.out.println("6. "+list);

list.remove(1); //hapus idx 2


System.out.println("7. "+list);

list.remove("Jogja"); //hapus list jogja


System.out.println("8. "+list);

list.remove(1); //hapus idx 2


System.out.println("9. "+list);

list.removeFirst(); //hapus node pertama


System.out.println("10. "+list);

list.removeLast(); //hapus node terakhir


System.out.println("11. "+list);

Untuk menginisialisasi kelas linked list, maka kelas LinkedList dideklarasikan dengan
nama list sebagai berikut:
LinkedList list = new LinkedList();
Untuk menambahkan elemen ke dalam list digunakan syntax add. Sebagai contoh kode:
list.add(“Siantar”)
bertugas menambahkan elemen Siantar ke dalam list. Jika list dicetak, maka Siantar yang
akan tampilkan. Untuk menambahkan elemen ke dalam list dengan indeks digunakan
pula syntax add dengan mencantumkan indeks yang akan disisipkan. Sebagai contoh
kode:
list.add(0,“Klaten”)
bertugas menambahkan elemen Klaten ke dalam list dengan indeks 0 (paling awal). Jika
list dicetak, maka yang akan tampilkan:
Klaten, Siantar

POLITEKNIK KEDIRI 15
Jika ingin mensisipkan elemen di indeks 2 maka dapat ditulis sebagai berikut:
list.add(2,“Batam”)

Jika list dicetak, maka yang akan tampilkan:


Klaten, Siantar, Batam
Untuk menambahkan elemen ke dalam list di awal atau di akhir maka digunakan syntax
addFirst atau addLast. Sebagai contoh:
list.addFirst(“Kediri”)
list.addLast(“Jogja”)
Untuk menghapus elemen dari dalam list digunakan syntax remove. Syntax remove dapat
menghapus elemen secara langsung atau berdasarkan indeks. Sebagai contoh:
list.remove(“Jogja”)
list.remove(1)
Menghapus elemen dari dalam list juga dapat dilakukan di awal atau di akhir list
menggunakan syntax removeFirst atau removeLast. Sebagai contoh:
list.removeFirst()
list.removeLast()
Selanjutnya jika sourcecode tersebut dieksekusi maka akan tampil seperti pada Gambar
4.6 berikut ini:

Gambar 4.6 Hasil Output Sourcecode 4.1

E.2 STACK
Java sebenarnya telah menyediakan kelas Stack() untuk membangun sebuah program
tumpukan. Untuk mendeklarasikannya digunakan syntax sebagai berikut:
Stack stack = new Stack();

POLITEKNIK KEDIRI 16
Untuk menggunakan kelas ini dibutuhkan header:

Source Code 4.2 berikut ini adalah contoh kode yang menggunakan kelas linked list
bawaan dari java:
Source Code 4.2

Stack stack = new Stack();


stack.push("Nasgor");
stack.push("Bakso");
System.out.println("1. " + stack);
stack.push("Capcay");
System.out.println("2. " + stack);

stack.pop();
System.out.println("3. " + stack);

stack.pop();
System.out.println("4. " + stack);

Dalam hal ini, untuk menambahkan elemen ke dalam stack digunakan syntax push,
contoh:
stack.push(“Nasgor”)
stack.push(“Bakso”)
stack.push(“Capcay”)
bertugas menambahkan elemen Nasgor dan Bakso ke dalam stack. Jika stack dicetak,
maka yang akan tampilkan:
Nasgor, Bakso, Capcay
Untuk menghapus elemen dari dalam stack digunakan syntax pop. Sebagai contoh:
stack.pop()
bertugas menghapus elemen yang terakhir ditambahkan ke dalam stack. Jika stack
dicetak, maka yang akan tampilkan:
Nasgor, Bakso

Selanjutnya jika sourcecode tersebut dieksekusi maka akan tampil seperti pada Gambar
4.7 berikut ini:

POLITEKNIK KEDIRI 17
Gambar 4.7 Hasil Output Sourcecode 4.2

E.3 QUEUE
Java sebenarnya telah menyediakan kelas Queue() untuk membangun sebuah program
antrian. Untuk mendeklarasikannya digunakan syntax sebagai berikut:
Queue queue = new LinkedList();
Untuk menggunakan kelas ini dibutuhkan header:

Source Code 4.3 berikut ini adalah contoh kode yang menggunakan kelas linked list
bawaan dari java:
Source Code 4.3

Queue queue = new LinkedList();

queue.add("Nasgor");
queue.add("Bakso");
System.out.println("1. " + queue);

queue.add("Capcay");
System.out.println("2. " + queue);

queue.remove();
System.out.println("3. " + queue);

Untuk menambahkan elemen ke dalam queue digunakan syntax add. Sebagai contoh
kode:
queue.add(“Nasgor”)
queue.add(“Bakso”)
queue.add(“Capcay”)
bertugas menambahkan elemen Nasgor dan Bakso ke dalam queue. Jika queue dicetak,
maka yang akan tampilkan:
Nasgor, Bakso, Capcay
Untuk menghapus elemen dari dalam queue digunakan syntax remove. Sebagai contoh:
queue.remove()

POLITEKNIK KEDIRI 18
bertugas menghapus elemen yang pertama kali ditambahkan ke dalam queue. Jika queue
dicetak, maka yang akan tampilkan:
Bakso, Capcay

Selanjutnya jika sourcecode tersebut dieksekusi maka akan tampil seperti pada Gambar
4.3 berikut ini:

Gambar 4.8 Hasil Output Sourcecode 4.3

F. TUGAS
1. Praktekkan keseluruhan uji coba pada langkah praktikum.
2. Cari sebuah kasus yang menggunakan konsep Linked List, Stack dan Queue
Kemudian Implementasikan contoh kasus tersebut dalam program java!
3.

G. PENUTUP
Pastikan hal-hal berikut sebelum Anda keluar dari laboratorium :
1. Meja dan kursi tertata kembali dalam keadaan rapi.
2. Komputer dan Monitor dalam keadaan mati.
3. Peralatan dan komponen dikembaikan ke tempat asalnya.
4. Laboratorium dalam keadaan bersih dan rapi.
5. Jangan meninggalkan barang pribadi di laboratorium

H. REFERENSI
Wibowo, Nur Cahyo., Ridwandono, Doddy., Modul Praktikum Struktur Data:
Surabaya,2016
Izzah, Abidatul., Kusuma, Selvia Ferdiana., Modul Praktikum Algoritma dan Struktu
Data: Kediri,2016

POLITEKNIK KEDIRI 19

Anda mungkin juga menyukai