SlideShare uma empresa Scribd logo
1 de 54
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 INFORMATIKA
D3
KELAS SORE
List Linear :
Linked List (Single Linkedlist)
Management Informatika
Politeknik Perdana Mandiri
2012-2013
Pemrogramman
Terstruktur
Mahasiswa mampu :
Memahami struktur data linked list
Memahami cara pengoperasian struktur data linked list
Mengimplementasikan struktur data linked list
Bentuk dasar linked list
deklarasi class linked list
Tambah node
Hapus node
Penyisipan node
ADT Linked List
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.
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.
7
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
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 dibedakan menjadi 2 :
Single linked list
Double linked list
null
Link atau pointer
data
null
null
Single linked-list Double 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 :
12
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 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
Linked list yang memiliki 4 node, dimana node
terakhir menunjuk ke NULL.
A0 A1 A2 A3
Kepala Ekor
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 :
Deklarasi atau pembentukan obyek Node
menggunakan perintah new.
Bentuknya adalah :
new Node();
public class LinkedList1 {
public static void main(String[] args)
{
Node head = new Node();
}
}
pointer
data
Ilustrasi :
head
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;
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
Untuk mengisikan data pada field digunakan operator
assigment (=).
Contoh :
memberikan data “A” pada head perintahnya adalah :
head.data = “A”;
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
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
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
Linked list yang memiliki 4 node :
A0 A1 A2 A3
head tail
1. Inisialisasi
2. isEmpty
3. size
4. Penambahan
5. Penghapusan
6. Penyisipan
7. Pencarian
8. Pengaksesan
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
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;
}
Digunakan untuk mengetahui linked dalam kondisi
kosong.
Kondisi kosong : jika size = 0 atau jika head=tail=null.
boolean isEmpty()
{
return size==0;
}
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;
}
Dibedakan menjadi :
1. Penambahan dari depan
2. Penambahan dari belakang
3. Penambahan setelah node tertentu
4. Penambahan sebelum node tertentu
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++;
}
 Menambahkan X pada lokasi paling depan.
a b c d
head
x b
head
c da
x
Kondisi awal pada linked list :
Setelah penambahan node x didepan:
Node input
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++;
}
 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 :
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);
}
}
head : null
tail : null
head : Node@19821f
tail : Node@19821f
head : Node@addbf1
tail : Node@19821f
head : Node@addbf1
tail : Node@42e816
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);
}
 Menyisipkan X pada lokasi setelah temp.
a b c d
temp
a b
xtemp
c dx
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;
}
}
Dibedakan menjadi :
1. Hapus node depan
2. Hapus node belakang
3. Hapus node tertentu
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!");
}
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!");
}
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--;
}
 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 bx
temp
a b
temp
a bx
temp
Hasil akhir :
 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 bx
temp
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;
}
}
1. Pengaksesan data node
2. Penambahan data
3. Penghapusan data
4. Pengaksesan index
void checkIndex(int index)
{
if (index < 0 || index >= size)
throw new IndexOutOfBoundsException
("index = " + index + " size = " + size);
}
public Object get(int index)
{
checkIndex(index);
Node currentNode = head;
for (int i = 0; i < index; i++)
currentNode = currentNode.pointer;
return currentNode.data;
}
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;
}
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;
}
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++;
}
Arna Fariza, “Algoritma Struktur Data : Double
Linked List”, PENS-ITS, Surabaya
54

Mais conteúdo relacionado

Mais procurados

Circular linked list
Circular linked listCircular linked list
Circular linked listLaxer Pratama
 
Bab 7 double_linked_list
Bab 7 double_linked_listBab 7 double_linked_list
Bab 7 double_linked_listarii_manroe
 
Laporan praktikum Algoritma dan Pemrograman pertemuan 13
Laporan praktikum Algoritma dan Pemrograman pertemuan 13Laporan praktikum Algoritma dan Pemrograman pertemuan 13
Laporan praktikum Algoritma dan Pemrograman pertemuan 13Ekha Cahya Nugraha
 
