twitter
    ind me at facebook :)

Saturday 7 May 2011

Stuktur data - Doubly linear Linked list [c++]

      Sebelumnya sudah dibahas tentang singly linear linked list. sekarang akan dibahas doubly linear linked list..
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