Anda di halaman 1dari 13

Pengertian Linked List

Link list adalah desain tempat penyimpanan data yang terdiri dari node-node (simpul-simpul) yang saling
terhubung.

Nodes adalah Self-referential objects (object yang mereferensikan dirinya sendiri) yang disebut nodes,
yang dihubungkan dengan links, membentuk kata “linked” list.

Pengertian Linked list :

 sekumpulan elemen bertipe sama, yang mempunyai keterurutan tertentu, yang setiap
elemennya terdiri dari dua bagian

 struktur berupa rangkaian elemen saling berkait dimana setiap elemen dihubungkan elemen lain
melalui pointer. Pointer adalah alamat elemen. Penggunaan pointer untuk mengacu elemen
berakibat elemen-elemen bersebelahan secara logik walau tidak bersebelahan secara fisik di
memori.

Link list dapat diilustrasikan seperti kereta api, dimana kereta api terdiri dari gerbong-gerbong yang
saling terhubung yang dapat mengangkut penumpang. Gerbong disini setara dengan node dalam link list
yang berfungsi untuk menyimpan data.
Jika kita menyimpan data 3, 5 dan 7 dalam array, maka ilustrasi tempat penyimpanannya sbb:

Dengan 1 nama, array bisa menyimpan data yg bertipe sama. Dimana setiap data mempunyai indeks.

Sedangkan jika data tersebut disimpan dalam link list, maka ilustrasi tempat penyimpanannya sbb:

Masalah Umum Implementasi Linked List

 Pointer alamat penunjuk pada suatu node seringkali tidak tepat menunjuk ke node sebelum atau
sesudahnya (HUMAN ERROR).

 Ketika membuat sebuah node, seringkali pointer alamat penunjuk ke node yang lain tidak
disertakan (hanya berisi data) sehingga list terputus pada node tersebut (HUMAN ERROR).
Perbedaan Linked List dan Array

Linked List adalah koleksi data item yang tersusun dalam sebuah barisan secara linear, dengan penyisipan dan
pemindahan dapat dilakukan dalam semua tempat di LL tersebut. Sedangkan Array adalah koleksi dari object yang
mempunyai tipe identik / sama, array dapat disebut juga koleksi data dengan setiap elemen data menggunakan
nama yang sama dan masing-masing elemen mempunyai tipe data sama. Array dapat diloop dengan memberi
indeks setiap item di dalamnya, dan setiap komponen / item array dapat diakses dan dibedakan melalui indeks
array.

No. Linked List Array


1. Setiap elemen linked list terdiri dari 2 Setiap elemen array hanya berisi data saja.
bagian, data dan pointer address.
2. Pengalokasian ruang memori dilakukan Pengalokasian ruang memori terbatas pada
tanpa pendeklarasian sebelumnya dan jumlah ruang yang dideklarasikan sebelumnya.
terbatas pada jumlah ruang memori yang
tersisa (dapat dipakai).
Singly Linked List
~ Setiap node pada linked list mempunyai field yang berisi pointer ke node berikutnya dan juga memiliki
field yang berisi data.

~ Akhir linked list ditandai dengan node terakhir akan menunjuk ke null yang akan digunakan sebagai
kondisi berhenti saat pembacaan linked list.

Singly Linked List Non Circular

Link list tidak mempunyai indeks seperti array. Kita hanya bisa memberi nama node. Akan tetapi, tidak
semua node dalam link list mempunyai nama. Sebaiknya kita memberi nama untuk node yang pertama
(misal namanya head), dan node yang terakhir (misal namanya tail). Tujuannya untuk memudahkan
operasi link list dari depan atau belakang, misal nambah data atau menghapus data.

Langkah yang pertama, kita harus mendefinisikan apa itu node. Dalam Java, sebaiknya
pendefinisian node ini dibuat dalam sebuah class, misal:

Kemudian kita buat design link list dalam class yang lain, misal:
Pemodelan Operasi dasar Link List
a. insertAtFront

Metode insertAtFront menempatkan sebuah node baru di bagian depan list.

b. insertAtBack

Metode insertAtBack menempatkan sebuah node baru di bagian belakang list.


c. removeFromFront

Metode removeFromFront memindahkan node pertama list dan mengembalikan (memberikan) sebuah
referensi untuk memindahkan data. Metode ini melakukanEmptyListException jika list dalam keadaan
kosong ketika program memanggil metode ini.

d. removeFromBack

Metode removeFromBack memindahkan node terakhir list dan mengembalikan (memberikan) sebuah
referensi untuk memindahkan data. Metode ini melakukan EmptyListException jika list dalam keadaan
kosong ketika program memanggil metode ini.
Operasi-operasi yang bisa dilakukan dalam link list yaitu:

1. Tambah data (insert)

2. Edit data (edit)

3. Hapus data (delete)

4. Pengurutan data (sorting)

5. Pencarian data (searching)

Tambah Depan

Untuk tambah data dari depan, caranya:

Tambah Belakang

Untuk tambah data dari belakang, caranya:


Hapus Depan

Untuk menghapus data dari depan, caranya:

Hapus Belakang

Untuk menghapus data dari belakang, caranya:


Pencarian Data
void find (int key){
int i = 0;
boolean found = false;
Node2 temp = head;
while (temp != null){
if (temp.data == key){
found = true;
break;
}
i++;
temp = temp.next;
}
if (found){
System.out.println(key+" is found at index "+i);
}
else System.out.println("Data isn't found");
}

