• Tidak ada hasil yang ditemukan

Think Different Materi ASD 2014 pertemuan_9

N/A
N/A
Protected

Academic year: 2017

Membagikan "Think Different Materi ASD 2014 pertemuan_9"

Copied!
69
0
0

Teks penuh

(1)
(2)

2

Double Linked List

• Double : artinya field pointer-nya dua buah dan dua arah, yang menunjuk ke node sebelum dan sesudahnya.

• Berguna bila perlu melakukan pembacaan

linkedlist dari dua arah.

Double linked list memiliki 2 buah pointer yaitu

pointer next dan prev.

(3)

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 nex

(4)

Double Linked List

Ketika double linked list memiliki banyak

node maka node yang paling depan pointer prev-nya menunjuk ke NULL. Sedangkan node yang paling belakang pointer next-nya yang menunjuk ke NULL.

a b c d e

null

firstNode

null

(5)

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

(6)

Double Linked List

Contoh ilustrasi double linked list yang

memiliki 4 node :

previous

(7)

“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 pada linked list. Field pointer : digunakan untuk menyimpan alamat node berikutnya.

class Node2P {

int data; // data

Node2P next; // pointer next Node2P prev; // pointer prev }

Ilustrasi :

next

data

(8)

Class Node

public class Node2P { int data;

Node2P next;

Node2P previous;

Node2P() {}

Node2P(int theData) { data = theData;}

Node2P(int theData, Node2P thePrevious, Node2P theNext) {

data= theData;

previous = thePrevious; next = theNext;

(9)

9

Alokasi Simpul

(10)

Operasi Linked List

1. inisialisasi 2. isEmpty 3. size

4. Penambahan 5. Penghapusan 6. Penyisipan

7. Pencarian

(11)

11

(1) Inisialisasi Awal Pointer Head & Tail

Node2P head = null; Node2P tail= null;

(12)

(2)isEmpty

Digunakan untuk mengetahui linked

dalam kondisi kosong.

Kondisi kosong : jika size = 0 atau

jika head=tail=null.

boolean isEmpty() {

(13)

(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() {

(14)

(4) Penambahan

Dibedakan menjadi :

1. Penambahan dari depan

2. Penambahan dari belakang

(15)

Membentuk Simpul Awal

Jika kondisi awal linked list kosong, maka

head dan tail sama-sama menunjuk node baru.

head = tail= Baru

(16)

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

(17)

Penambahan dari Depan

void addFirst(Node2P input){ if (isEmpty()){ head=input; tail=input; } else {

input.next = head;

head.previous = input; head = input;

(18)

18

Insert First

(19)

19

Insert First

(20)

20

Insert First

(21)

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

(22)

Penambahan dari Belakang

void addLast(Node2P input){ if (isEmpty()){

head = input; tail = input; }

else {

input.previous = tail; tail.next = input; tail = input;

(23)

23

Insert Last

Kondisi awal linked list :

(24)

24

Insert Last

(25)

25

Insert Last

(26)

26

Insert Last

(27)

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

(28)

Penambahan setelah Node x

void insertAfter(int 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; }

(29)

Insert After Node x

Kondisi awal linked list :

(30)

Insert After Node x

Dibutuhkan pointer bantu untuk mencari node x. Misalkan pointer bantu tersebut adalah after.

1. Node after = head;

(31)

Insert After Node x

(32)

32

Insert After Node x

(33)

33

Insert After Node x

(34)

34

Insert After Node x

(35)

35

Insert After Node x

(36)

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

(37)

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; }

}

(38)

38

Insert Before Node x

Kondisi awal linked list :

(39)

39

Insert Before Node x

1. Node before = head;

(40)

40

Insert Before Node x

(41)

41

Insert Before Node x

(42)

42

Insert Before Node x

(43)

43

Insert Before Node x

(44)

44

Insert Before Node x

(45)

(5) Penghapusan

Dibedakan menjadi :

1. Hapus node depan

(46)

Penghapusan

Jika linked list dalam keadaan

kosong maka tidak dapat dilakukan penghapusan.

Jika pada linked list hanya terdapat 1

(47)

Hapus Node Depan

Penghapusan dilakukan pada node

paling depan, yaitu node yang ditunjuk oleh head.

(48)

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--; }

else

System.out.println("Data is empty!");

(49)

49

Delete First

kondisi awal linked list:

(50)

50

Delete First

(51)

51

Delete First

(52)

52

Delete First

(53)

Delete First

53

(54)

54

Delete First

(55)

Hapus Node Belakang

Penghapusan dilakukan pada node

paling belakang, yaitu node yang ditunjuk oleh tail.

(56)

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!");

(57)

57

Delete Last

Kondisi awal linked list :

(58)

58

Delete Last

(59)

59

Delete Last

(60)

60

Delete Last

(61)

61

Delete Last

(62)

62

Delete Last

(63)

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

(64)

Hapus node tertentu

void remove(int key){ Node2P temp = head; if (!isEmpty()){

while (temp != null){ if (temp.data == key){ if (temp == head){ this.removeFirst(); size--; break; } else {

if(temp.next == null){ tail=temp.previous; tail.next=null;

} else{

temp.previous.next = temp.next; temp.next.previous = temp.previous; }

size--; break; }

}

temp = temp.next; }

} else

System.out.println("Data is empty!"); size--;

(65)

65

Delete Node x

Kondisi awal linked list :

(66)

66

Delete Node x

1. Node hapus=head;

(67)

67

Delete Node x

(68)

68

Delete Node x

(69)

69

Delete Node x

Referensi

Dokumen terkait

sedemikian hingga node yang terakhir diinsertkan merupakan node yang pertama kali didelete..  Stack biasanya digambarkan sebagai tumpukan

Bagaimana cara mengakses data yang alamatnya disimpan oleh variabel pointer?. Apa

Kemudian data yang dicari dibandingkan dengan data yang di tengah, apakah sama atau lebih kecil, atau lebih besar. Jika data sama,

– Untuk tipe data reference seperti String , nilai dari String tidak akan diinisialisasi ke string kosong “” , sehingga Anda tetap harus membuat array String secara

Kunjungi simpul yang belum dikunjungi dan bertetangga dengan simpul-simpul yang tadi dikunjungi, demikian seterusnya.... Depth First

4.Jika yang discan adalah operator (sebut opr1), maka  Pop 1 buah elemen teratas dari stack, simpan dalam variable var1.  Pop 1 buah elemen teratas dari stack, simpan dalam

Data dari element paling belakang akan menjadi return value (nilai yang dikembalikan). Pergeseran

(pembentukan obyek array yang memiliki 10 element, dan alamat obyek akan disimpan pada variabel bernama