tugas kelompok mi d3_sore
DESCRIPTION
TRANSCRIPT
![Page 1: Tugas kelompok mi d3_sore](https://reader036.vdocument.in/reader036/viewer/2022081518/54774d89b4af9f38718b45f7/html5/thumbnails/1.jpg)
Nama kelompok
1) Victor Sitio : 113209086
2) Mei Gom-Gom :113209048
3) Nita Setiawati :113209054
4) Windy Aryane :113209093
5) Rahmat safei : 113209098
6) Dwi Susanto : 113209022
MANAGEMENT INFORMATIKAD3
KELAS SORE
![Page 2: Tugas kelompok mi d3_sore](https://reader036.vdocument.in/reader036/viewer/2022081518/54774d89b4af9f38718b45f7/html5/thumbnails/2.jpg)
List Linear : Linked List (Single Linkedlist)
Management InformatikaPoliteknik Perdana Mandiri
2012-2013
Pemrogramman Terstruktur
![Page 3: Tugas kelompok mi d3_sore](https://reader036.vdocument.in/reader036/viewer/2022081518/54774d89b4af9f38718b45f7/html5/thumbnails/3.jpg)
Mahasiswa mampu :Memahami struktur data linked listMemahami cara pengoperasian struktur data
linked listMengimplementasikan struktur data linked list
![Page 4: Tugas kelompok mi d3_sore](https://reader036.vdocument.in/reader036/viewer/2022081518/54774d89b4af9f38718b45f7/html5/thumbnails/4.jpg)
Bentuk dasar linked listdeklarasi class linked listTambah nodeHapus nodePenyisipan nodeADT Linked List
![Page 5: Tugas kelompok mi d3_sore](https://reader036.vdocument.in/reader036/viewer/2022081518/54774d89b4af9f38718b45f7/html5/thumbnails/5.jpg)
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.
![Page 6: Tugas kelompok mi d3_sore](https://reader036.vdocument.in/reader036/viewer/2022081518/54774d89b4af9f38718b45f7/html5/thumbnails/6.jpg)
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.
![Page 7: Tugas kelompok mi d3_sore](https://reader036.vdocument.in/reader036/viewer/2022081518/54774d89b4af9f38718b45f7/html5/thumbnails/7.jpg)
7
![Page 8: Tugas kelompok mi d3_sore](https://reader036.vdocument.in/reader036/viewer/2022081518/54774d89b4af9f38718b45f7/html5/thumbnails/8.jpg)
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
Linked list representation
![Page 9: Tugas kelompok mi d3_sore](https://reader036.vdocument.in/reader036/viewer/2022081518/54774d89b4af9f38718b45f7/html5/thumbnails/9.jpg)
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?
![Page 10: Tugas kelompok mi d3_sore](https://reader036.vdocument.in/reader036/viewer/2022081518/54774d89b4af9f38718b45f7/html5/thumbnails/10.jpg)
Linked list dibedakan menjadi 2 :Single linked listDouble linked list
![Page 11: Tugas kelompok mi d3_sore](https://reader036.vdocument.in/reader036/viewer/2022081518/54774d89b4af9f38718b45f7/html5/thumbnails/11.jpg)
null
Link atau pointer
data
null
null
Single linked-list Double linked-list
![Page 12: Tugas kelompok mi d3_sore](https://reader036.vdocument.in/reader036/viewer/2022081518/54774d89b4af9f38718b45f7/html5/thumbnails/12.jpg)
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 :
12
![Page 13: Tugas kelompok mi d3_sore](https://reader036.vdocument.in/reader036/viewer/2022081518/54774d89b4af9f38718b45f7/html5/thumbnails/13.jpg)
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
![Page 14: Tugas kelompok mi d3_sore](https://reader036.vdocument.in/reader036/viewer/2022081518/54774d89b4af9f38718b45f7/html5/thumbnails/14.jpg)
Ilustrasi single linked list pada memory :
Karena node tidak ditunjuk oleh node manapun maka node ini adalah node yang paling depan (node kepala).
Kepala
c a e d b
![Page 15: Tugas kelompok mi d3_sore](https://reader036.vdocument.in/reader036/viewer/2022081518/54774d89b4af9f38718b45f7/html5/thumbnails/15.jpg)
Linked list yang memiliki 4 node, dimana node terakhir menunjuk ke NULL.
A0 A1 A2 A3
Kepala Ekor
![Page 16: Tugas kelompok mi d3_sore](https://reader036.vdocument.in/reader036/viewer/2022081518/54774d89b4af9f38718b45f7/html5/thumbnails/16.jpg)
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
Ilustrasi :
![Page 17: Tugas kelompok mi d3_sore](https://reader036.vdocument.in/reader036/viewer/2022081518/54774d89b4af9f38718b45f7/html5/thumbnails/17.jpg)
Deklarasi atau pembentukan obyek Node menggunakan perintah new.
Bentuknya adalah :new Node();
![Page 18: Tugas kelompok mi d3_sore](https://reader036.vdocument.in/reader036/viewer/2022081518/54774d89b4af9f38718b45f7/html5/thumbnails/18.jpg)
public class LinkedList1 { public static void main(String[] args) { Node head = new Node(); }}
pointer
data
Ilustrasi :
head
![Page 19: Tugas kelompok mi d3_sore](https://reader036.vdocument.in/reader036/viewer/2022081518/54774d89b4af9f38718b45f7/html5/thumbnails/19.jpg)
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;
![Page 20: Tugas kelompok mi d3_sore](https://reader036.vdocument.in/reader036/viewer/2022081518/54774d89b4af9f38718b45f7/html5/thumbnails/20.jpg)
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 :
head
![Page 21: Tugas kelompok mi d3_sore](https://reader036.vdocument.in/reader036/viewer/2022081518/54774d89b4af9f38718b45f7/html5/thumbnails/21.jpg)
Untuk mengisikan data pada field digunakan operator assigment (=).
Contoh :memberikan data “A” pada head perintahnya adalah : head.data = “A”;
![Page 22: Tugas kelompok mi d3_sore](https://reader036.vdocument.in/reader036/viewer/2022081518/54774d89b4af9f38718b45f7/html5/thumbnails/22.jpg)
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 :
head
![Page 23: Tugas kelompok mi d3_sore](https://reader036.vdocument.in/reader036/viewer/2022081518/54774d89b4af9f38718b45f7/html5/thumbnails/23.jpg)
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
![Page 24: Tugas kelompok mi d3_sore](https://reader036.vdocument.in/reader036/viewer/2022081518/54774d89b4af9f38718b45f7/html5/thumbnails/24.jpg)
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
![Page 25: Tugas kelompok mi d3_sore](https://reader036.vdocument.in/reader036/viewer/2022081518/54774d89b4af9f38718b45f7/html5/thumbnails/25.jpg)
Linked list yang memiliki 4 node :
A0 A1 A2 A3
head tail
![Page 26: Tugas kelompok mi d3_sore](https://reader036.vdocument.in/reader036/viewer/2022081518/54774d89b4af9f38718b45f7/html5/thumbnails/26.jpg)
1. Inisialisasi2. isEmpty3. size4. Penambahan5. Penghapusan6. Penyisipan7. Pencarian8. Pengaksesan
![Page 27: Tugas kelompok mi d3_sore](https://reader036.vdocument.in/reader036/viewer/2022081518/54774d89b4af9f38718b45f7/html5/thumbnails/27.jpg)
public class Node { Object data; Node pointer; Node() { } Node(Object data) { this.data = data; } Node(Object data, Node pointer) { this.data = data; this.pointer = pointer; }}
null
null
null
element
next
element
Constructor 1
Constructor 2
Constructor 3
![Page 28: Tugas kelompok mi d3_sore](https://reader036.vdocument.in/reader036/viewer/2022081518/54774d89b4af9f38718b45f7/html5/thumbnails/28.jpg)
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; }
![Page 29: Tugas kelompok mi d3_sore](https://reader036.vdocument.in/reader036/viewer/2022081518/54774d89b4af9f38718b45f7/html5/thumbnails/29.jpg)
Digunakan untuk mengetahui linked dalam kondisi kosong.
Kondisi kosong : jika size = 0 atau jika head=tail=null.
boolean isEmpty() { return size==0; }
![Page 30: Tugas kelompok mi d3_sore](https://reader036.vdocument.in/reader036/viewer/2022081518/54774d89b4af9f38718b45f7/html5/thumbnails/30.jpg)
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; }
![Page 31: Tugas kelompok mi d3_sore](https://reader036.vdocument.in/reader036/viewer/2022081518/54774d89b4af9f38718b45f7/html5/thumbnails/31.jpg)
Dibedakan menjadi :1.Penambahan dari depan2.Penambahan dari belakang3.Penambahan setelah node tertentu4.Penambahan sebelum node tertentu
![Page 32: Tugas kelompok mi d3_sore](https://reader036.vdocument.in/reader036/viewer/2022081518/54774d89b4af9f38718b45f7/html5/thumbnails/32.jpg)
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++; }
![Page 33: Tugas kelompok mi d3_sore](https://reader036.vdocument.in/reader036/viewer/2022081518/54774d89b4af9f38718b45f7/html5/thumbnails/33.jpg)
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:
Node input
![Page 34: Tugas kelompok mi d3_sore](https://reader036.vdocument.in/reader036/viewer/2022081518/54774d89b4af9f38718b45f7/html5/thumbnails/34.jpg)
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; } size++; }
![Page 35: Tugas kelompok mi d3_sore](https://reader036.vdocument.in/reader036/viewer/2022081518/54774d89b4af9f38718b45f7/html5/thumbnails/35.jpg)
menambahkan X pada akhir list :
a b c
tail
d x
a b c d
tail
x
Node input
Kondisi awal pada linked list :
Setelah penambahan node x dibelakang :
![Page 36: Tugas kelompok mi d3_sore](https://reader036.vdocument.in/reader036/viewer/2022081518/54774d89b4af9f38718b45f7/html5/thumbnails/36.jpg)
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); }}
![Page 37: Tugas kelompok mi d3_sore](https://reader036.vdocument.in/reader036/viewer/2022081518/54774d89b4af9f38718b45f7/html5/thumbnails/37.jpg)
head : nulltail : nullhead : Node@19821ftail : Node@19821fhead : Node@addbf1tail : Node@19821fhead : Node@addbf1tail : Node@42e816
![Page 38: Tugas kelompok mi d3_sore](https://reader036.vdocument.in/reader036/viewer/2022081518/54774d89b4af9f38718b45f7/html5/thumbnails/38.jpg)
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); }
![Page 39: Tugas kelompok mi d3_sore](https://reader036.vdocument.in/reader036/viewer/2022081518/54774d89b4af9f38718b45f7/html5/thumbnails/39.jpg)
Menyisipkan X pada lokasi setelah temp.
a b c d
temp
a b
xtemp
c d x
![Page 40: Tugas kelompok mi d3_sore](https://reader036.vdocument.in/reader036/viewer/2022081518/54774d89b4af9f38718b45f7/html5/thumbnails/40.jpg)
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; } }
![Page 41: Tugas kelompok mi d3_sore](https://reader036.vdocument.in/reader036/viewer/2022081518/54774d89b4af9f38718b45f7/html5/thumbnails/41.jpg)
Dibedakan menjadi :1.Hapus node depan2.Hapus node belakang3.Hapus node tertentu
![Page 42: Tugas kelompok mi d3_sore](https://reader036.vdocument.in/reader036/viewer/2022081518/54774d89b4af9f38718b45f7/html5/thumbnails/42.jpg)
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!"); }
![Page 43: Tugas kelompok mi d3_sore](https://reader036.vdocument.in/reader036/viewer/2022081518/54774d89b4af9f38718b45f7/html5/thumbnails/43.jpg)
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!");}
![Page 44: Tugas kelompok mi d3_sore](https://reader036.vdocument.in/reader036/viewer/2022081518/54774d89b4af9f38718b45f7/html5/thumbnails/44.jpg)
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--; }
![Page 45: Tugas kelompok mi d3_sore](https://reader036.vdocument.in/reader036/viewer/2022081518/54774d89b4af9f38718b45f7/html5/thumbnails/45.jpg)
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 b x
temp
a b
temp
a b x
temp
Hasil akhir :
![Page 46: Tugas kelompok mi d3_sore](https://reader036.vdocument.in/reader036/viewer/2022081518/54774d89b4af9f38718b45f7/html5/thumbnails/46.jpg)
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 b x
temp
![Page 47: Tugas kelompok mi d3_sore](https://reader036.vdocument.in/reader036/viewer/2022081518/54774d89b4af9f38718b45f7/html5/thumbnails/47.jpg)
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; } }
![Page 48: Tugas kelompok mi d3_sore](https://reader036.vdocument.in/reader036/viewer/2022081518/54774d89b4af9f38718b45f7/html5/thumbnails/48.jpg)
1. Pengaksesan data node2. Penambahan data3. Penghapusan data4. Pengaksesan index
![Page 49: Tugas kelompok mi d3_sore](https://reader036.vdocument.in/reader036/viewer/2022081518/54774d89b4af9f38718b45f7/html5/thumbnails/49.jpg)
void checkIndex(int index) { if (index < 0 || index >= size) throw new IndexOutOfBoundsException ("index = " + index + " size = " + size); }
![Page 50: Tugas kelompok mi d3_sore](https://reader036.vdocument.in/reader036/viewer/2022081518/54774d89b4af9f38718b45f7/html5/thumbnails/50.jpg)
public Object get(int index) { checkIndex(index); Node currentNode = head; for (int i = 0; i < index; i++) currentNode = currentNode.pointer; return currentNode.data; }
![Page 51: Tugas kelompok mi d3_sore](https://reader036.vdocument.in/reader036/viewer/2022081518/54774d89b4af9f38718b45f7/html5/thumbnails/51.jpg)
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; }
![Page 52: Tugas kelompok mi d3_sore](https://reader036.vdocument.in/reader036/viewer/2022081518/54774d89b4af9f38718b45f7/html5/thumbnails/52.jpg)
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; }
![Page 53: Tugas kelompok mi d3_sore](https://reader036.vdocument.in/reader036/viewer/2022081518/54774d89b4af9f38718b45f7/html5/thumbnails/53.jpg)
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++; }
![Page 54: Tugas kelompok mi d3_sore](https://reader036.vdocument.in/reader036/viewer/2022081518/54774d89b4af9f38718b45f7/html5/thumbnails/54.jpg)
Arna Fariza, “Algoritma Struktur Data : Double Linked List”, PENS-ITS, Surabaya
54