Linked List - E-learning UPN JATIM

advertisement
Nama : Arum Mahartika (1135010026)
Linked List
Pengertian
Linked List adalah salah satu bentuk struktur data, berisi kumpulan data (node) yang tersusun secara
sambung menyambung, dinamis dan terbatas.
Linked List sering disebut juga Senarai Berantai
Linked List saling terhubung dengan bantuan variabel pointer
Masing-masing data dalam Linked List disebut dengan node (simpul) yang menempati alokasi
memori secara dinamis dan biasanya berupa struct yang terdiri dari beberapa field.
Gambar tersebut menunjukkan Linked List tunggal atau ’singly-linked list’ dimana tiap
simpul hanya memiliki satu taut (link) yang merujuk ke simpul berikutnya atau nilai null
pada akhir simpul. Seranai berantai ini hanya bisa diakses maju dari awal simpul ke akhir
simpul.
Operasi-Operasi yang ada pada Linked List
Insert
Istilah Insert berarti menambahkan sebuah simpul baru ke dalam suatu linked list.
IsEmpty
Fungsi ini menentukan apakah linked list kosong atau tidak.
Find First
Fungsi ini mencari elemen pertama dari linked list
Find Next
Fungsi ini mencari elemen sesudah elemen yang ditunjuk now
Retrieve
Fungsi ini mengambil elemen yang ditunjuk oleh now. Elemen tersebut lalu dikembalikan
oleh fungsi.
Update
Fungsi ini mengubah elemen yang ditunjuk oleh now dengan isi dari sesuatu
Delete Now
Fungsi ini menghapus elemen yang ditunjuk oleh now. Jika yang dihapus adalah elemen
pertama dari linked list (head), head akan berpindah ke elemen berikut.
Delete Head
Fungsi ini menghapus elemen yang ditunjuk head. Head berpindah ke elemen sesudahnya.
Clear
Fungsi ini menghapus linked list yang sudah ada. Fungsi ini wajib dilakukan bila anda ingin
mengakhiri program yang menggunakan linked list. Jika anda melakukannya, data-data yang
dialokasikan ke memori pada program sebelumnya akan tetap tertinggal di dalam memori.
Operasi-operasi untuk Stack dengan Linked List
IsEmpty
Fungsi memeriksa apakah stack yang adamasih kosong.
Push
Fungsi memasukkan elemen baru ke dalam stack. Push di sini mirip dengan insert dalam
single linked list biasa.
Pop
Fungsi ini mengeluarkan elemen teratas dari stack.
Clear
Fungsi ini akan menghapus stack yang ada.
Operasi-operasi Queue dengan Double Linked List
IsEmpty
Fungsi IsEmpty berguna untuk mengecek apakah queue masih kosong atau sudah berisi data.
Hal ini dilakukan dengan mengecek apakah head masih menunjukkan pada Null atau tidak.
Jika benar berarti queue masih kosong.
IsFull
Fungsi IsFull berguna untuk mengecek apakah queue sudah penuh atau masih bisa
menampung data dengan cara mengecek apakah Jumlah Queue sudah sama dengan
MAX_QUEUE atau belum. Jika benar maka queue sudah penuh.
EnQueue
Fungsi EnQueue berguna untuk memasukkan sebuah elemen ke dalam queue (head dan tail
mula-mula meunjukkan ke NULL).
DeQueue
Procedure DeQueue berguna untuk mengambil sebuah elemen dari queue. Hal ini dilakukan
dengan cara menghapus satu simpul yang terletak paling depan (head).
Single Linked List Circular
Single Linked List Circular (SLLC) adalah Single Linked List yang pointer nextnya
menunjuk pada dirinya sendiri. Jika Single Linked List tersebut terdiri dari beberapa node,
maka pointer next pada node terakhir akan menunjuk ke node terdepannya.
Pengertian:
Node : rangkaian beberapa simpul
Single : artinya field pointer-nya hanya satu buah saja dan satu arah.
Linked List : artinya node-node tersebut saling terhubung satu sama lain.
Circular : artinya pointer next-nya akan menunjuk pada dirinya sendiri sehingga berputar
Ilustrasi SLLC
Setiap node pada linked list mempunyai field yang berisi pointer ke node berikutnya, dan juga
memiliki field yang berisi data. Pada akhir linked list, node terakhir akan menunjuk ke node terdepan
sehingga linked list tersebut berputar.
Deklarasi:
Deklarasi node dibuat dari struct berikut ini:
typedef struct TNode{
int data;
TNode *next;
};
Pembentukan node baru
Digunakan keyword new yang berarti mempersiapkan sebuah node baru
berserta alokasi memorinya.
TNode *baru;
baru = new TNode;
baru->data = databaru;
baru->next = baru;
Dibutuhkan satu buah variabel pointer: head
Head akan selalu menunjuk pada node pertama
Penambahan data di depan
Penambahan node baru akan dikaitan di node paling depan, namun pada saat pertama kali
(data masih kosong), maka penambahan data dilakukan pada head nya.
Pada prinsipnya adalah mengkaitkan data baru dengan head, kemudian head akan menunjuk
pada data baru tersebut sehingga head akan tetap selalu menjadi data terdepan. Untuk
menghubungkan node terakhir dengan node terdepan dibutuhkan pointer bantu.
HEAD Single Linked List Circular
Penambahan data di depan
Penambahan data di belakang
Penambahan data dilakukan di belakang, namun pada saat pertama kali data langsung
ditunjuk pada head-nya.
Penambahan di belakang lebih sulit karena kita membutuhkan pointer bantu untuk
mengetahui data terbelakang, kemudian dikaitkan dengan data baru. Untuk mengetahui data
terbelakang perlu digunakan perulangan.
Operasi Penghapusan
Penghapusan node dilakukan dengan memutus rantai node kemudian menghapus node. Jika
node berada di tengah rangkaian, rangkaian yang terputus perlu disambung kembali. Untuk
memudahkan penghapusan simpul dibutuhkan dua cursor sebagai simpul bantu. Selain cursor
juga dibutuhkan simpul head sebagai acuan awal simpul dalam rangkaian.
Berikut langkah langkah untuk menghapus simpul dalam rangkaian:






