📕Praktikum 1
Deksripsi
Pada praktikum 1 ini akan dibuat class Node
dan class DoublyLinkedList
yang didalamnya terdapat operasi-operasi untuk menambahkan data dengan beberapa cara (dari bagian depan linked list, belakang ataupun indeks tertentu pada linked list).
Class diagram berikut merupakan acuan utama untuk class Node
dan DoublyLinkedList


Langkah Percobaan
Buatlah projek baru.
Buat kelas
Node
.Tambahkan atribut berikut pada kelas
Node
.
int data;
Node next, prev;
Tambahkan konstruktor untuk kelas
Node
.
public Node(Node prev, int data, Node next) {
this.prev = prev;
this.data = data;
this.next = next;
}
Buat kelas
DoublyLinkedList
.Pada kelas tersebut, tambahkan atribut berikut,
Node head;
int size;
Selanjutnya, buatlah konstruktor untuk kelas
DoublyLinkedList
.
public DoublyLinkedList() {
head = null;
size = 0;
}
Tambahkan method
isEmpty()
.
public boolean isEmpty() {
return head == null;
}
Kemudian, buat method
addFirst()
. Method ini akan menjalankan penambahan data di bagian depan linked list.
public void addFirst(int data) {
if (isEmpty()) {
head = new Node(null, data, null);
} else {
Node newNode = new Node(null, data, head);
head.prev = newNode;
head = newNode;
}
size++;
}
Selain itu pembuatan method
addLast()
akan menambahkan data pada bagian belakang linked list.
public void addLast(int data) {
if (isEmpty()) {
addFirst(data);
} else {
Node current = head;
while (current.next != null) {
current = current.next;
}
Node newNode = new Node(current, data, null);
current.next = newNode;
size++;
}
}
Untuk menambahkan data pada posisi yang telah ditentukan dengan indeks, dapat dibuat dengan method
add(int item, int index)
.
public void add(int data, int index) throws Exception {
if (isEmpty()) {
addFirst(data);
} else if (index < 0 || index > size) {
throw new Exception("Nilai index di luar batas");
} else {
Node current = head;
int i = 0;
while (i < index) {
current = current.next;
i++;
}
if (current.prev == null) {
Node newNode = new Node(null, data, current);
current.prev = newNode;
head = newNode;
} else {
Node newNode = new Node(current.prev, data, current);
newNode.prev = current.prev;
newNode.next = current;
newNode.prev.next = newNode;
current.prev = newNode;
}
}
size++;
}
Jumlah data yang ada di dalam linked lists akan diperbarui secara otomatis, sehingga dapat dibuat method
size()
untuk mendapatkan nilai dari size.
public int size() {
return size;
}
Selanjutnya dibuat method
clear()
untuk menghapus semua isi linked lists, sehingga linked lists dalam kondisi kosong.
public void clear() {
head = null;
size = 0;
}
Untuk mencetak isi dari linked lists dibuat method
print()
. Method ini akan mencetak isi linked lists berapapun size-nya. Jika kosong akan dimunculkan suatu pemberitahuan bahwa linked lists dalam kondisi kosong.
public void print() {
if (!isEmpty()) {
Node tmp = head;
while (tmp != null) {
System.out.print(tmp.data + "\t");
tmp = tmp.next;
}
System.out.println("\nBerhasil diisi");
} else {
System.out.println("Linked Lists Kosong");
}
}
Selanjutya dibuat class
DoublyLinkedListMain
untuk mengeksekusi semua method yang ada pada classDoublyLinkedList
.Isikan kode berikut pada method main.
DoublyLinkedList dll = new DoublyLinkedList();
dll.print();
System.out.println("Size : " + dll.size());
System.out.println("==========================");
dll.addFirst(3);
dll.addLast(4);
dll.addFirst(7);
dll.print();
System.out.println("Size : " + dll.size());
System.out.println("==========================");
dll.add(40, 1);
dll.print();
System.out.println("Size : " + dll.size());
System.out.println("==========================");
dll.clear();
dll.print();
System.out.println("Size : " + dll.size());
System.out.println("==========================");
Verifiaksi Hasil Praktikum
Verifikasi hasil kompilasi kode program Anda dengan gambar berikut ini.

Pertanyaan
Jelaskan perbedaan antara single linked list dengan doubly linked lists!
Perhatikan class Node, di dalamnya terdapat atribut
next
danprev
. Untuk apakah atributtersebut?
Perhatikan konstruktor pada class
DoublyLinkedList
. Apa kegunaan inisialisasi atributhead
dansize
?Pada method
addFirst()
, mengapa dalam pembuatan objek dari konstruktor class Node prev dianggap sama dengan null?head = new Node(null, data, null);
Perhatikan pada method
addFirst()
. Apakah arti statementhead.prev = newNode
?Perhatikan isi method
addLast()
, apa arti dari pembuatan objek Node dengan mengisikan parameterprev
dengancurrent
, dannext
dengannull
?Node newNode = new Node(current, data, null);
Pada method add(), terdapat potongan kode program sebagai berikut. Jelaskan maksud dari potongan kode tersebut.
if (current.prev == null) { Node newNode = new Node(null, data, current); current.prev = newNode; head = newNode; }
Last updated