Struktur Data List Linear : Linked List (Single Linkedlist)

Slides:



Advertisements
Presentasi serupa
Double Linked List.
Advertisements

Single linked list.
STRUKTUR DATA (7) single linked list circular
STRUKTUR DATA (8.1) double linked list non circular
LINKED LIST.
LINKED LIST.
Pertemuan 2 STRUKTUR DATA LINKED LIST
Mata Kuliah : Struktur Data Pertemuan : V
LINKED LIST Single Linked List.
LINKED LIST.
LINK LIST Latifah Rifani.
Algoritma dan Struktur Data Daniel Riano Kaparang.
SENARAI BERANTAI TUNGGAL
Java array.
Single Linked List.
Implementasi Binary Tree
Queue.
Algoritma dan Struktur Data
STACK.
Queue.
STRUKTUR DATA (6) single linked list non circular
Algoritma & Struktur Data
Pemrograman Dasar Java
Single Linked List Yuliana Setiowati, S.Kom.
Linear List Teknik Informatika Universitas Muhammadiyah Malang SP Algoritma & Struktur Data.
Algoritma & Struktur Data Linked List Evangs Mailoa.
Diberikan pada Kuliah Sela Teknik Informatika - Universitas Muhammadiyah Malang Tahun 2011.
Struktur Data List Linear : Linked List (Double Linkedlist)
Linear Data Structures (Linked List). Node Link atau pointer data field.
Implementasi ADT: Linked - List
Algoritma dan Struktur Data
Linear Data Structures (Queue)
Linear Data Structures (Stack)
Pertemuan ketujuh Struktur data st3telkom.ac.id
Linear List.
Pemrograman Berorientasi Obyek Lanjut (IT251)
LINKED LIST.
Matakuliah : T0534/Struktur Data Tahun : 2005 Versi : September 2005
Struktur Data (Data Structure) – IS 2313
ANTRIAN Farid Wajdi Yusuf Pendidikan Teknik Informatika dan Komputer
Apakah Stack itu ?. Apakah Stack itu ? Pengertian STACK Secara sederhana diartikan dengan : sebagai tumpukan dari benda sekumpulan data yang seolah-olah.
Pertemuan 7 stack jual [Valdo] Lunatik Chubby Stylus.
Algoritma & Pemrograman 1
STACK.
Algoritma dan Struktur Data
Algoritma dan Struktur Data
Algoritma dan Struktur Data
Pertemuan Linked list jual [Valdo] Lunatik Chubby Stylus.
ADT DINAMIS : SINGLY LINKED LIST DAN DOUBLE LINKED LIST
SENARAI BERANTAI TUNGGAL
Double linked list non circular
Struktur Data Linked List
STRUKTUR DATA (2) Single Linked List
STRUKTUR DATA Linked List Oleh : Yuli Praptomo PHS, S.Kom.
STRUKTUR DATA Linked List
Single Linked List.
Informatique Engineering Ahmad Dahlan University May 17, 2004
Linear Data Structures (Stack)
Algoritma dan Struktur Data
STRUKTUR DATA – Pertemuan 6
Linear Data Structures (Array)
MATAKULIAH : STRUKTUR DATA
Algoritme dan Stuktur Data
STRUKTUR DATA (7) single linked list circular
Single Linked List Circular (SLLC)
STRUKTUR DATA (8.2) double linked list circular
Double Linked List.
Variable Static & Linked List
Algoritma dan Struktur Data
SINGLE LINKED LIST (SLL)
Transcript presentasi:

Struktur Data List Linear : Linked List (Single Linkedlist)

Tujuan Instruksional Mahasiswa mampu : Memahami struktur data linked list Memahami cara pengoperasian struktur data linked list Mengimplementasikan struktur data linked list

Topik Bentuk dasar linked list deklarasi class linked list Tambah node Hapus node Penyisipan node ADT Linked List

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 alamat tertentu.

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. Pointer disebut juga sebagai link.

Array VS Linked List

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. con•tig•u•ous adj. 1 in physical contact; touching along all or most of one side 2 near, next, or adjacent SYN. adjacent a b c d e Array representation c a e d b Linked list representation

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 yang harus dipindahkan bila akan menyisipi elemen ditengah-tengah array?

