Wednesday, June 19, 2013

DLLNC dengan HEAD

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){
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 .



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