Date post: | 17-Oct-2015 |
Category: |
Documents |
Upload: | classicalistrazzz |
View: | 23 times |
Download: | 0 times |
of 71
5/27/2018 New Handout_6 [Double Linked List]
1/71
List Linear :
Linked List (Double Linkedlist)
Teknik Informatika
Universitas Muhammadiyah Malang2012
Algoritma dan Struktur Data
5/27/2018 New Handout_6 [Double Linked List]
2/71
Tujuan Instruksional
Mahasiswa mampu :
Memahami struktur data linked list
Memahami cara pengoperasian struktur data
linked list
Mengimplementasikan struktur data linked list
5/27/2018 New Handout_6 [Double Linked List]
3/71
Topik
Bentuk dasar linked list
deklarasi class linked list
Tambah node Hapus node
Penyisipan node
ADT Linked List
5/27/2018 New Handout_6 [Double Linked List]
4/71
4
Double Linked List
Double : artinya field pointer-nya dua buah dan duaarah, yang menunjuk ke node sebelum dansesudahnya.
Berguna bila perlu melakukan pembacaan linkedlistdari dua arah.
Double linked list memiliki 2 buah pointer yaitupointer nextdan prev.
Pointer next : mengarah ke node belakang (tail).
Pointer prev : mengarah ke node depan (head).
5/27/2018 New Handout_6 [Double Linked List]
5/71
Ilustrasi Node Double
Ketika masih ada satu node maka kedua pointer
(next dan prev) akan menunjuk ke NULL)
Double linked list dapat diakses dari dua arah :1. Dari depan ke belakang (head ke tail)
2. Dari belakang ke depan (tail ke head)
prev DATA next
5/27/2018 New Handout_6 [Double Linked List]
6/71
Double Linked List
Ketika double linked list memiliki banyak node makanode yang paling depan pointer prev-nya menunjukke NULL. Sedangkan node yang paling belakangpointer next-nya yang menunjuk ke NULL.
a b c d e
null
firstNode
null
lastNode
5/27/2018 New Handout_6 [Double Linked List]
7/71
Pointer Head dan Tail
Sama seperti single linked list, pada double linked
dibutuhkan pointer bantu yaitu head dan tail.
Head : menunjuk pada node yang paling depan.
Tail : menunjuk pada node yang paling belakang.
5/27/2018 New Handout_6 [Double Linked List]
8/71
Double Linked List
Contoh ilustrasi double linked list yangmemiliki 4 node :
previous
next
5/27/2018 New Handout_6 [Double Linked List]
9/71
Double Representation
Penjelasan:
Pembuatan class bernama Node2P, yang berisi variabel data
bertipe Object dan 2 variabel pointer bertipe Node2P yaitu :next dan prev.
Field data : digunakan untuk menyimpan data/nilai padalinked list. Field pointer : digunakan untuk menyimpan alamatnode berikutnya.
class Node2P{
int data; // dataNode2P next; // pointer nextNode2P prev; // pointer prev
}
Ilustrasi :
next
data
prev
5/27/2018 New Handout_6 [Double Linked List]
10/71
10
Alokasi Simpul
Node2P baru = new Node2P(10);
5/27/2018 New Handout_6 [Double Linked List]
11/71
Operasi Linked List
1. inisialisasi
2. isEmpty
3. size4. Penambahan
5. Penghapusan
6. Penyisipan7. Pencarian
8. Pengaksesan
5/27/2018 New Handout_6 [Double Linked List]
12/71
12
(1) Inisialisasi Awal Pointer Head & Tail
Node2P head = null;Node2P tail= null;
head tailNULL
5/27/2018 New Handout_6 [Double Linked List]
13/71
(2)isEmpty
Digunakan untuk mengetahui linked dalam
kondisi kosong.
Kondisi kosong : jika size = 0 atau jika
head=tail=null.
boolean isEmpty()
{
return size==0;
}
5/27/2018 New Handout_6 [Double Linked List]
14/71
(3) size
Digunakan untuk mengetahui banyak node
pada linked list.
Size akan bertambah 1 setiap ada node baru
yang ditambahkan pada linked list.
Size akan berkurang 1 setiap ada penghapusan
node.int size(){
return size;
}
5/27/2018 New Handout_6 [Double Linked List]
15/71
(4) Penambahan
Dibedakan menjadi :
1. Penambahan dari depan
2. Penambahan dari belakang3. Penambahan setelah node tertentu
4. Penambahan sebelum node tertentu
5/27/2018 New Handout_6 [Double Linked List]
16/71
Membentuk Simpul Awal
Jika kondisi awal linked list kosong, maka head dan
tail sama-sama menunjuk node baru.
head = tail= Baru
16
5/27/2018 New Handout_6 [Double Linked List]
17/71
Penambahan dari Depan
Jika linked list terdapat node, maka :
Penambahan node baru diletakkan di depan node
yang ditunjuk oleh head.
Pointer prev dari node depan diarahkan ke node
baru.
Terjadi pergeseran pointer head kearah node
baru.
5/27/2018 New Handout_6 [Double Linked List]
18/71
Penambahan dari Depan
void addFirst(Node2P input){if (isEmpty()){
head=input;
tail=input;}else{
input.next = head;head.previous = input;
head = input;} size++;
}
5/27/2018 New Handout_6 [Double Linked List]
19/71
19
Insert First
1. Baru.next = head
5/27/2018 New Handout_6 [Double Linked List]
20/71
20
Insert First
2. head.prev = Baru
5/27/2018 New Handout_6 [Double Linked List]
21/71
21
Insert First
3. head = baru
5/27/2018 New Handout_6 [Double Linked List]
22/71
Penambahan dari Belakang
Jika linked list terdapat node, maka :
Penambahan node baru diletakkan di belakang
node yang ditunjuk oleh tail.
Pointer next dari node belakang diarahkan ke
node baru.
Terjadi pergeseran pointer tail kearah node baru.
5/27/2018 New Handout_6 [Double Linked List]
23/71
Penambahan dari Belakang
void addLast(Node2P input){if (isEmpty()){
head = input;tail = input;
}else{input.previous = tail;tail.next = input;
tail = input;} size++;
}
5/27/2018 New Handout_6 [Double Linked List]
24/71
24
Insert Last
Kondisi awal linked list :
Terdapat 2 node
5/27/2018 New Handout_6 [Double Linked List]
25/71
25
Insert Last
1. Baru.prev = tail
5/27/2018 New Handout_6 [Double Linked List]
26/71
26
Insert Last
2. tail.next = Baru
5/27/2018 New Handout_6 [Double Linked List]
27/71
27
Insert Last
3. tail= Baru
5/27/2018 New Handout_6 [Double Linked List]
28/71
Penambahan Setelah Node x
Penambahan node baru dilakukan dibelakang
node x (node tertentu).
Node x adalah node yang memiliki data yang
sama dengan key.
Jika tidak ditemukan node yang dimaksud
maka penambahan tidak terjadi.
5/27/2018 New Handout_6 [Double Linked List]
29/71
Penambahan setelah Node x
void insertAfter(Object key,Node2P input){Node2P temp = head;do{
if(temp.data==key){input.previous = temp;input.next = temp.next;temp.next.previous = input;temp.next = input;size++;
System.out.println("Insert data is succeed.");break;
}temp = temp.next;
}while (temp!=null);}
5/27/2018 New Handout_6 [Double Linked List]
30/71
Insert After Node x
Kondisi awal linked list :
Terdapat 3 node pada linked list
misalkan key = 10
5/27/2018 New Handout_6 [Double Linked List]
31/71
Insert After Node x
Dibutuhkan pointer bantu untuk mencari node x. Misalkanpointer bantu tersebut adalah after.
1. Node after = head;
Pointer after akan bergeser mencari node yang sesuai.
5/27/2018 New Handout_6 [Double Linked List]
32/71
Insert After Node x
2. Baru.prev = after
5/27/2018 New Handout_6 [Double Linked List]
33/71
33
Insert After Node x
3. Baru.next = after.next
5/27/2018 New Handout_6 [Double Linked List]
34/71
34
Insert After Node x
4. after.next.prev = Baru
5/27/2018 New Handout_6 [Double Linked List]
35/71
35
Insert After Node x
5. after.next = Baru
5/27/2018 New Handout_6 [Double Linked List]
36/71
36
Insert After Node x
Hasil akhir :
5/27/2018 New Handout_6 [Double Linked List]
37/71
Penambahan Sebelum Node x
Penambahan node baru dilakukan didepan
node x (node tertentu).
Node x adalah node yang memiliki data yang
sama dengan key.
Jika tidak ditemukan node yang dimaksud
maka penambahan tidak terjadi.
5/27/2018 New Handout_6 [Double Linked List]
38/71
Penambahan sebelum Node tertentu
void insertBefore(Object key,Node2P input){
Node2P temp = head;while (temp != null){
if (temp.data == key){
if(temp == head){
this.addFirst(input);System.out.println("Insert data is succeed.");size++;break;
}else{
input.previous = temp.previous;input.next = temp;
temp.previous.next = input;temp.previous = input;System.out.println("Insert data is succeed.");size++;break;
}}temp = temp.next;
}
5/27/2018 New Handout_6 [Double Linked List]
39/71
39
Insert Before Node x
Kondisi awal linked list :
Terdapat 4 node pada linked list
misalkan key = 5
5/27/2018 New Handout_6 [Double Linked List]
40/71
40
Insert Before Node x
1. Node before = head;
pointer before mencari node yang sesuai.
5/27/2018 New Handout_6 [Double Linked List]
41/71
41
Insert Before Node x
2. Baru.prev = before.prev
5/27/2018 New Handout_6 [Double Linked List]
42/71
42
Insert Before Node x
3. Baru.next = before
5/27/2018 New Handout_6 [Double Linked List]
43/71
43
Insert Before Node x
4. before.prev.next = Baru
5/27/2018 New Handout_6 [Double Linked List]
44/71
44
Insert Before Node x
5. before.prev = Baru
5/27/2018 New Handout_6 [Double Linked List]
45/71
45
Insert Before Node x
Hasil akhir :
5/27/2018 New Handout_6 [Double Linked List]
46/71
(5) Penghapusan
Dibedakan menjadi :
1. Hapus node depan
2. Hapus node belakang
3. Hapus node tertentu
5/27/2018 New Handout_6 [Double Linked List]
47/71
Penghapusan
Jika linked list dalam keadaan kosong maka
tidak dapat dilakukan penghapusan.
Jika pada linked list hanya terdapat 1 node,
maka head dan tail menunjuk ke NULL.
5/27/2018 New Handout_6 [Double Linked List]
48/71
Hapus Node Depan
Penghapusan dilakukan pada node paling
depan, yaitu node yang ditunjuk oleh head.
Terjadi pergeseran head ke belakang.
5/27/2018 New Handout_6 [Double Linked List]
49/71
Hapus node depan
void removeFirst(){Node2P temp = head;if (!isEmpty()){
if (head == tail)head = tail = null;
else{
head.next.previous = null;head = temp.next;
} size--;}
elseSystem.out.println("Data is empty!");
}
5/27/2018 New Handout_6 [Double Linked List]
50/71
50
Delete First
kondisi awal linked list:
Terdiri dari 5 node
5/27/2018 New Handout_6 [Double Linked List]
51/71
51
Delete First
1. Node hapus = head;
5/27/2018 New Handout_6 [Double Linked List]
52/71
52
Delete First
2. head.next.prev = null
5/27/2018 New Handout_6 [Double Linked List]
53/71
53
Delete First
3. head = hapus.next
5/27/2018 New Handout_6 [Double Linked List]
54/71
Delete First
54
Node 8 sudah terhapus
5/27/2018 New Handout_6 [Double Linked List]
55/71
55
Delete First
Hasil akhir :
5/27/2018 New Handout_6 [Double Linked List]
56/71
Hapus Node Belakang
Penghapusan dilakukan pada node paling
belakang, yaitu node yang ditunjuk oleh tail.
Terjadi pergeseran tail ke depan.
5/27/2018 New Handout_6 [Double Linked List]
57/71
Hapus node belakang
void removeLast(){Node2P temp = tail;if (!isEmpty()){
if (tail == head){
head = tail = null;}else {
tail.previous.next = null;tail=temp.previous;
} size--;
}else System.out.println("Data is empty!");
}
5/27/2018 New Handout_6 [Double Linked List]
58/71
58
Delete Last
Kondisi awal linked list :
Linked list terdiri dari 4 node
5/27/2018 New Handout_6 [Double Linked List]
59/71
59
Delete Last
1. Node hapus=tail;
5/27/2018 New Handout_6 [Double Linked List]
60/71
60
Delete Last
2. tail.prev.next = null
5/27/2018 New Handout_6 [Double Linked List]
61/71
61
Delete Last
3. tail= hapus.prev
5/27/2018 New Handout_6 [Double Linked List]
62/71
62
Delete Last
Node 6 sudah terhapus
5/27/2018 New Handout_6 [Double Linked List]
63/71
63
Delete Last
Hasil akhir :
5/27/2018 New Handout_6 [Double Linked List]
64/71
Hapus Node x
Penghapusan dilakukan pada node x (node
tertentu).
Node x adalah node yang memiliki data sama
dengan key.
Jika tidak ditemukan node yang sesuai maka
penghapusan tidak dapat dilakukan.
H d t t t
5/27/2018 New Handout_6 [Double Linked List]
65/71
Hapus node tertentuvoid remove(Object key){
Node2P temp = head;if (!isEmpty()){
while (temp != null){if (temp.data == key){
if (temp == head){this.removeFirst();size--;break;
}
else{temp.previous.next = temp.next;temp.next.previous = temp.previous;if(temp.next == null)
tail=temp;size--;break;
}}temp = temp.next;
}}else
System.out.println("Data is empty!");
size--;}
5/27/2018 New Handout_6 [Double Linked List]
66/71
66
Delete Node x
Kondisi awal linked list :
Linked list memiliki 3 node. Misalkan key = 3
5/27/2018 New Handout_6 [Double Linked List]
67/71
67
Delete Node x
1. Node hapus=head;hapus adalah pointer bantu yang akan mencarinode yang dimaksud (node x).
5/27/2018 New Handout_6 [Double Linked List]
68/71
68
Delete Node x
2. hapus.prev.next = hapus.next;
5/27/2018 New Handout_6 [Double Linked List]
69/71
69
Delete Node x
3. hapus.next.prev = hapus.prev;
5/27/2018 New Handout_6 [Double Linked List]
70/71
70
Delete Node x
Node 3 sudah terhapus
5/27/2018 New Handout_6 [Double Linked List]
71/71
Sumber
Arna Fariza, Algoritma Struktur Data : Double
Linked List, PENS-ITS, Surabaya