Anda di halaman 1dari 10

Modul 5

Abstract Data Type (ADT) List : Single Link List


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 implementasi Abstract Data Type (ADT) pada list, serta
operasinya.
2. Mahasiswa dapat mengimplementasikan ADT dalam bentuk list dengan bahasa Java.

B. Pokok Bahasan
Single Link List (SLL).

C. Tugas Pendahuluan
1. Jelaskan kembali tentang Abstract Data Type (ADT), serta perbedaannya dengan
tipe data dasar.
2. Apa saja komponen dalam ADT? Jelaskan.
3. Salah satu implementasi ADT yang telah Anda kenal adalah array. Jelaskan
pengertian dan operasi yang dapat dilakukan pada array, serta berikan ilustrasi.
4. Tuliskan algoritma pencarian terurut dan berikan ilustrasi untuk mencari data 9 pada
array B = [ 2, 3, 5, 7, 2, 1, 4, 9] dengan algoritma tersebut.
5. Ada beberapa kekurangan dan kelebihan array. Jelaskan.
6. Pernahkah Anda mendengar struktur data bentukan selain array? Sebutkan dan
jelaskan.
7. Apakah list menjadi salah satu yang Anda sebutkan pada jawaban no. 5? Jika iya,
jelaskan pengertian dan operasi pada list secara lebih mendalam. Jika tidak, mulailah
mencari referensi, kemudian jelaskan pengertian dan operasinya.

D. Materi

Sebagaimana telah dijelaskan pada modul sebelumnya, bahwa Abstract Data Type
(ADT) adalah model matematika untuk suatu struktur data yang menekankan tentang
“apa” yang dinyatakan oleh data, bukan tentang bagaimana data dibangun. Salah satu
implementasi ADT adalah link list.

Link List
Link List merupakan tipe data yang mengatasi keterbatasan array yang statis (tidak
bisa diubah) dan boros (pemesanan maksimal memori dilakukan di awal). Secara
sederhana, link list adalah desain penyimpanan data yang terdiri dari node-node (simpul-
simpul) yang saling terhubung. Jika array dapat diilustrasikan sebagai ruang-ruang
dalam suatu bangunan, maka list dapat diilustrasikan seperti kereta api yang terdiri dari
gerbong-gerbong yang saling terhubung.
Link List bersifat lebih dinamis dan lebih hemat daripada array, karena pemesanan
memori dapat dilakukan selama program berjalan. Namun, link list memiliki kelemahan,
yakni sulitnya mengakses data secara langsung, karena dalam list tidak ada indeks. Dalam
list, node yang memiliki nama hanya node pertama (head) dan node terakhir (tail).
Akibatnya, jika ingin melakukan pencarian atau perubahan, perlu dilakukan penelusuran
1|M o d u l 5 : S i n g l e L i n k L i s t ( S L L )
(traversal). Meski demikian, list masih menjadi pilihan karena kemudahan dalam
menambah elemen list.
Link List memiliki beberapa jenis, diantaranya adalah Single Link List (SLL) dan
Double Link List (DLL). Perbedaannya terletak pada arah penghubung node. Ilustrasi
array, SLL dan DLL disajikan pada Gambar 1, Gambar 2 dan Gambar 3.

Gambar 1. Array

Gambar 2. Single Link List.

Gambar 3. Double Link List.

E. Praktikum

1. Masih ingatkah Anda proses penambahan elemen array integer yang memiliki maksimal
elemen 100, namun baru terisi 10? Ilustrasikan.

2. Ilustrasikan bagaimana menghapus elemen pada indeks ke-7 dari array pada no. 1.
(Perhatikan bahwa pada array, tidak ada “kamar kosong” di tengah array)

2|M o d u l 5 : S i n g l e L i n k L i s t ( S L L )
3. Pernahkan Anda melihat sebuah lokomotif yang dihubungkan dengan barisan gerbong?
Gambarkan ilustrasinya.

4. Ilustrasi proses penambahan gerbong pada kereta api.

5. Ilustrasi yang Anda buat pada no. 3 dan 4 menggunakan konsep List. Ilustrasikan konsep
tersebut untuk menyimpan list integer bernama L1 yang berisi [7, 8, 11, 6, 19, 25].
Kemudian lakukan penambahan node berisi 56 di akhir L1.

6. Perhatikan script java berikut.


class Node{
public int iData; // data utk objek Node
public Node next; // link penunjuk ke alamat selanjutnya

//--------------------------
public Node (int id){ //constructor
iData = id; // mengisi data node
}
//------------
3|M o d u l 5 : S i n g l e L i n k L i s t ( S L L )
public void displayNode(){
System.out.print(" {" + iData+ "} ");
}
}// end class Node
a. Apakah Node membentuk ADT? (Ya/ Tidak)
b. Jika Node membentuk ADT, tentukan:
Komponen:
Data/ Tipe data : _____________________________________
Operasinya : _____________________________________
Interface : _____________________________________

7. Anda telah diberi penjelasan tentang List, jika melihat class Node, bagaimana ilustrasi list
yang dapat dibuat dari Node di atas?

8. Perhatikan class LinkList berikut.


class LinkList{
private Node head, tail; //properti

//-----------------------------
public LinkList(){ // constructor
head = null; //inisialisasi calon list
}
}
Class tersebut adalah class untuk membuat ADT LinkList. Untuk membuat ADT List
tersebut, tentukan:
Komponen:
Data/ Tipe data : _____________________________________
Operasinya : _____________________________________
Interface : _____________________________________

