Linked List
1. Circular Single Linked List
Single : field pointernya hanya satu buah dan satu arah
Linked List : node-node nya saling terhubung satu sama lain
Circular : pointer next-nya akan menunjuk pada dirinya sendiri sehingga berputar
Jadi, single linked list circular adalah single linked list yang pointer nextnya menunjuk kepada dirinya sendiri artinya linked list ini tidak memiliki nilai NULL untuk medan sambungannya.
Setiap nodenya memiliki field yang berisi pointer ke next node, dan juga memiliki field yang berisi data.
Deklarasi Single Linked List Circular:
Struct tnode {
int data;
tnode *next;
};
void main() {
head = new tnode;
head->next = head;
}
Node terakhir akan menunjuk ke node paling depan sehingga linked list akan terus berputar.
2. Double Linked List
Adalah linked list dengan node yang memiliki data dan dua buah pointer (biasanya disebut next dan prev) yang menunjuk ke node sebelum dan node sesudahnya. Pada implementasinya, terdapat dua variasi double linked list yaitu circular dan non-circular layaknya pada single linked list.
Deklarasi node dibuat dari struct berikut ini :
typedef struct TNode{
int data;
Tnode *next;
Tnode *prev;
};
Awalnya, 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.
Pointer 1 akan menunjuk Head (node pertama).
Deklarasi pointer penunjuk head pada double linked list :
TNode *head;
Penambahan node baru akan dikaitkan di node paling depan, namun saat data masih kosong, maka penambahan data dilakukan pada head-nya. Jadi, kita mengkaitkan data baru dengan head, kemudian head akan menunjuk pada data baru tersebut sehingga head akan tetap selalu menjadi data yang paling pertama. Kita juga membutuhkan pointer bantu untuk menghubungkan node terakhir dengan node terdepan.
Contoh code menambah data baru di depan :
int isEmpty(){ //untuk mengecek apakah double linked list nya kosong
if(head == NULL) return 1;
else return 0;
}
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;
}
Printf(”Data masuk\n”);
}
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. Kita membutuhkan perulangan untuk mengetahui data terbelakang.
Contoh code menambah data baru di belakang :
Void insertBelakang (int databaru){
Tnode *baru, *bantu;
Baru = new Tnode;
baru->data = databaru;
baru->next = NULL;
baru->prev = NULL;
if(isEmpty()==1){
head=baru;
head->next = NULL;
head->prev = NULL;
}
else{
bantu=head;
while(bantu->next!=NULL){
bantu=bantu->next
}
bantu->next = baru;
baru->prev = bantu;
}
Printf(”Data masuk\n”);
}
Tidak diperlukan pointer 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.
Contoh code menghapus data di depan:
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;
}
printf" terhapus\n";
}
else printf"Masih kosong\n";
}
Contoh code menghapus node terbelakang :
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;
}
Printf “terhapus\n";
}
else printf"Masih kosong\n";
}
3. Double Linked List Circular
Double Linked List Circular (DLLC) adalah linked list dengan menggunakan pointer, dimana setiap node memiliki 3 field, yaitu 1 field pointer yang menunjuk next, 1 field menunjuk pointer prev, serta sebuah field yang berisi data untuk node tersebut dengan pointer next dan pre-nya menunjuk ke dirinya sendiri secara circular.
Deklarasi node di double linked list circular:
typedef struct TNode{
int data;
TNode *next;
Tnode *prev;
};
Sekian. Terimakasih.
Referensi :
https://www.slideshare.net/materikuliah/circular-linked-list
https://rizkidoank.com/2016/10/17/double-linked-list/
Sekian. Terimakasih.
Referensi :
https://www.slideshare.net/materikuliah/circular-linked-list
https://rizkidoank.com/2016/10/17/double-linked-list/
Komentar
Posting Komentar