• Tidak ada hasil yang ditemukan

Think Different Materi ASD 2014 pertemuan_8

N/A
N/A
Protected

Academic year: 2017

Membagikan "Think Different Materi ASD 2014 pertemuan_8"

Copied!
54
0
0

Teks penuh

(1)
(2)

History of Linked List

Dikembangkan tahun 1955-1956 oleh Allen

Newell, Cliff Shaw dan Herbert Simon di RAND

Corporation sebagai struktur data utama untuk

bahasa Information Processing Language (IPL).

IPL dibuat untuk mengembangkan program

artificial

intelligence

, seperti pembuatan Chess Solver.

Victor Yngve di Massachusetts Institute of

Technology (MIT) juga menggunakan linked list

pada natural language processing dan machine

transitions pada bahasa pemrograman

(3)

Definisi

Linked list : struktur data yang dibangun

dari satu atau lebih

node

yang menempati

alokasi memori secara dinamis.

Node : tempat penyimpanan data yang

terdiri dari dua bagian/field.

Field 1 adalah

Data,

digunakan untuk

menyimpan data/nilai.

Field 2 adalah

Pointer,

untuk menyimpan

(4)

Linked List

Jika linked list hanya berisi satu node

maka pointernya akan menunjuk ke

NULL.

Jika linked list memiliki lebih dari satu

node maka pointer menyimpan alamat

dari node berikutnya. Sehingga antara

node satu dengan node yang lain akan

terhubung. Kecuali node paling ujung

akan menunjuk ke NULL.

(5)

5

(6)

Array VS Linked List

Menyimpan koleksi elemen secara

non-contiguously.

Elemen dapat terletak pada lokasi memory yang

saling berjauhan. Bandingkan dengan array dimana

tiap-tiap elemen akan terletak pada lokasi memory

yang berurutan.

a b

c d e

c

a

e

d

b

Array representation

(7)

Array VS Linked List

Mengizinkan operasi penambahan atau

penghapusan elemen ditengah-tengah koleksi

dengan hanya membutuhkan jumlah

perpindahan elemen yang konstan.

Bandingkan dengan array. Berapa banyak elemen

(8)

Linked List

Linked list dibedakan menjadi 2 :

Single linked list

(9)

Gambaran Struktur Node

null

Link atau pointer

data

null

null

(10)

10

Single Linked List

Single : artinya pointer-nya hanya satu

buah dan satu arah, yaitu menunjuk ke

node sesudahnya.

Node terakhir akan menunjuk ke NULL

yang akan digunakan sebagai kondisi

berhenti pada saat pembacaan isi

linked list.

ilustrasi single linked list yang memiliki

(11)

Ilustrasi Single Linked List

Ilustrasi single linked list pada memory :

Node e

tidak menunjuk ke node manapun sehingga

pointer dari node e adalah NULL. Dapat disimpulkan

bahwa node ini adalah node yang paling belakang (node

ekor).

c

a

e

d

b

(12)

Ilustrasi Single Linked List

Ilustrasi single linked list pada memory :

Karena node tidak ditunjuk oleh node manapun maka

node ini adalah node yang paling depan (node kepala).

Kepala

(13)

Ilustrasi Single Linked List

Linked list yang memiliki 4 node, dimana

node terakhir menunjuk ke NULL.

A0 A1 A2 A3

(14)

“Single” Representation

Penjelasan:

Pembuatan class bernama Node yang berisi 2

field/variabel, yaitu

data

bertipe Object dan

pointer

yang

bertipe class Node.

Field data

: digunakan untuk menyimpan data/nilai pada

linked list.

Field pointer

: digunakan untuk menyimpan

alamat node berikutnya.

class Node

{

Object data;

Node pointer;

}

pointer data

(15)

Pembentukan Obyek Node

Deklarasi atau pembentukan obyek Node

menggunakan perintah

new

.

Bentuknya adalah :

(16)

Contoh program

public class LinkedList1 {

public static void main(String[] args)

{

Node head = new Node();

}

}

pointer data

Ilustrasi :

(17)

Pengaksesan Field pada Node

Untuk mengakses field dari node

menggunakan object node kemudian

diikuti dengan tanda . (titik)

Contoh :

Mengakses data dari head perintahnya :

head.data;

Mengakses pointer dari head perintahnya :

(18)

Contoh program

