0% menganggap dokumen ini bermanfaat (0 suara)
88 tayangan

Single Linked List

Linked list adalah struktur data yang dikembangkan pada tahun 1960-an untuk bahasa pemrograman artificial intelligence. Linked list terdiri dari kumpulan node yang saling terhubung secara dinamis dan memungkinkan penambahan atau penghapusan data dengan mudah. Terdapat dua jenis linked list utama yaitu single linked list dan double linked list.

Diunggah oleh

Ahmad Baydawi
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PPTX, PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
88 tayangan

Single Linked List

Linked list adalah struktur data yang dikembangkan pada tahun 1960-an untuk bahasa pemrograman artificial intelligence. Linked list terdiri dari kumpulan node yang saling terhubung secara dinamis dan memungkinkan penambahan atau penghapusan data dengan mudah. Terdapat dua jenis linked list utama yaitu single linked list dan double linked list.

Diunggah oleh

Ahmad Baydawi
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PPTX, PDF, TXT atau baca online di Scribd
Anda di halaman 1/ 81

Struktur Data

Single Linked List


Linked List
Linked List
 Dikembangkan tahun oleh Allen Newell, Cliff Shaw dan Herbert Simon di RAND Corporation sebagai
struktur data utama untuk bahasa Information Processing Language (IPL).
 IPL dibuat untuk mengembangkan program artificial intelligence
 Linked List adalah salah satu bentuk struktur data, berisi kumpulan data (node) yang tersusun secara