Linked List Linked list dibedakan menjadi 2 : Single linked list Double linked list

Gambaran Struktur Node Single linked-list Double linked-list null null Link atau pointer data

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 4 node :

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 Ekor

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). c a e d b Kepala

Ilustrasi Single Linked List Linked list yang memiliki 4 node, dimana node terakhir menunjuk ke NULL. A0 A1 A2 A3 Kepala Ekor

“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; } Ilustrasi : pointer data

Pembentukan Obyek Node Deklarasi atau pembentukan obyek Node menggunakan perintah new. Bentuknya adalah : new Node();

Contoh program public class LinkedList1 { public static void main(String[] args) { Node head = new Node(); } Ilustrasi : pointer data head

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 : head.pointer;

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); } Ilustrasi : null head Output :

Pengisian Data pada Field Untuk mengisikan data pada field digunakan operator assigment (=). Contoh : memberikan data “A” pada head perintahnya adalah : head.data = “A”;

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); } Ilustrasi : null A head Output :

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. head head

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. tail tail

Contoh Linked list yang memiliki 4 node : A0 A1 A2 A3 head tail

Operasi Linked List Inisialisasi isEmpty size Penambahan Penghapusan Penyisipan Pencarian Pengaksesan

Class Node public class Node { Object data; Node pointer; Node() { } Constructor 1 public class Node { Object data; Node pointer; Node() { } Node(Object data) { this.data = data; } Node(Object data, Node pointer) this.pointer = pointer; null Constructor 2 null element Constructor 3 next element

(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() { head=tail=null; }

(2)isEmpty Digunakan untuk mengetahui linked dalam kondisi kosong. Kondisi kosong : jika size = 0 atau jika head=tail=null. boolean isEmpty() { return size==0; }

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

(4) Penambahan Dibedakan menjadi : Penambahan dari depan Penambahan dari belakang Penambahan setelah node tertentu Penambahan sebelum node tertentu

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

Ilustrasi : addFirst(x) Node input Menambahkan X pada lokasi paling depan. x Kondisi awal pada linked list : a b c d head Setelah penambahan node x didepan: x a b c d head 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; } size++;

Ilustrasi : addLast(x) Node input menambahkan X pada akhir list : x Kondisi awal pada linked list : a b c d tail Setelah penambahan node x dibelakang : a b c d x tail 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()); list.addLast(new Node()); }

output head : null tail : null head : Node@19821f tail : Node@19821f head : Node@addbf1 tail : Node@42e816

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; } temp = temp.pointer; }while (temp!=null);

Ilustrasi : Insert After(a) b c d temp Menyisipkan X pada lokasi setelah temp. a x b c d 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; temp = temp.pointer;

(5) Penghapusan Dibedakan menjadi : Hapus node depan Hapus node belakang Hapus node tertentu

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--; } System.out.println("Data is empty!");

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--; else System.out.println("Data is empty!");

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(); temp = temp.pointer; else System.out.println("Data is empty!"); size--;

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 x b temp Hasil akhir : a b temp 44

Langkah-langkah menghapus elemen x b temp 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. 45

Pengaksesan Digunakan untuk mencetak data seluruh node mulai dari yang paling depan sampai ketemu NULL. public void print() { Node p = head.pointer; while (p != null) { System.out.println (p.data); p = p.pointer; }

Operasi Linked List dengan Index Pengaksesan data node Penambahan data Penghapusan data Pengaksesan index

Method checkIndex(int index) void checkIndex(int index) { if (index < 0 || index >= size) throw new IndexOutOfBoundsException ("index = " + index + " size = " + size); }

Method get(int index) public Object get(int index) { checkIndex(index); Node currentNode = head; for (int i = 0; i < index; i++) currentNode = currentNode.pointer; return currentNode.data; }

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 return index;

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--; return removedElement;

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); } size++;

Latihan 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. 100 200 300 400

Latihan Buatlah method untuk mengakses semua data pada single linked list. Buatlah method untuk replace data pada single linked list. Gunakan pengaksesan index pada node.

Sumber Arna Fariza, “Algoritma Struktur Data : Double Linked List”, PENS-ITS, Surabaya