Pertemuan 6 Struktur Data, Algoritma dan Pemrograman
Pertemuan 6 Struktur Data, Algoritma dan PemrogramanPertemuan 6 Struktur Data, Algoritma dan Pemrograman
Pertemuan 6 Struktur Data, Algoritma dan PemrogramanPrasetyo Adi
 
Array searching sorting_pert_11,12,13,14,15
Array searching sorting_pert_11,12,13,14,15Array searching sorting_pert_11,12,13,14,15
Array searching sorting_pert_11,12,13,14,15doudomblogspot
 
5 6 single-linked_list
5 6 single-linked_list5 6 single-linked_list
5 6 single-linked_listWandi Parlente
 
Laporan praktikum Algoritma dan Pemrograman pertemuan 10
Laporan praktikum Algoritma dan Pemrograman pertemuan 10Laporan praktikum Algoritma dan Pemrograman pertemuan 10
Laporan praktikum Algoritma dan Pemrograman pertemuan 10Ekha Cahya Nugraha
 
9.double linked list circular
9.double linked list circular9.double linked list circular
9.double linked list circularHitesh Wagle
 
Laporan praktikum Algoritma dan Pemrograman pertemuan 11
Laporan praktikum Algoritma dan Pemrograman pertemuan 11Laporan praktikum Algoritma dan Pemrograman pertemuan 11
Laporan praktikum Algoritma dan Pemrograman pertemuan 11Ekha Cahya Nugraha
 
Laporan praktikum Algoritma dan Pemrograman pertemuan 12
Laporan praktikum Algoritma dan Pemrograman pertemuan 12Laporan praktikum Algoritma dan Pemrograman pertemuan 12
Laporan praktikum Algoritma dan Pemrograman pertemuan 12Ekha Cahya Nugraha
 

Mais procurados (20)

Modul 2
Modul 2Modul 2
Modul 2
 
Circular linked list
Circular linked listCircular linked list
Circular linked list
 
Bab 7 double_linked_list
Bab 7 double_linked_listBab 7 double_linked_list
Bab 7 double_linked_list
 
Double linked list
Double linked listDouble linked list
Double linked list
 
Tistrukdat8 1
Tistrukdat8 1Tistrukdat8 1
Tistrukdat8 1
 
circular linked list
circular linked listcircular linked list
circular linked list
 
Modul 3 strukdat
Modul 3 strukdatModul 3 strukdat
Modul 3 strukdat
 
Laporan praktikum Algoritma dan Pemrograman pertemuan 13
Laporan praktikum Algoritma dan Pemrograman pertemuan 13Laporan praktikum Algoritma dan Pemrograman pertemuan 13
Laporan praktikum Algoritma dan Pemrograman pertemuan 13
 
Pertemuan 6 Struktur Data, Algoritma dan Pemrograman
Pertemuan 6 Struktur Data, Algoritma dan PemrogramanPertemuan 6 Struktur Data, Algoritma dan Pemrograman
Pertemuan 6 Struktur Data, Algoritma dan Pemrograman
 
Array searching sorting_pert_11,12,13,14,15
Array searching sorting_pert_11,12,13,14,15Array searching sorting_pert_11,12,13,14,15
Array searching sorting_pert_11,12,13,14,15
 
5 6 single-linked_list
5 6 single-linked_list5 6 single-linked_list
5 6 single-linked_list
 
Laporan praktikum Algoritma dan Pemrograman pertemuan 10
Laporan praktikum Algoritma dan Pemrograman pertemuan 10Laporan praktikum Algoritma dan Pemrograman pertemuan 10
Laporan praktikum Algoritma dan Pemrograman pertemuan 10
 
Pertemuan V
Pertemuan VPertemuan V
Pertemuan V
 
