Materi 6 Double Linked List
Materi 6 Double Linked List
prev A next
Ilustrasi Double Linked List
10 15 20
prev next
head
• 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.
Deklarasi dan Pembentukan Node
baru pada Double Linked List
Deklarasi node
typedef struct TNode{
int data;
TNode *next;
Tnode *prev;
};
10 15 20
head
Double Linked List
menggunakan HEAD (lanjutan)
Deklarasi Pointer Double Linked List menggunakan head
TNode *head;
NULL
head
2. Masukkan data baru, misal 10
10
head
Penambahan data dari depan
pada double linked list dengan head (lanjutan)
10 15
head baru
15 10
baru head
15 10
head
Penambahan data dari depan
pada double linked list dengan head (lanjutan)
NULL
head
2. Masukkan data baru, misal 10
10
head
Penambahan data dari belakang
pada double linked list dengan head (lanjutan)
10 15
head baru
10 15
10 15
head
Penambahan data dari belakang
pada double linked list dengan head (lanjutan)
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;
}
cout<<"Data masuk\n";
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";}
10 15 21
head bantu
Hapus data dari depan
pada double linked list dengan head
10 15 21
hapus head
15 21
head
Hapus data dari depan
pada double linked list dengan head (lanjutan)
15 21 34
head hapus
15 21 34
head hapus
15 21
head
Hapus data dari belakang
pada double linked list dengan head (lanjutan)
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 belakang
pada double linked list dengan head (lanjutan)
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
head tail
Double Linked List menggunakan
HEAD dan TAIL (lanjutan)
Inisialisasi DLLNC
TNode *head, *tail;
head tail
10
head tail
Penambahan data dari depan
pada double linked list dgn head dan tail (lanjutan)
10 15
15 10
15 10
head tail
Penambahan data dari depan
pada double linked list dgn head dan tail (lanjutan)
void insertDepan (int databaru){
TNode *baru;
baru = new TNode;
baru->data = databaru;
baru->next = NULL;
baru->prev = NULL;
if(isEmpty()==1){
head=baru;
tail=head;
head->next = NULL;
head->prev = NULL;
tail->prev = NULL;
tail->next = NULL;
}
else {
baru->next = head;
head->prev = baru;
head = baru;
}
cout<<"Data masuk\n";
}
Penambahan data dari belakang
pada double linked list dgn head dan tail
head tail
10
head tail
Penambahan data dari belakang
pada double linked list dgn head dan tail (lanjutan)
10 15
10 15
10 15
head tail
Penambahan data dari belakang
pada double linked list dgn head dan tail (lanjutan)
Penambahan node di belakang akan selalu dikaitkan dengan tail dan kemudian node baru tersebut
akan menjadi tail
void insertBelakang(int databaru){
TNode *baru;
baru = new TNode;
baru->data = databaru;
baru->next = NULL;
baru->prev = NULL;
if(isEmpty()==1){
head=baru;
tail=head;
head->next = NULL;
head->prev = NULL;
tail->prev = NULL;
tail->next = NULL;
}
else {
tail->next = baru;
baru->prev = tail;
tail = baru;
tail->next = NULL;
}
cout<<"Data masuk\n";
}
Function untuk menampilkan isi linked list
void tampil(){
TNode *bantu;
bantu = head;
if(isEmpty()==0){
while(bantu!=tail->next){
cout<<bantu->data<<" ";
bantu=bantu->next;
}
cout<<endl;
} else cout<<"Masih kosong\n";
}
10 15 21
10 15 21
15 21
head tail
Hapus data dari depan
pada double linked list dgn head dan tail (lanjutan)
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;
tail = NULL;
}
cout<<d<<" terhapus\n";
} else cout<<"Masih kosong\n";
}
Hapus data dari belakang
pada double linked list dgn head dan tail
15 21 34
15 21
head tail
Hapus data dari belakang
pada double linked list dgn head dan tail (lanjutan)
void hapusBelakang(){
TNode *hapus;
int d;
if (isEmpty()==0){
if(head->next != NULL){
hapus = tail;
d = tail->data;
tail = tail->prev;
tail->next = NULL;
delete hapus;
} else {
d = head->data;
head = NULL;
tail = NULL;
}
cout<<d<<" terhapus\n";
} else cout<<"Masih kosong\n";
}
Hapus data dari belakang
pada double linked list dgn head dan tail (lanjutan)
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