Double Linked List (DLL) adalah suatu cara pengolahan data yang bekerja dengan record dalam jumlah besar, sehingga membutuhkan alokasi memori dinamis yang besar pula. DLL biasanya digunakan pada saat alokasi memori konvensional tidak lagi bisa diandalkan. Sedangkan bekerja dengan data yang besar tidak dapat dihindari lagi, karena tidak jarang pula, data besar tersebut memiliki hubungan yang erat.
Di dalam DLL tidak hanya sekadar menampilkan setiap record-nya, melainkan dapat pula menambahkan record, menghapus beberapa record sesuai keinginan pengguna, sampai mengurutkan record. Kondisi tersebut memungkinkan dimilikinya satu rantai data yang panjang dan saling berhubungan.
Pada Double Linked List, setiap node memiliki dua buah pointer ke sebelah kiri (prev) dan ke sebelah kanan (next). Gambar 1 memperlihatkan sebuah node dari Double Linked List.
Bertambah lagi komponen yang akan digunakan. Apabila dalam Single Linked List hanya memiliki head, curr dan node, maka untuk Double Linked List, ada satu penunjuk yang berfungsi sebagai akhir dari list: tail. Bagian kiri dari head akan menunjuk ke NULL. Demikian pula dengan bagian kanan dari tail. Setiap node saling terhubung dengan pointer kanan dan kiri,
Ni contoh Codding programnya...:
#include <conio.h>
#include <stdio.h>
#include <alloc.h>
typedef struct node t_node;
struct node{
int data;
t_node * next;
t_node * prev;
};
t_node * create(int data);
void forwardprint(t_node * kepala);
void backwardprint(t_node * kepala);
t_node * tambahdepan(t_node * kepala,int data);
t_node * tambahbelakang(t_node * ekor,int data);
t_node * hapusdepan(t_node * kepala);
t_node * hapusbelakang(t_node * ekor);
void main(){
t_node * kepala = NULL;
kepala = create(5);
t_node * ekor = create(6);
kepala->next = ekor;
ekor->prev = kepala;
kepala = tambahdepan(kepala, 4);
ekor = tambahbelakang(ekor,7);
forwardprint(kepala);
kepala = hapusdepan(kepala);
ekor = hapusbelakang(ekor);
forwardprint(kepala);
getch();
}
t_node * create(int data){
t_node * temp = (t_node*) malloc(sizeof(t_node*));
temp->next = NULL;
temp->prev = NULL;
temp->data = data;
}
void forwardprint(t_node * kepala){
while(kepala != NULL){
printf("%d ",kepala->data);
kepala = kepala->next;
}
printf("\n");
}
void backwardprint(t_node * ekor){
while(ekor != NULL){
printf("%d ",ekor->data);
ekor = ekor->prev;
}
printf("\n");
}
t_node * tambahdepan(t_node * kepala,int data){
t_node * baru = create(data);
baru->next = kepala;
kepala->prev = baru;
return baru;
}
t_node * tambahbelakang(t_node * ekor,int data){
t_node * baru = create(data);
ekor->next = baru;
baru->prev = ekor;
return baru;
}
t_node * hapusdepan(t_node * kepala){
t_node * temp = NULL;
if( kepala != NULL){
temp = kepala->next;
free(kepala);
}
if( temp !=NULL){
temp->prev = NULL;
}
return temp;
}
t_node * hapusbelakang(t_node * ekor){
t_node * temp = NULL;
if( ekor != NULL){
temp = ekor->prev;
free(ekor);
}
if( temp !=NULL){
temp->next = NULL;
}
return temp;
}
Semoga Bermanfaat.......!
Tidak ada komentar:
Posting Komentar