public class LinkedList1 {

public static void main(String[] args)

{

Node head = new Node();

System.out.println(“data : " + head.data);

System.out.println("pointer: " + head.pointer);

}

}

Output :

null null

Ilustrasi :

(19)

Pengisian Data pada Field

Untuk mengisikan data pada field

digunakan operator assigment (=).

Contoh :

memberikan data “A” pada head

(20)

Contoh program

public class LinkedList1 {

public static void main(String[] args)

{

Node head= new Node();

head.data = "A";

System.out.println(“data : " + head.data);

System.out.println("pointer: " + head.pointer);

}

}

Output :

null A

Ilustrasi :

(21)

Pointer Head

Untuk mengingat node yg paling depan

(node kepala) digunakan sebuah pointer

yang akan menyimpan alamat dari node

depan.

Pointer ini biasanya diberi nama

head

.

(22)

Pointer Tail

Untuk mengingat node yg paling belakang

(node ekor) digunakan sebuah pointer

yang akan menyimpan alamat dari node

belakang.

Pointer ini biasanya diberi nama

tail

.

(23)

Contoh

Linked list yang memiliki 4 node :

A0 A1 A2 A3

(24)

Operasi Linked List

1. Inisialisasi

2. isEmpty

3. size

4. Penambahan

5. Penghapusan

6. Penyisipan

7. Pencarian

(25)

Class Node

public class Node {

Object data;

Node pointer;

Node() { }

Node(Object data)

{

this.data = data;

}

Node(Object data, Node pointer)

{

this.data = data;

(26)

(1) inisialisasi

Proses ini digunakan untuk mendeklarasi

sekaligus memberikan nilai awal (inisialisasi)

pada pointer head dan tail.

Nilai awal kedua pointer tersebut adalah NULL.

Yang menandakan bahwa linked list dalam

kondisi kosong (belum ada node yang

terbentuk).

Node head,tail;

void inisialisasi()

{

(27)

(2)isEmpty

Digunakan untuk mengetahui linked

dalam kondisi kosong.

Kondisi kosong : jika size = 0 atau jika

head=tail=null.

boolean isEmpty()

{

(28)

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

{

(29)

(4) Penambahan

Dibedakan menjadi :

1. Penambahan dari depan

2. Penambahan dari belakang

(30)

Penambahan dari Depan

Jika kondisi awal node kosong maka head dan

tail akan sama-sama menunjuk ke node input.

Jika pada linked list telah ada node, maka head

akan menunjuk ke node input (hanya head yang

bergerak).

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

input.pointer = head; head = input;

(31)

Ilustrasi : addFirst(x)

Menambahkan

X

pada lokasi paling depan.

a

b

c

d

head

x

b

head

c

d

a

x

Kondisi awal pada linked list :

Setelah penambahan node x didepan:

(32)

Penambahan dari Belakang

Jika kondisi awal node kosong maka head dan

tail akan sama-sama menunjuk ke node input.

Jika pada linked list telah ada node, maka tail

akan menunjuk ke node input (hanya tail yang

bergerak).

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

head = input; tail = input; }

else {

tail.pointer = input; tail = input;

(33)

Ilustrasi : addLast(x)

menambahkan

X

pada akhir list :

a

b

c

tail

d

x

a

b

c

d

tail

x

Node input

Kondisi awal pada linked list :

(34)

Contoh program

public class TestLinkedList {

public static void main(String[] args) {

LinkedList1 list = new LinkedList1(); System.out.println("head : " + list.head); System.out.println("tail : " + list.tail);

list.addFirst(new Node());

System.out.println("head : " + list.head); System.out.println("tail : " + list.tail);

list.addFirst(new Node());

System.out.println("head : " + list.head); System.out.println("tail : " + list.tail);

list.addLast(new Node());

System.out.println("head : " + list.head); System.out.println("tail : " + list.tail);

(35)

output

head : null tail : null

(36)

Penambahan setelah Node tertentu

Dilakukan pencarian node yang memiliki data

yang sama dengan key.

void insertAfter(Object key,Node input){ Node temp = head;

do{

if(temp.data==key){

input.pointer = temp.pointer; temp.pointer = input;

size++;

System.out.println("Insert data is succeed.");

break; }

(37)

Ilustrasi : Insert After(a)

Menyisipkan

X

pada lokasi setelah

temp

.

a

b

c

d

temp

a

b

x

temp

(38)

Penambahan sebelum Node

tertentu

void insertBefore(Object key,Node input){ Node temp = head;

while (temp != null){

if ((temp.data == key)&&(temp == head)) {

this.addFirst(input);

System.out.println("Insert data is succeed.");

break; }

else if (temp.pointer.data == key) { input.pointer = temp.pointer; temp.pointer = input;

System.out.println("Insert data is succeed.");

break; }

temp = temp.pointer; }

(39)

(5) Penghapusan

Dibedakan menjadi :

1. Hapus node depan

(40)

Hapus node depan

void removeFirst(){

Node temp = head; if (!isEmpty()){

if (head == tail)

head = tail = null; else

{

temp = temp.pointer; head = temp;

temp = null; } size--;

} else

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

(41)

Hapus node belakang

void removeLast(){

Node temp = head; if (!isEmpty()){

if (tail == head){ head = tail = null; }

else {

while (temp.pointer != tail){ temp = temp.pointer;

}

temp.pointer = null; tail = temp;

temp = null; } size--;

}

(42)

Hapus node tertentu

void remove(Object key){ Node temp = head; if (!isEmpty()){

while (temp != null){

if (temp.pointer.data == key){

temp.pointer = temp.pointer.pointer; if(temp.pointer == null)

tail=temp; break;

}

else if ((temp.data == key)&&(temp == head)){ this.removeFirst();

break; }

temp = temp.pointer; }

} else

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

(43)

Linked Lists: menghapus elemen X

Proses menghapus dilakukan dengan mengabaikan elemen

yang hendak dihapus dengan cara melewati pointer

(

reference

) dari elemen tersebut langsung pada elemen

selanjutnya.

Elemen

x

dihapus dengan meng-assign field

next

pada

elemen

a

dengan alamat

b

.

a

x

b

temp

a

b

temp

a

x

b

temp

(44)

Langkah-langkah menghapus

elemen

Tidak ada elemen lain yang menyimpan alamat

node

x.

Node

x tidak bisa diakses lagi.

Java Garbage Collector

akan membersihkan alokasi

memory yang tidak dipakai lagi atau tidak bisa diakses.

Dengan kata lain,

menghapus node x.

a

x

b

(45)

Pengaksesan

Digunakan untuk mencetak data seluruh

node mulai dari yang paling depan sampai

ketemu NULL.

public void print()

{

Node p = head;

while (p != null) {

System.out.println (p.data);

p = p.pointer;

(46)

Operasi Linked List dengan

Index

1. Pengaksesan data node

2. Penambahan data

(47)

Method checkIndex(int index)

void checkIndex(int index)

{

if (index < 0 || index >= size)

(48)

Method get(int index)

public Object get(int index)

{

checkIndex(index);

Node currentNode = head;

for (int i = 0; i < index; i++)

currentNode = currentNode.pointer;

(49)

Method indexOf(Object theElement)

public int indexOf(Object theElement) {

// search the chain for theElement Node currentNode = head;

int index = 0; // index of currentNode

while (currentNode != null && !currentNode.data.equals(theElement)) {

// move to next node

currentNode = currentNode.pointer; index++;

}

// make sure we found matching element if (currentNode == null)

return -1; else

(50)

Method remove(int index)

public Object remove(int index)

{

checkIndex(index);

Object removedElement;

if (index == 0) // remove first node {

removedElement = head.data; head = head.pointer;

} else

{ // use q to get to predecessor of desired node Node q = head;

for (int i = 0; i < index - 1; i++) q = q.pointer;

removedElement = q.pointer.data;

q.pointer = q.pointer.pointer; // remove desired node tail=q;

}

size--;

(51)

Method add(int index,Object theElement)

public void add(int index, Object theElement) {

if (index < 0 || index > size) // invalid list position

throw new IndexOutOfBoundsException ("index = " + index + " size = " + size);

if (index == 0) // insert at front

head = new Node(theElement, head); else

{ // find predecessor of new element Node p = head;

for (int i = 0; i < index - 1; i++) p = p.pointer;

// insert after p

p.pointer = new Node(theElement, p.pointer); }

(52)

Latihan

1. Buatlah program dari 4 node berikut dengan kondisi

awal linked list kosong:

Tambahkan node baru dengan data 500 dari belakang.

Tambahkan node baru dengan data 50 dari depan.

Tambahkan node dengan data 250 setelah node 200.

Hapus node depan. Selanjutnya hapus node belakang.

Selanjutnya hapus node yg memiliki data 300.

Akses semua data dari seluruh node tersebut dari node

yg paling depan ke belakang.

(53)

Latihan

2. Buatlah method untuk mengakses semua

data pada single linked list.

(54)

54

Sumber

Arna Fariza, “Algoritma Struktur Data :

Referensi

Dokumen terkait

Telah diadakan Pemeriksaan Barang sesuai dengan lampiran kontrak kepada Sekretariat Dewan Perwakilan Rakyat Daerah Kabupaten Puncak dan telah diterima dalam keadaan 100% baru, baik

Para Pihak wajib menentukan bidang-bidang kerjasama khusus dan kegiatan terkait berdasarkan kesepakatan bersama. Ketentuan rinci yang berkaitan dengan bentuk, metode,

 Secara Nasional produksi padi Provinsi Sulawesi Tengah tahun 2015 mempunyai kontribusi sebesar 1,35 persen dari total produksi padi nasional sebesar 75,36 juta ton

Gambar 4.2 Hubungan Kuat Tekan Bata Beton Ringan pada Umur 28 Hari dengan Penambahan Zat Kapur pada Tiap Tipe Bata Beton Ringan

Namun secara umum apabila efektivitas kinerja tersebut dikaitkan dengan kegiatan pelayanan jasa, suatu kinerja layanan akan dikatakan efektif jika pelanggan merasa puas

Pembangunan infrastruktur bersifat fisik dan memberikan akses terhadap pelayanan dasar maupun pelayanan sosial serta ekonomi bagi masyarakat pedesaan. Pembangunan

Terdapat tempat yang disediakan pada satu area memori tertentu untuk menyimpan data dikenal dengan sebutan node atau simpul.Setiap node memiliki pointer yang menunjuk ke

 DLLNC adalah sebuah Linked List yang terdiri dari dua arah pointer, dengan node yang saling terhubung, namun kedua pointernya menunjuk ke NULL.  Setiap node pada