Bab8.array
Bab8.array Bab8.array
Bab8.array
 
9.double linked list circular
9.double linked list circular9.double linked list circular
9.double linked list circular
 
11
1111
11
 
Laporan praktikum Algoritma dan Pemrograman pertemuan 11
Laporan praktikum Algoritma dan Pemrograman pertemuan 11Laporan praktikum Algoritma dan Pemrograman pertemuan 11
Laporan praktikum Algoritma dan Pemrograman pertemuan 11
 
Resume praktikum 5__linked_list
Resume praktikum 5__linked_listResume praktikum 5__linked_list
Resume praktikum 5__linked_list
 
Bab8.array
Bab8.array Bab8.array
Bab8.array
 
Laporan praktikum Algoritma dan Pemrograman pertemuan 12
Laporan praktikum Algoritma dan Pemrograman pertemuan 12Laporan praktikum Algoritma dan Pemrograman pertemuan 12
Laporan praktikum Algoritma dan Pemrograman pertemuan 12
 

Semelhante a Tugas kelompok mi d3_sore

Semelhante a Tugas kelompok mi d3_sore (20)

Stack with linked list(algodat)
Stack with linked list(algodat)Stack with linked list(algodat)
Stack with linked list(algodat)
 
Algorithms and Data Structures
 Algorithms and Data Structures Algorithms and Data Structures
Algorithms and Data Structures
 
Tistrukdat7
Tistrukdat7Tistrukdat7
Tistrukdat7
 
Linked list
Linked listLinked list
Linked list
 
Linkedlist
LinkedlistLinkedlist
Linkedlist
 
Pert.5 linked list
Pert.5 linked listPert.5 linked list
Pert.5 linked list
 
SINGLE_LINKED_LIST.pptx
SINGLE_LINKED_LIST.pptxSINGLE_LINKED_LIST.pptx
SINGLE_LINKED_LIST.pptx
 
Laporan Praktikum Struktur Data Modul 3
Laporan Praktikum Struktur Data Modul 3Laporan Praktikum Struktur Data Modul 3
Laporan Praktikum Struktur Data Modul 3
 
DOUBLE LINKED LIST..docx
DOUBLE LINKED LIST..docxDOUBLE LINKED LIST..docx
DOUBLE LINKED LIST..docx
 
Single Linked List - Insert .pptx
Single Linked List - Insert .pptxSingle Linked List - Insert .pptx
Single Linked List - Insert .pptx
 
Algoritma dan Struktur Data - List
Algoritma dan Struktur Data - ListAlgoritma dan Struktur Data - List
Algoritma dan Struktur Data - List
 
Algoritma dan Struktur Data - list
Algoritma dan Struktur Data - listAlgoritma dan Struktur Data - list
Algoritma dan Struktur Data - list
 
Laporan Resmi BAB 1 (Tree)
Laporan Resmi BAB 1 (Tree)Laporan Resmi BAB 1 (Tree)
Laporan Resmi BAB 1 (Tree)
 
Materi linked list dan bubble sort
Materi linked list dan bubble sortMateri linked list dan bubble sort
Materi linked list dan bubble sort
 
MAKALAH LINKED LIST DALAM BAHASA C.docx
MAKALAH LINKED LIST DALAM BAHASA C.docxMAKALAH LINKED LIST DALAM BAHASA C.docx
MAKALAH LINKED LIST DALAM BAHASA C.docx
 
Struktur data
Struktur dataStruktur data
Struktur data
 
Tistrukdat10
Tistrukdat10Tistrukdat10
Tistrukdat10
 
Queue
QueueQueue
Queue
 
Linked List.ppt
Linked List.pptLinked List.ppt
Linked List.ppt
 
Linked list
Linked listLinked list
Linked list
 

