Double Linked List Non Circular "DLLNC" degan HEAD
Dibutuhkan satu buah variabel pointer: head Dan Head akan selalu menunjuk pada node pertama
Deklarasi Pointer Penunjuk Kepala Double Linked List
Manipulasi linked list tidak bisa dilakukan langsung ke node yang dituju , melainkan harus melalui node pertama dalam linked list. Deklarasinya sebagai berikut :
TNode *head;
Fungsi Inisialisasi Single LinkedList Circular
void init(){
head = NULL;
}
Function untuk mengetahui kosong tidaknya DLLNC
int isEmpty (){
if(head == NULL) return 1;
else return 0;
}
Penambahan data di Depan
Penambahan node baru akan dikaitan 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.
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 masuk \n”;
}
Penambahan data di Belakang
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 . Untuk mengetahui data terbelakang perlu digunakan perulangan.
void insertBelakang (int databaru){ 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.
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 DLLNC
void tampil (){
TNode *bantu;
bantu = head;
if( isEmpty ()==0){
while(bantu!=NULL){
cout <data<<" ";
bantu=bantu->next;
}
cout << endl ;
} else cout <<" Masih kosong \n";
}
Bagaimana cara membaca data list secara terbalik ?
Function untuk 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;
}
cout <<<" terhapus \n";
} else cout <<" Masih kosong \n";
}
Function untuk 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;
}
cout <<<" terhapus \n";
} else cout <<" Masih kosong \n";
}
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 diatur agar menunjuk ke NULL setelah penghapusan dilakukan .
Karena pointer hapus sudah bisa menunjuk ke pointer sebelumnya dengan menggunakan elemen prev ke node sebelumnya , yang akan diatur 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;
}
Huuu......... Selamat berpusing-pusing ria...
No comments:
Post a Comment