twitter
    ind me at facebook :)

Saturday 7 May 2011

Struktur data - Linear Singly Linked List[c++]

Linked list adalah sejumlah objek yang di link atau dihubungkan satu sama lain sehingga membentuk sebuah list. Objek itu sendiri adalah gabungan beberapa variabel yang dijadikan satu kelompok / structure / record yang dibentuk dengan perintah struct. Tiap elemen dapat memiliki tipe data tersendiri yang berbeda dengan tipe data elemen lain. Untuk menghubungkan satu objek dengan objek laiinya, diperlukan paling tidak sebuah variable yang bertipe pointer. variable pointer tersebut merupakan salah satu variable dalam struktur objek.

LINEAR SINGLY LINKED LIST.
maksudnya adalah linked list lurus dengan pointer tunggal. Artinya dalam satu struktur simpul hanya ada satu variable yang bertipe pointer, dimana isinya adalah menunjuk ke alamat simpul berikutnya atau next node.


ilustrasi :
berikut contoh programnya dengan kompiler borland c++ ::


#include <constrea>
#include <stdlib.h>


int a[99]={25,12,17,10,15,5,14};

void buat_simpul (int x);
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 node
{
 int info ;
 struct node *link;
};
typedef struct node simpul;
simpul *p,*first, *last,  *q;

int i,o,b,x,d;


void main()
{
    first = NULL;

   i=0;
    x= a[i];

    buat_simpul (x);
    awal ();

   for ( i=1;i<=6;i++)
   {
   x=a[i];
     buat_simpul (x);
     ik ();
   }


    while (1)
    {
      clrscr ();
        cout<<"==LINKED LIST==="<<endl;
      cout<<"Ferry Kurniawan"<<endl;
      cout<<"\n\nData sekarang = ";
      cetak();
      cout<<endl<<endl;
        cout<<"\n1.Insert\n2.Delete\n3.Exit"<<endl;

        cout<<"Masukkan pilihan anda : ";cin>>o;

        if (o==1)
        {
            insert ();
        }
        else if (o==2)
        {
            deletes ();
        }
      else if (o==3)
       {
           getch ();
         break ;

       }
       else
       {
           cout<<"Pilihan salah!"<<endl;
       };

    }

}


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->link=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->link =p;
    last=p;
    p->link=NULL;
}


void iki ()
{
    p->link=first;
    first=p;
}

void geser (int j)
{
    q=first;

    for (int i=1;i<j;i++)
    {
        q=q->link;
    }
}


void it ()
{
  p->link=q->link;
  q->link=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 ()
{
     q=first;

     while (q->link!=last)
    {
           q=q->link;
        delete last;
         last= q;
         q->link=NULL;
    }
}


void dki ()
{
    q=first->link;
   delete first;
   first=q;
}

void dt ()
{
     int n;
  node *r;
   q=first;
    cout<<"\nHapus urutan ke = ";
   cin>>n;

   if(n==1)
    {
       dki ();
   }
   else
   {
       for(int i=1;i<(n-1);i++)
       {
          q=q->link;
           r=q->link->link;
           delete q->link;
           q->link=r;
      }
      if(q->link==NULL)
       {
          last=q->link;
       }
   }
}

void cetak()
{
    int x;
   q=first;
   while (q != NULL)
   {
       x=q->info;
      cout<<x<<" ";
      q=q->link;
   }
}




No comments:

Post a Comment