sekuensial, saling sambung-menyambung dan dinamis.
Linked List
 Linked List adalah elemen yang berurutan yang dihubungkan dengan pointer
 Elemen terakhir menunjuk ke NULL (untuk Linked List Non Circular)
 Elemen pada Single Linked List dapat bertambah atau berkurang (dinamis) selama program dijalankan.
 Dapat dibuat selama diperlukan (hingga memori sistem habis).
 Linked List tidak membuat ruang memori (tetapi membutuhkan beberapa emmori ekstra untuk pointer
Array Vs Linked List
 Array:
 Statis
 Terbatas dalam menambah / menghapus data
 Random acces
 Penghapusan data tidak mungkin

 Linked List
 Dinamis
 Tidak
terbatas
dalam
menam
bah /
mengha
pus
data
 Squenti
al
Array Vs Linked List
 Array memiliki ruang atau aksebilitas yang terbatas.
Array Vs Linked List
 Array memiliki ruang atau aksebilitas yang terbatas. Sedangkan Linked bias
meng
Alokasikan memori secara dinamis
Array Vs Linked List
 Array memiliki ruang atau aksebilitas yang terbatas. Sedangkan Linked bias
meng
Alokasikan memori secara dinamis
Jenis Linked List
Jenis Linked List
 Single Linked List (Singly Linked List).
 Double Linked List (Double Linked List).
Single Linked List
Single Linked List
 Single Linked List merupakan suatu linked list yang hanya memiliki satu variable
pointer saja. Dimana pointer tersebut menunjukan ke node selanjutnya dan pointer
pada tail menunjukan ke NULL.
 Navigasi item maju saja.
 Single Linked List terdiri dari sejumlah elemen (node) dimana setiap node memiliki
penunjuk berikutnya ke elemen (node) berikutnya.
 Penunjuk node terakhir adalah NULL, yang menunjukkan akhir dari Single Linked
List.
Single Linked List
Single Linked List
 Pengertian:
 Single : artinya field pointer-nya hanya satu buah saja dan satu arah serta pada akhir
node, pointernya menunjuk NULL

 Linked List : artinya node-node tersebut saling terhubung satu sama lain.
Single Linked List

 Setiap node pada linked list mempunyai field yang berisi pointer ke node berikutnya, dan
juga memiliki field yang berisi data.
 Node terakhir akan menunjuk ke NULL yang akan digunakan sebagai kondisi berhenti
pada saat pembacaan isi linked list.
Jenis Single Linked List
Pembuatan Single Linked List

 Keyword new gunanya untuk mempersiapkan sebuah node baru berserta alokasi memorinya,
kemudian node tersebut diisi data dan pointer nextnya ditunjuk ke NULL.
 TNode *baru;
 baru = new TNode;
 baru->data = databaru;
 baru->next = NULL;
Single Linked List menggunakan HEAD

 Dibutuhkan satu buah variabel pointer: head


 Head akan selalu menunjuk pada node pertama
Single Linked List menggunakan HEAD
 Fungsi Inisialisasi Single LinkedList
void init()
{
head = NULL;
}
 Function untuk mengetahui kosong tidaknya Single LinkedList dan jika pointer head
tidak menunjuk pada suatu node maka kosong
int isEmpty()
{
if(head == NULL) return 1;
else return 0;
}
Single Linked List menggunakan HEAD
 Deklarasi Pointer Penunjuk Kepala Single Linked List
 Manipulasi linked list tidak bisa dilakukan langsung ke node yang dituju, melainkan
harus menggunakan suatu pointer penunjuk ke node pertama dalam linked list (dalam
hal ini adalah head).
 Deklarasinya sebagai berikut: TNode *head;
Single Linked List menggunakan HEAD ( Penambahan
data dari depan)
 Pada prinsipnya adalah mengkaitkan node baru dengan head, kemudian head akan menunjuk
pada data baru tersebut sehingga head akan tetap selalu menjadi data
terdepan.
Single Linked List menggunakan HEAD ( Penambahan
data dari depan)
Single Linked List menggunakan HEAD ( Penambahan
data dari depan)
Single Linked List menggunakan HEAD ( Penambahan data dari depan)
void insertDepan(int databaru)
{
TNode *baru;
baru = new TNode;
baru->data = databaru;
baru->next = NULL;
if(isEmpty()==1)
{ head=baru;
head->next = NULL;
} else {
baru->next = head;
head = baru;
}
cout<<”Data masuk\
n”;

}
Single Linked List menggunakan HEAD ( Penambahan data
dari belakang)
 Penambahan di belakang lebih sulit karena kita membutuhkan pointer bantu untuk
mengetahui node terbelakang, dan untuk mengetahui data terbelakang perlu digunakan
perulangan.
 Pointer bantu diletakkan di data bagian akhir sebelum penambahan
Single Linked List menggunakan HEAD ( Penambahan data
dari belakang)
 Penambahan di belakang lebih sulit karena kita membutuhkan pointer bantu untuk
mengetahui node terbelakang, dan untuk mengetahui data terbelakang perlu digunakan
perulangan.
 Pointer bantu diletakkan di data bagian akhir sebelum penambahan
Single Linked List menggunakan HEAD ( Penambahan data
dari belakang)
Single Linked List menggunakan HEAD ( Penambahan data dari
belakang)
Single Linked List menggunakan HEAD ( Penambahan data
dari belakang)
void insertBelakang (int databaru){
TNode *baru,*bantu;
baru = new TNode;
baru->data = databaru;
baru->next = NULL;
if(isEmpty()==1){
head=baru;
head->next =
NULL;
} else {
bantu=head;
while(bantu->next!=NULL){
bantu=bantu->next;
}
bantu->next = baru;
}
cout<<"Data masuk\n";
}
Single Linked List dengan Head (menampilkan data)
void tampil()
{ TNode *bantu;
bantu = head;
if(isEmpty()==0){
while(bantu!=NULL)
{ cout<<bantu->data<<"
"; bantu=bantu->next;
}
cout<<endl;
} else cout<<"Masih
kosong\n";
Single Linked List dengan Head (menampilkan data)

 Function di atas digunakan untuk menampilkan semua isi list, di mana linked list ditelusuri satu-
persatu dari awal node sampai akhir node.
 Penelusuran ini dilakukan dengan menggunakan suatu pointer bantu, karena pada prinsipnya
pointer head yang menjadi tanda awal list tidak boleh berubah/berganti posisi.Penelusuran
dilakukan terus sampai node terakhir ditemukan menunjuk ke nilai NULL. Jika tidak NULL, maka
node bantu akan berpindah ke node selanjutnya dan membaca isi datanya dengan menggunakan
field next sehingga dapat saling berkait.
 Jika head masih NULL berarti data masih kosong!
Single Linked List dengan Head (menghapus data dari depan)
Single Linked List dengan Head (menghapus data dari depan)

 Function di atas akan menghapus data terdepan (pertama) yang ditunjuk oleh head pada linked list
 Penghapusan node tidak boleh dilakukan jika keadaan node sedang ditunjuk oleh pointer.
 Sebelum data terdepan dihapus, head harus ditunjukkan ke node sesudahnya terlebih dahulu agar list
tidak putus, sehingga node setelah head lama akan menjadi head baru (data terdepan yang baru).
 Jika head masih NULL maka berarti data masih kosong!
Single Linked List dengan Head (menghapus data dari belakang)
Single Linked List dengan Head (menghapus data dari belakang)
void hapusBelakang(){
TNode *hapus,*bantu;
int d;
if (isEmpty()==0)
{ if(head->next !=
NULL){ bantu = head;
while(bantu->next->next!=NULL){
bantu = bantu->next;
}
hapus = bantu->next;
d = hapus->data;
bantu->next = NULL;
delete hapus;
} else {
d = head->data;
head = NULL;
}
cout<<d<<"
terhapus\n";
} else
Single Linked List dengan Head (menghapus data dari belakang)
 Membutuhkan pointer bantu dan hapus.
 Pointer hapus digunakan untuk menunjuk node yang akan dihapus, dan pointer bantu digunakan
untuk menunjuk node sebelum node yang dihapus yang kemudian selanjutnya akan menjadi node
terakhir.
 Pointer bantu akan digunakan untuk menunjuk ke nilai NULL.
 Pointer bantu akan selalu bergerak sampai sebelum node yang akan dihapus, baru kemudian
pointer hapus diletakkan setelah pointer bantu. Setelah itu pointer hapus akan dihapus, pointe
bantu akan menunjuk ke NULL.
Function untuk menghapus semua elemen Linked List
void clear(){
TNode *bantu,*hapus;
bantu = head;
while(bantu!=NULL)
{ hapus = bantu;
bantu = bantu->next;
delete hapus;
}
head = NULL;
}

Code
Double Linked List (Double Linked List)
Double Linked List (non circular)

 Double Linked List memiliki 2 buah pointer yaitu pointer next dan prev. Pointer next menunjuk
pada node setelahnya dan pointer prev menunjuk pada node sebelumnya.
 Pengertian:
 Double : artinya field pointer-nya dua buah dan dua arah, ke node sebelum dan sesudahnya
 .Linked List : artinya node-node tersebut saling terhubung satu sama lain.
 Non Circular : artinya pointer prev dan next-nya akan menunjuk pada NULL.
Ilustrasi Double Linked List

 Setiap node pada linked list mempunyai field yang berisi data dan pointer ke node berikutnya & ke
node sebelumnya
 Untuk pembentukan node baru, mulanya pointer next dan prev akan menunjuk ke nilai NULL.
 Selanjutnya pointer prev akan menunjuk ke node sebelumnya, dan pointer next akan menunjuk
ke node selanjutnya pada list.head
Deklarasi dan Pembentukan Node baru pada Double Linked List

 Deklarasi node
typedef struct TNode{
int data;
TNode *next;
Tnode
*prev;
};
 Pembentukan
node baru
TNode
*baru;
baru = new
TNode;
Double Linked List menggunakan HEAD

 Dibutuhkan satu buah variabel pointer yaitu head


 Head akan selalu menunjuk pada node pertama
Double Linked List menggunakan HEAD

 Deklarasi Pointer Double Linked List menggunakan head


TNode *head;
 Fungsi Inisialisasi Double LinkedList
void init()
{
head = NULL;
}
 Function untuk mengetahui kosong tidaknya Double LinkedList
int isEmpty(){
if(head == NULL) return 1;
else return 0;
}
Penambahan data dari depan pada double linked list dengan head

 Penambahan node baru akan diletakkan 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.
Penambahan data dari depan pada double linked list dengan head
Penambahan data dari depan pada double linked list dengan head
void insertDepan (int databaru) {
TNode *baru;
baru = new TNode;
baru->data = databaru;
baru->next = NULL;
baru->prev = NULL;
if(isEmpty()==1)
{ head=baru;
head->next = NULL;
head->prev =
NULL;
}
else {
baru->next = head;
head->prev =
baru; head = baru;
}
cout<<”Data
Penambahan data dari belakang pada double linked list dengan head

 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.
Penambahan data dari belakang pada double linked list dengan head
Penambahan data dari belakang pada double linked list dengan head
Penambahan data dari belakang pada double linked list dengan head
void insertBelakang (int databaru){ }
TNode *baru,*bantu; else {
baru = new TNode; bantu=head;
baru->data = databaru; while(bantu->next!=NULL)
baru->next = NULL; { bantu=bantu->next;
baru->prev = NULL; }
if(isEmpty()==1){ bantu->next = baru;
head=baru; baru->prev = bantu;
head->next = NULL; }
head->prev = cout<<"Data masuk\n";
NULL; }
Function untuk menampilkan isi Double Linked List
void tampil () {
TNode
*bantu; bantu
= head;
If (isEmpty()==0)
{ While (bantu!=NULL) {
cout<<bantu->data<<"
"; bantu=bantu->next;
}
cout<<endl;
} else cout<<"Masih
kosong\n";}
Hapus data dari depan pada double linked list dengan head
Hapus data dari depan pada double linked list dengan head
Void hapusDepan () {
TNode *hapus;
int d;
if (isEmpty()==0) {
If (head->next != NULL) {
hapus = head;
d = hapus->data;
head = head->next;
head->prev = NULL;
delete hapus;
} else {
d = head->data;
head = NULL;
}
cout<<d<<" terhapus\
n";
}
else cout<<"Masih
kosong\n";
Hapus data dari depan pada double linked list dengan head
Hapus data dari depan pada double linked list dengan head
void hapusBelakang() {
TNode *hapus;
int d;
if (isEmpty()==0) {
if(head->next != NULL) {
hapus = head;
While (hapus->next!=NULL)
{ hapus = hapus->next;
}
d = hapus->data;
hapus->prev->next = NULL;
delete hapus;
} else {
d = head->data;
head = NULL;
}
cout<<d<<"
terhapus\n";
} else cout<<"Masih
kosong\n";
Hapus data dari depan pada double linked list dengan head

 Tidak diperlukan pointer bantu yang mengikuti pointer hapus yang berguna untuk menunjuk ke
NULL
 Karena pointer hapus sudah bisa menunjuk ke pointer sebelumnya dengan menggunakan elemen
prev ke node sebelumnya, yang akan diset agar menunjuk ke NULL setelah penghapusan
dilakukan.
Function untuk menghapus semua elemen

void clear () {
TNode *bantu,*hapus;
bantu = head;
While (bantu!=NULL)
{ hapus = bantu;
bantu = bantu->next;
delete hapus;
}
head = NULL;
}
Double Linked List menggunakan HEAD dan TAIL

 Dibutuhkan dua buah variabel pointer: head dan tail


 Head akan selalu menunjuk pada node pertama, sedangkan tail akan selalu menunjuk pada node
terakhir.
Double Linked List menggunakan HEAD dan TAIL

 Inisialisasi
TNode *head, *tail;
 Fungsi Inisialisasi
void init ()
{ head =
NULL; tail =
NULL;
}

 Function untuk mengetahui kosong


tidaknya int isEmpty (){
if(tail == NULL) return 1;
else return 0;
}
Penambahan data dari depan pada double linked list dgn head dan tail
Penambahan data dari depan pada double linked list dgn head dan tail
Penambahan data dari depan pada double linked list dgn head dan tail
void insertDepan (int databaru) {
}
TNode *baru;
else {
baru = new TNode;
baru->next = head;
baru->data = databaru;
head->prev = baru;
baru->next = NULL;
head = baru;
baru->prev = NULL;
}
If (isEmpty()==1)
cout<<"Data
{ head=baru;
masuk\n";
tail=head;
}
head->next = NULL;
head->prev = NULL;
tail->prev = NULL;
tail->next = NULL;
Penambahan data dari belakang pada double linked list dgn head dan tail
Penambahan data dari belakang pada double linked list dgn head dan tail
Penambahan data dari belakang pada double linked list dgn head dan tail

 Penambahan node di belakang akan selalu dikaitkan If (isEmpty()==1) {


dengan tail dan kemudian node baru tersebut akan menjadi tail head=baru;
tail=head;
void insertBelakang(int databaru) {
head->next = NULL;
TNode *baru;
head->prev =
baru = new TNode; baru-
NULL; tail->prev =
>data = databaru; NULL; tail->next =
baru->next = NULL; NULL;
baru->prev = NULL; }
else {
tail->next = baru;
baru->prev =
tail;
tail = baru;
}
Function untuk menampilkan isi linked list
void tampil () {
TNode
*bantu; bantu
= head;
If (isEmpty
()==0 ) {
wh
ile(
ba
nt
u!
=t
ail-
>n
ext
){
c
Hapus data dari depan pada double linked list dgn head dan tail
Hapus data dari depan pada double linked list dgn head dan tail

void hapusDepan () { } else {


TNode *hapus; d = head->data;
int d; head = NULL;
if ( isEmpty () ==0 ) { tail =
NULL;
If (head->next != NULL) {
}
hapus = head;
cout<<d<<"
d = hapus->data;
terhapus\n";
head = head->next;
} else
head->prev = NULL; cout<<"Masih
kosong\n";
delete hapus;
}
Hapus data dari belakang pada double linked list dgn head dan tail
Hapus data dari belakang pada double linked list dgn head dan tail

void hapusBelakang () { } else {


TNode *hapus; d = head->data;
int d; head = NULL;
if ( isEmpty () ==0 ) { tail = NULL;
If (head->next != NULL) { }
hapus = tail; cout<<d<<"
terhapus\n";
d = tail->data;
} else
tail = tail-
cout<<"Masih
>prev; tail->next kosong\n";
= NULL; delete }
hapus;
Hapus data dari belakang pada double linked list dgn head dan tail
 Pointer hapus tidak perlu di loop untuk mencari node terakhir. Pointer hapus hanya perlu menunjuk
pada pointer tail saja.
 Karena pointer hapus sudah bisa menunjuk ke pointer sebelumnya dengan menggunakan elemen prev,
maka pointer prev hanya perlu diset agar menunjuk ke NULL. Lalu pointer hapus
didelete.
Function untuk menghapus semua elemen LinkedList
void clear () {
TNode *bantu,*hapus;
bantu = head;
While (bantu!=NULL) {
hapus = bantu;
bantu = bantu->next;
delete hapus;
}
head = NULL;
tail = NULL;
}
Function untuk menghapus semua elemen LinkedList
 Menggunakan pointer bantu yang digunakan untuk bergerak sepanjang list, dan menggunakan
pointer hapus yang digunakan untuk menunjuk node-node yang akan dihapus.
 Pada saat pointer hapus menunjuk pada node yang akan dihapus, pointer bantu akan bergerak ke node
selanjutnya, dan kemudian pointer hapus akan didelete.

Anda mungkin juga menyukai