Anda di halaman 1dari 10

Modul 7

Double Link List (DLL)


Praktikum Algoritma dan Struktur Data
Jurusan Matematika Fakultas Sains dan Teknologi
TA. 2020/2021
UIN Sunan Gunung Djati Instruktur/ Asisten:
Bandung

A. Tujuan
1. Mahasiswa memahami konsep penyimpanan data dengan Double Link List (DLL).
2. Mahasiswa dapat mengimplementasikan Double Link List (DLL) dengan bahasa
Java.

B. Pokok Bahasan
Double Link List (DLL).

C. Tugas Pendahuluan
1. Jelaskan kembali tentang ADT serta perbedaannya dengan tipe data dasar.
2. Jelaskan perbedaan array dan list.
3. Sebutkan dan jelaskan macam-macam list.
4. Misalkan dimiliki sebuah list A sebagai berikut:

Tuliskan algoritma dan ilustrasi untuk:


a. Menambahkan node baru = 6 sebelum head.
b. Menghapus node = 4.

5. Misalkan diberikan list B sebagai berikut:

Tuliskan algoritma dan ilustrasi untuk:


a. Menghapus node 2.
b. Menambahkan node baru = 6 setelah tail.
c. Menyisipkan node baru = 9 diantara node 7 dan node 3. (node 2 telah dihapus
sebelumnya).

D. Materi

Double Link List (DLL)


Double Link List (DLL) adalah link list yang memiliki dua link (penghubung), yaitu
link untuk elemen sebelumnya dan link untuk elemen setelahnya. Operasi dalam DLL
serupa dengan SLL, yaitu menelusuri (traversal), menambahkan elemen, menghapus,
memperbaharui (update), atau mengurutkan.
1|M o d u l 7 : D o u b l e L i n k L i s t ( D L L )
Gambar 1. Ilustrasi Double Link List (DLL).

E. Praktikum
1. Tuliskan ilustrasi dan algoritma untuk menambahkan node pada bagian depan dan
belakang pada DLL yang disajikan pada Gambar 1.
Ilustrasi tambahDepan

Ilustrasi tambahBelakang

2. Perhatikan java script berikut.