Contoh Program Sederhana

Contoh 1 :
class IntNode{
public int data;
public IntNode next;

public IntNode(int data, IntNode next){


this.data=data;
this.next=next;
}
public String toString(){
return data+"";
}
}
class StrNode{
public String data;
public StrNode next;

public StrNode(String data, StrNode next){


this.data=data;
this.next=next;
}
public String toString(){
return data;
}

}
public class Linked_List4 {
public static void main(String[] args){
IntNode depan = new IntNode(10,null);
System.out.println(depan);
StrNode depan1= new StrNode("wow",null);
System.out.println(depan1);
}

Contoh 2 :
import java.util.*;
public class Linked_List3 {
public static void main(String[] args) {
System.out.println("LinkedList");
LinkedList List=new LinkedList();
int a=3, b=5, c=9, d=11;
int size;

List.add(a);
List.add(b);
List.add(c);
List.add(d);
System.out.print("Sebelum di insert"+List);
System.out.print("\n insert 7");
int e=7;
List.add(2, e);
System.out.println("\nsetelah di urutkan"+List);

}
}

Contoh 3 :
class Node2{
int data;
Node2 next;
}

class LinkedList1{
Node2 head; //posisi awal dari linked list
Node2 tail; //posisi akhir dari linked list
/**
* Fungsi untuk mengecek apakah linked list masih kosong
*/
boolean isEmpty(){
return (head==null);
}

void addFirst(Node2 input){


if (isEmpty()){ //Jika linked list masih kosong,
head = input; //maka head dan tail sama dengan node input
tail = input;
}
else {
input.next = head; //Jika linked list sudah berisi,
head = input; //maka input akan di depan dan menjadi head
}
}

void addLast(Node2 input){


if (isEmpty()){ //Jika linked list masih kosong,
head = input; //maka head dan tail sama dengan node input
tail = input;
}
else {
tail.next = input; //Jika linked list sudah berisi,
tail = input; //maka input akan di belakang dan menjadi tail
}
}

void insertAfter(int key,Node2 input){


Node2 temp = head;
do {
if (temp.data == key){ //Jika data sama dengan key, maka input
input.next = temp.next; //disambung diantara temp dan
temp.next
temp.next = input;
System.out.println("Insert data is succeed.");
break; //dari temp --> temp.next menjadi :
} //temp --> input --> temp.next
temp = temp.next;
}
while (temp!=null);
}

void insertBefore(int key,Node2 input){


Node2 temp = head;
while (temp != null){
if ((temp.data == key)&&(temp == head)){
this.addFirst(input); /* jika insert pada awal linked
list
maka call method addFirst */
System.out.println("Insert data is succeed.");
break;
}
else if (temp.next.data == key){
input.next = temp.next; //dari temp --> temp.next
menjadi
temp.next = input; //temp --> input -->
temp.next
System.out.println("Insert data is succeed.");
break;
}
temp = temp.next;
}
}

void removeFirst(){
Node2 temp = head;
if (!isEmpty()){
if (head == tail){ //jika element linked list hanya 1,
head = tail = null; //maka head dan tail menjadi null
} //sehingga linked list kosong
else {
temp = temp.next; //memajukan temp ke temp.next
head = temp; //kemudian head dipindah ke temp
temp = null; //kemudian temp di-null (optional)
}
}
else System.out.println("Data is empty!");
}

void removeLast(){
Node2 temp = head;
if (!isEmpty()){
if (tail == head){ //jika element linked list hanya 1
head = tail = null; //maka head dan tail menjadi null
} //sehingga linked list kosong
else {
while (temp.next != tail){
temp = temp.next; //memajukan temp hingga satu elemen
} //sebelum tail.
temp.next = null; //temp.next di-null,dan jadi akhir LL
tail = temp; //tail dipindah ke temp
temp = null;
}
}
else System.out.println("Data is empty!");
}

void remove(int key){


Node2 temp = head;
if (!isEmpty()){
while (temp != null){
if (temp.next.data == key){//mengganti temp.next dengan
temp.next = temp.next.next; //temp.next.next
break; //dari temp --> temp.next -->temp.next.next
} //menjadi temp --> temp.next.next
else if ((temp.data == key)&&(temp == head)){
this.removeFirst();//jika key berada pada awal
linked list,
break; //maka call method removeFirst
}
temp = temp.next;
}
} else System.out.println("Data is empty!");
}

void find (int key){


int i = 0;
boolean found = false;
Node2 temp = head;
while (temp != null){
if (temp.data == key){
found = true;
break;
}
i++;
temp = temp.next;
}
if (found){
System.out.println(key+" is found at index "+i);
}
else System.out.println("Data isn't found");
}

void printNode(){
Node2 temp;
temp = head;
while (temp != null){
System.out.println(temp.data);
temp = temp.next;
}
}
}
public class Linked_List6 {
public static void main(String[] args){
Node2 satu = new Node2();
satu.data=10;
LinkedList1 a = new LinkedList1();
a.addFirst(satu);
a.find(10);
a.addLast(dua);
a.printNode();
a.removeLast();
a.printNode();
}

}
STRUKTUR DATA
SINGLE LINKED LIST

KELOMPOK 1 :

Jonathan Hans H13114320

Andi Budi Maulana H13114321

Titiyanti R H13114323

Adhityo Nugraha H13114325

Murniati H13114511

FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM


UNIVERSITAS HASANUDDIN
2015

Anda mungkin juga menyukai