Doubly linear linked list maksudnya adalah linked list lurus dengan pointer ganda. jadi dalam satu stuktur simpul, ada 2 variable bertipe pointer. Yang pertama menunjuk atau berisi alamat simpul sebelumnya (previous node), dan satunya lagi berisi atau menunjuk ke simpul selanjutnya (next node ).
<<<<<< Ilustrasi
contoh program doubly linear linked list dengan kompiler borland c++ ::
#include <constrea>
#include <stdlib.h>
void buat_simpul (int x);
void doubles ();
void awal ();
void cetak ();
void insert ();
void ik ();
void iki ();
void geser (int j);
void it ();
void deletes ();
void dk ();
void dki ();
void dt ();
struct simpul
{
int info ;
struct simpul *left, *right;
};
simpul *p, *first, *last, *q;
int i,o,b,x,d, a[20];
void main()
{
while (1)
{
clrscr ();
cout<<"==DOUBLY LINEAR LINKED LIST==="<<endl;
cout<<"Ferry Kurniawan"<<endl;
cout<<"\n\nData sekarang = ";
cetak();
cout<<endl<<endl;
cout<<"\n0.bentuk data\n1.Insert\n2.Delete\n3.Exit"<<endl;
cout<<"Masukkan pilihan anda : ";cin>>o;
if (o==0)
{
doubles ();
}
if (o==1)
{
insert ();
}
else if (o==2)
{
deletes ();
}
else if (o==3)
{
getch ();
break ;
}
else
{
cout<<"Pilihan salah!"<<endl;
};
}
}
void doubles ()
{
first = NULL;
i=0;
cout<<"masukkan data awal : ";cin>>a[i];
x= a[i];
buat_simpul (x);
awal ();
}
void buat_simpul (int x)
{
p = new simpul;
if (p != NULL)
{
p->info=x;
}
else
{
cout<<"pembuatan simpul gagal"<<endl;
getch ();
}
}
void awal ()
{
first=p;
last=p;
p->left=NULL;
p->right=NULL;
}
void insert ()
{
cout<<"\n1.Insert Kanan\n2.Insert Kiri\n3.Insert Tengah"<<endl;
cout<<"Pilihan anda : ";cin>>b;
if (b==1)
{
cout<<"data yang akan ditambahkan : ";cin>>x;
buat_simpul (x);
ik ();
}
else if (b==2)
{
cout<<"data yang akan ditambahkan : ";cin>>x;
buat_simpul (x);
iki ();
}
else if (b==3)
{
cout<<"data ditambahkan pada posisi ke- : ";cin>>i;
if (i<=6){
geser (i);
}
cout<<"Data yang ingin diinsert = "; cin>>x;
buat_simpul (x);
it ();
}
else
{
cout<<"pilihan salah"<<endl;
}
}
void ik ()
{
last->right =p;
last=p;
p->right=NULL;
}
void iki ()
{
p->right=first;
first->left=p;
first=p;
p->left=NULL;
}
void geser (int j)
{
q=first;
for (int i=1;i<j;i++)
{
q=q->right;
}
}
void it ()
{
p->right=q->right;
p->left=q;
q->right->left=p;
q->right=p;
}
void deletes ()
{
cout<<"\n1.delete kanan\n2.delete kiri\n3.delete tengah"<<endl;
cout<<"pilihan anda : ";cin>>d;
if (d==1)
{
dk ();
}
else if (d==2)
{
dki ();
}
else if (d==3)
{
dt ();
}
else
{
cout<<"pilihan salah"<<endl;
}
}
void dk ()
{
last=last->left;
delete last->right;
last->right=NULL;
}
void dki ()
{
first= first->right;
delete first->left;
first->left=NULL;
}
void dt ()
{
int n;
cout<<"\nHapus urutan ke = ";
cin>>n;
if (n==1)
{
dk ();
}
else
{
for(int i=1;i<(n-1);i++)
{
q->right=q->right->right;
delete q->right->left;
q->right->left=q;
}
if(q->right==NULL)
{
last=q->right;
}
}
}
void cetak()
{
int x;
q=first;
while (q != NULL)
{
x=q->info;
cout<<x<<" ";
q=q->right;
}
}
output :
No comments:
Post a Comment