Tugas kelompok mi d3_sore

  • 1. 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 INFORMATIKA D3 KELAS SORE
  • 2. List Linear : Linked List (Single Linkedlist) Management Informatika Politeknik Perdana Mandiri 2012-2013 Pemrogramman Terstruktur
  • 3. Mahasiswa mampu : Memahami struktur data linked list Memahami cara pengoperasian struktur data linked list Mengimplementasikan struktur data linked list
  • 4. Bentuk dasar linked list deklarasi class linked list Tambah node Hapus node Penyisipan node ADT Linked List
  • 5. 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.
  • 6. 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.
  • 7. 7
  • 8. 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
  • 9. 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?
  • 10. Linked list dibedakan menjadi 2 : Single linked list Double linked list
  • 11. null Link atau pointer data null null Single linked-list Double linked-list
  • 12. 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
  • 13. 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
  • 14. 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
  • 15. Linked list yang memiliki 4 node, dimana node terakhir menunjuk ke NULL. A0 A1 A2 A3 Kepala Ekor
  • 16. 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 :
  • 17. Deklarasi atau pembentukan obyek Node menggunakan perintah new. Bentuknya adalah : new Node();
  • 18. public class LinkedList1 { public static void main(String[] args) { Node head = new Node(); } } pointer data Ilustrasi : head
  • 19. 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;
  • 20. 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
  • 21. Untuk mengisikan data pada field digunakan operator assigment (=). Contoh : memberikan data “A” pada head perintahnya adalah : head.data = “A”;
  • 22. 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
  • 23. 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
  • 24. 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
  • 25. Linked list yang memiliki 4 node : A0 A1 A2 A3 head tail
  • 26. 1. Inisialisasi 2. isEmpty 3. size 4. Penambahan 5. Penghapusan 6. Penyisipan 7. Pencarian 8. Pengaksesan
  • 27. 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
  • 28. 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; }
  • 29. Digunakan untuk mengetahui linked dalam kondisi kosong. Kondisi kosong : jika size = 0 atau jika head=tail=null. boolean isEmpty() { return size==0; }
  • 30. 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; }
  • 31. Dibedakan menjadi : 1. Penambahan dari depan 2. Penambahan dari belakang 3. Penambahan setelah node tertentu 4. Penambahan sebelum node tertentu
  • 32. 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++; }
  • 33.  Menambahkan X pada lokasi paling depan. a b c d head x b head c da x Kondisi awal pada linked list : Setelah penambahan node x didepan: Node input
  • 34. 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++; }
  • 35.  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 :
  • 36. 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); } }
  • 37. head : null tail : null head : Node@19821f tail : Node@19821f head : Node@addbf1 tail : Node@19821f head : Node@addbf1 tail : Node@42e816
  • 38. 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); }
  • 39.  Menyisipkan X pada lokasi setelah temp. a b c d temp a b xtemp c dx
  • 40. 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; } }
  • 41. Dibedakan menjadi : 1. Hapus node depan 2. Hapus node belakang 3. Hapus node tertentu
  • 42. 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!"); }
  • 43. 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!"); }
  • 44. 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--; }
  • 45.  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 bx temp a b temp a bx temp Hasil akhir :
  • 46.  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 bx temp
  • 47. 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; } }
  • 48. 1. Pengaksesan data node 2. Penambahan data 3. Penghapusan data 4. Pengaksesan index
  • 49. void checkIndex(int index) { if (index < 0 || index >= size) throw new IndexOutOfBoundsException ("index = " + index + " size = " + size); }
  • 50. public Object get(int index) { checkIndex(index); Node currentNode = head; for (int i = 0; i < index; i++) currentNode = currentNode.pointer; return currentNode.data; }
  • 51. 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; }
  • 52. 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; }
  • 53. 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++; }
  • 54. Arna Fariza, “Algoritma Struktur Data : Double Linked List”, PENS-ITS, Surabaya 54

Notas do Editor

  1. con•tig•u•ous adj. 1 in physical contact; touching along all or most of one side 2 near, next, or adjacent SYN. adjacent