class Node2{
public long data;
public Node2 next;
public Node2 prev;
//---------------------------------
public Node2(long d){
data = d;
}
//--------------------------------
public void displayNode2(){
System.out.print(data+ " ");
}
} // Class Node2 akan berupa node seperti pada Gambar 1.
a. Apakah Node2 membentuk ADT? (Ya/ Tidak).
b. Jika Node2 membentuk ADT, tentukan:
Komponen:
Data/ tipe data : ___________________________________
Operasinya : ___________________________________
Interface : ___________________________________
2|M o d u l 7 : D o u b l e L i n k L i s t ( D L L )
3. Perhatikan class DoubleList berikut.
class DoubleList{
private Node2 head, tail; // inisialisasi node awal&akhir

//--------------------------------
// constructor
public DoubleList(){
head = tail = null; // isi DLL masih kosong
}
//--------------------------------
// Method-method
//--------------------------------
public void tambahDepan(long d){
Node2 nodeBaru = new Node2(d); //membuat node baru
if (head == null) //jika DLL kosong
tail = nodeBaru; //nodeBaru mejadi tail
else
head.prev = nodeBaru; //nodeBaru diisi pada prev
head
nodeBaru.next = head; //head berada setelah nodeBaru
head = nodeBaru; //nodeBaru menjadi head
}
//--------------------------------
public void tambahBelakang(long d){

}
//--------------------------------
public Node2 hapusDepan(){

}
3|M o d u l 7 : D o u b l e L i n k L i s t ( D L L )
//--------------------------------
public Node2 hapusBelakang(){
Node2 temp = tail;
if (head.next==null) //jika hanya ada satu node
head = null; // head jadi null
else
tail.prev.next = null;
//prev dari tail di-null-kan
tail = tail.prev;
//prev dari tail sebelumnya jadi tail
return temp;
}
//--------------------------------
public boolean tambahTengah(long key, long d){
Node2 nodeBaru = new Node2(d);
Node2 bantu = head;
while (bantu.data != key){
bantu = bantu.next;
if (bantu == null)
return false;
}
if (bantu == tail){
nodeBaru.next = null;
tail = nodeBaru;
}
else{
nodeBaru.next = bantu.next;
bantu.next.prev = nodeBaru;
}
nodeBaru.prev = bantu;
bantu.next = nodeBaru;
return true;
}
//--------------------------------
public Node2 hapusKey(long key){
Node2 bantu = head;
while (bantu.data != key){
bantu = bantu.next;
if (bantu == null)
return null;
}
if (bantu == head)
head = bantu.next;
else
baru.prev.next = bantu.next;
if (bantu == tail)
tail = bantu.prev;
else
bantu.next.prev = bantu.prev;

4|M o d u l 7 : D o u b l e L i n k L i s t ( D L L )
return bantu;
}
//--------------------------------
public void displayForward(){
System.out.print(" List (head ---> tail): ");
Node2 bantu = head;
while (bantu != null({
bantu.displayNode2();
bantu = bantu.next;
}
System.out.println(" " );
}
//--------------------------------
public void displayBackward(){
System.out.print(" List (tail ---> head): ");
Node2 bantu = tail;
while (bantu != null({
bantu.displayNode2();
bantu = bantu.prev;
}
System.out.println(" " );
}
//--------------------------------
}
a. Class tersebut adalah rancangan untuk membuat ADT DoubleList. Tentukan:
Komponen:
Data/ tipe data : ___________________________________
Operasinya : _________________________________________________
__________________________________________________
Interface :
__________________________________________________
__________________________________________________

b. Lengkapilah method yang belum memiliki kode.


c. Ilustrasikan dengan jelas beberapa alur method pada class DoubleList di atas.
(minimal 3 method).
Method: ________________________

5|M o d u l 7 : D o u b l e L i n k L i s t ( D L L )
Method: ________________________

Method: ________________________

Method: ________________________

Method: ________________________

6|M o d u l 7 : D o u b l e L i n k L i s t ( D L L )
4. Buatlah program utama untuk memanggil DoubleList di atas, kemudian tambahkan node
22, 44 dan 66 dari depan, dan tambahkan node 11, 33 dan 55 dari belakang.
//contoh
//Anda dapat membuatnya sesuai selera Anda.
import java.util.Scanner;
class DoubleListApp{
public static void main(String[] arg){
DoubleList list = new DoubleList();
Scanner scn = new Scanner(System.in);

list.tambahDepan(22);
list.tambahDepan(44);
list.tambahDepan(66);

list.tambahBelakang(11);
list.tambahBelakang(33);
list.tambahBelakang(55);

// ----------------------------------
Node2 hapusD;
hapusD = list.hapusDepan(); // hapusD = temp
if (hapusD != null){
System.out.print("Menghapus " +
hapusD.displayNode2());
System.out.println(" ");
}
list.displayForward();
// ----------------------------------
Node2 hapusB;
hapusB = list.hapusDepan();
if (hapusD != null){
System.out.print("Menghapus " +
hapusB.displayNode2());
System.out.println(" ");
}
list.displayForward();
// -----------------------------------
System.out.print("Data yang dihapus: ");
long y = scn.nextLong();
Node2 d = list.hapusKey(y);
System.out.println("Hapus node berisi data " +y);
if (d==null)
System.out.println("Tidak bisa menghapus node.");
list.displayForward();
//--------------------------------------------
System.out.println("Menambah data di tengah List ");
System.out.print("Data yang diinput: ");

7|M o d u l 7 : D o u b l e L i n k L i s t ( D L L )
long ins = scn.nextLong();
System.out.print("Data akan diletakkan setelah data :
");
long dataTengah = scn.nextLong();
list.tambahTengah(dataTengah, ins);
list.displayForward();
}
}
Jelaskan alur/ilustrasi yang dilakukan kelas DoubleListApp().

5. Tambahkan method untuk mengurutkan dan mencari sebuah elemen pada DoubleList di
atas.

8|M o d u l 7 : D o u b l e L i n k L i s t ( D L L )
F. Kesimpulan
Tuliskan kesimpulan yang Anda peroleh dari hasil praktikum pada modul ini.

G. Laporan
Laporan yang disusun harus menjawab pertanyaan berikut. Jika perlu, sertakan gambar
dan tabel. Jawablah pertanyaan berikut ini.
1. Apa yang Anda fahami tentang Double Link List (DLL)?
2. Jelaskan struktur/ komponen yang dimiliki node pada Double Link List (DLL).
3. Jelaskan kelebihan dan kelemahan Double Link List (DLL).
4. Ilustrasikan operasi-operasi yang dimiliki Double Link List (DLL) berdasarkan
kode yang Anda miliki.
Ket:
 Gambar boleh mengambil dari internet dan sertakan referensi yang digunakan.
 Gambar dicetak dan ditempel pada laporan tugas.
 Penulisan judul tabel diletakkan di atas tabel, sedangkan judul gambar diletakkan di
bawah gambar.

H. Tugas
Buatlah program untuk penyimpanan data mahasiswa yang disimpan dalam bentuk SLL
dan DLL, dengan ketentuan:
1. Informasi mahasiswa yang disimpan adalah Nama, NIM dan IPK.
2. Operasi yang dapat dilakukan adalah:
a. Tambah Data
b. Hapus data
c. Update data IPK.
d. Pencarian IPK terbaik (hasil output adalah nama mahasiswa).

I. Materi Selanjutnya
Tree (pohon).

J. Referensi
Arief F.H dan Qonita U.S. 2019. Modul: Praktikum Dasar-dasar Pemrograman.

9|M o d u l 7 : D o u b l e L i n k L i s t ( D L L )
Bandung: Matematika, FST, UIN Sunan Gunung Djati.
Siti Rofiqoh Fitriyani. 2016. Modul Praktikum Algoritma dan Struktur Data. Bandung:
FST, UIN Sunan Gunung Djati
Berbagai sumber.

10 | M o d u l 7 : D o u b l e L i n k L i s t ( D L L )

Anda mungkin juga menyukai