Buat cursor bantu yang menunjuk ke awal node(simpul).
Pindahkan cursor ke node berikutnya
Putus sambungan awal node dengan node berikutnya.
Hapus rangkaian
Jika berada di akhir rangkaian, putuskan dari rangkaian sebelumnya
Jika di tengah rangkaian, pindahkan penunjukan node berikutnya, atau di akhir, atau setelah
node yang akan dihapus
Ilustrasi Hapus Depan
Ilustrasi Hapus Belakang
Contoh Source Code :
import java.util.List;
import java.util.LinkedList;
import java.util.Iterator;
import java.util.ListIterator;
import java.util.Collections;
import java.util.Random;
public class LinkedListExample {
public static void main(String[] args) {
//
LinkedList Creation
List linkedListA = new LinkedList();
List linkedListB = new LinkedList();
//
Adding elements to the LinkedList
for (int i = 0; i < 5; i++) {
linkedListA.add(new Integer(i));
}
linkedListB.add(“beginner”);
linkedListB.add(“java”);
linkedListB.add(“tutorial”);
linkedListB.add(“.”);
linkedListB.add(“com”);
linkedListB.add(“java”);
linkedListB.add(“site”);
//
Iterating through the LinkedList to display the Contents.
Iterator i1 = linkedListA.iterator();
System.out.print(“LinkedList linkedListA –> “);
while (i1.hasNext()) {
System.out.print(i1.next() + ” , “);
}
System.out.println(“——”);
Iterator i2 = linkedListB.iterator();
System.out.println(“LinkedList linkedListB –> “);
while (i2.hasNext()) {
System.out.print(i2.next() + ” , “);
}
System.out.println();
System.out.println();
System.out.println(“Using ListIterator to retrieve LinkedList Elements”);
System.out.println();
ListIterator li1 = linkedListA.listIterator();
//
next(), hasPrevious(), hasNext(), hasNext() nextIndex() can be used with a
//
ListIterator interface implementation
System.out.println(“LinkedList linkedListA –> “);
while (li1.hasNext()) {
System.out.print(li1.next() + ” , “);
}
System.out.println();
//
Searching for an element in the LinkedList
int index = linkedListB.indexOf(“java”);
System.out.println(“‘java’ was found at : ” + index);
int lastIndex = linkedListB.lastIndexOf(“java”);
System.out.println(“‘java’ was found at : ” + lastIndex
+ ” from the last”);
System.out.println();
//
Getting the subList from the original List
List subList = linkedListA.subList(3, linkedListA.size());
System.out.println(“New Sub-List(linkedListA) from index 3 to “
+ linkedListA.size() + “: ” + subList);
System.out.println();
//
Sort an LinkedList
System.out.print(“Sorted LinkedList linkedListA –> “);
Collections.sort(linkedListA);
System.out.print(linkedListA);
System.out.println();
//
Reversing an LinkedList
System.out.print(“Reversed LinkedList linkedListA –> “);
Collections.reverse(linkedListA);
System.out.println(linkedListA);
System.out.println();
//
Checking emptyness of an LinkedList
System.out.println(“Is linkedListA empty? “
+ linkedListA.isEmpty());
System.out.println();
//
Checking for Equality of LinkedLists
LinkedList LinkedListC = new LinkedList(linkedListA);
System.out.println(“linkedListA.equals(LinkedListC)? “
+ linkedListA.equals(LinkedListC));
System.out.println();
//
Shuffling the elements of an LinkedList in Random Order
Collections.shuffle(linkedListA, new Random());
System.out.print(“LinkedList linkedListA after shuffling its elements–> “);
i1 = linkedListA.iterator();
while (i1.hasNext()) {
System.out.print(i1.next() + ” , “);
}
System.out.println();
System.out.println();
//
Converting an LinkedList to an Array
Object[] array = linkedListA.toArray();
for (int i = 0; i < array.length; i++) {
System.out.println(“Array Element [" + i + "] = ” + array[i]);
}
System.out.println();
//
Clearing LinkedList Elements
linkedListA.clear();
System.out.println(“linkedListA after clearing : ” + linkedListA);
System.out.println();
}
}
Sumber :
http://dodi9802.wordpress.com/2012/01/25/serba-serbi-linkedlist-pada-java/
http://firgoblogerz.blogspot.com/2009/06/linked-list-versi-2.html
Download