Elemen-elemen dihubungkan dengan dua pointer dalam satu elemen. Struktur ini menyebabkan list melintas baik ke depan maupun ke belakang.Masing-masing elemen pada double linked list terdiri dari tiga bagian, disamping
data dan pointer next, masing-masing elemen dilengkapi dengan pointer prev
yang menunjuk ke elemen sebelumnya. Double
linked list dibentuk
dengan menyusun sejumlah elemen sehingga pointer next
menunjuk ke elemen
yang mengikutinya dan pointer prev menunjuk ke elemen yang mendahuluinya. Untuk menunjukkan head dari double linked
list, maka pointer prev
dari elemen pertama menunjuk NULL. Untuk menunjukkan tail
dari double
linked list tersebut,
maka pointer next dari elemen terakhir menunjuk NULL. Susunan elemen yang
dihubungkan dalam bentuk double linked list dapat dilihat pada Gambar
di bawah ini
Untuk melintas kembali melalui double
linked list, kita gunakan
pointer prev dari elemen yang berurutan pada arah tail
ke head. Double linked
list mempunyai
fleksibilitas
yang lebih tinggi daripada single
linked list dalam
perpindahan pada list. Bentuk ini sangat berguna ketika akan meletakkan suatu elemen pada
list dan dapat memilih
dengan lebih bijaksana bagaimana memindahkannya. Sebagai
contoh, salah satu fleksibilitas dari double linked
list adalah dalam hal
memindahkan elemen daripada
menggunakan single linked list.
Contoh Program Double Linked List :
#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;
}
Contoh Program Double Linked List :
#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;
}
Tidak ada komentar:
Posting Komentar