9. Apakah salah satu operasi yang dapat dilakukan oleh List Anda adalah menambah
elemen? (Ya/ Tidak)
a. Ilustrasikan proses tambah elemen dari depan List. (elemen baru disimpan sebelum
head)

4|M o d u l 5 : S i n g l e L i n k L i s t ( S L L )
b. Ilustrasikan proses tambah elemen dari belakang List (elemen baru disimpan setelah
tail).

10. Apakah menghapus elemen menjadi salah satu operasi yang dapat dilakukan oleh List
Anda? (Ya/ Tidak).
a. Ilustrasikan proses hapus elemen dari depan List. (head yang terhapus)

b. Ilustrasikan proses hapus elemen dari belakang List (tail yang terhapus).

Catatan: Hati-hati, jika menghapus head secara langsung, data akan menghilang!

11. Java script berikut adalah salah satu rancangan ADT List yang dapat dibuat.
class LinkList{
private Node head, tail; //properti

//-----------------------------
public LinkList(){ // constructor
head = null; //inisialisasi calon list
}
5|M o d u l 5 : S i n g l e L i n k L i s t ( S L L )
// Method-method
//-------------------------------
public void tambahDepan(int id){
Node baru = new Node(id);
if (head == null){
head = baru;
tail = baru;
}
else{
baru.next = head;
head = baru;
}
}
//-------------------------------
public void tambahBelakang(int id){
Node baru = new Node(id);
Node bantu;
if (head == null){
head = baru;
tail = baru;
}
else{
tail.next = baru;
tail = baru;
}
}
//------------------------------------------
public Node hapusDepan(){
if (head != null){
Node temp = head;
head = head.next;
temp.next = null;
return temp;
}
else{
System.out.println("List kosong. ");
return null;
}
}
//------------------------------------------
public Node hapusBelakang(){
if (head != null){
Node bantu, temp;
if (head.next == null){
temp = head;
head = tail = null;
}
else{
bantu = head;
6|M o d u l 5 : S i n g l e L i n k L i s t ( S L L )
while (bantu.next != tail){
bantu = bantu.next;
}
temp = tail;
tail = bantu;
tail.next = null;
}
return temp;
}
else{
System.out.println("List kosong. ");
return null;
}
}

//--------------------------
public void displayList(){
if (head != null){
Node bantu = head;
System.out.println ("Data dalam List: ");
while (bantu != null){
bantu.displayNode();
bantu = bantu.next;
}
System.out.println(" ");
}
else
System.out.println("List kosong.");
}
}// end class LinkList

12. Apakah ilustrasi yang Anda berikan untuk proses menambah dan menghapus elemen pada
List sudah serupa dengan langkah proses java script class LinkList di atas? (Ya/ Tidak)
Untuk memeriksa hal ini, jelaskan langkah manual yang dikerjakan berdasarkan kode
pada method-method class LinkList.
Ket.
Method Ilustrasi (Sama/ Tidak
Sama)
tambahDepan()

7|M o d u l 5 : S i n g l e L i n k L i s t ( S L L )
tambahBelakang()

hapusDepan()

hapusBelakang()

displayList()

13. Untuk memanggil objek-objek Node dan LinkList, buatlah class LinkListApp().
Contoh:
class LinkListApp{
public static void main(String[] args){
LinkList List = new LinkList();
List.tambahDepan(22);
List.tambahDepan(44);
List.tambahBelakang(66);
8|M o d u l 5 : S i n g l e L i n k L i s t ( S L L )
List.tambahBelakang(88);
List.displayList();
Node hapus;
hapus = List.hapusDepan();
//hapus menerima input dari var temp pada class LinkList
if (hapus !=null){
System.out.print("Menghapus ");
hapus.displayNode();
System.out.println("");
}
List.displayList();
}//end method main()
} //end class LinkListApp
Class LinkListApp di atas, dibuat berdasarkan class LinkList dan Node yang dimiliki.
Jika rancangan Anda berbeda, buatlah yang sesuai dengan class yang Anda miliki.

14. Buatlah method untuk menambah elemen di tengah LinkList.

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. Jelaskan kembali tentang pengertian Abstract Data Type (ADT) Link List.
2. Berikan contoh jenis-jenis Link List.
3. Link List memiliki kelemahan dan kelebihan dibandingkan dengan array. Jelaskan.
4. Berikan ilustrasi untuk proses operasi dalam list, terutama menambah elemen,
menghapus elemen dan menampilkan elemen.
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.

9|M o d u l 5 : S i n g l e L i n k L i s t ( S L L )
H. Latihan
Tambahkan method sortList() untuk mengurutkan elemen List dan seachList() untuk
mencari elemen dalam List.

I. Materi Selanjutnya
Implementasi List pada Stack dan Queue.

J. Referensi
Arief Fatchul Huda. 2013. Modul: Praktikum Algoritma Komputer. Bandung: Jurusan
Matematika FST UIN Sunan Gunung Djati.
Arief F.H dan Qonita U.S. 2019. Modul: Praktikum Dasar-dasar Pemrograman. 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 5 : S i n g l e L i n k L i s t ( S L L )

Anda mungkin juga menyukai