Single Linked List
Single Linked List
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
}
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
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
Inisialisasi
TNode *head, *tail;
Fungsi Inisialisasi
void init ()
{ head =
NULL; tail =
NULL;
}