Jumat, 30 November 2012

Circular Link List


#include<iostream.h>
#include<conio.h>
#include<stdlib.h>
#include<alloc.h>
#define null 0
struct node{
       int info;
       struct node *link;
       public:
              }
              *start,*last;
int main(){
     int ch,n,m,position,i;
     void create(int);
     void addat(int);
     void addbt(int,int);
     void del(int);
     void disp();
     last=null;
     //clrscr();
     while(1){
         cout<<"\nMAIN MENU";
         cout<<"\n1.Buat\n2.Tambah depan\n3.Tambah belakang\n4.Hapus\n5.Tampilkan\n6.Keluar";
         cout<<"\n\nMasukkan pilihan anda : ";
         cin>>ch;
switch(ch)
{
case 1:
cout<<"\n\nMasukkan jumlah elemen : ";
cin>>n;
for(i=0;i<n;i++)
{
cout<<"\n\nMasukkan Elemen : ";
cin>>m;
create(m);
}break;
case 2:
cout<<"\n\nMasukkan Elemen : ";
cin>>m;
addat(m);
break;
case 3:
cout<<"\n\nMasukkan Elemen : ";
cin>>m;
cout<<"\n\nMasukkan Posisinya : ";
cin>>position;
addbt(m,position);
break;
case 4:
if(last==null)
{
cout<<"\n\nList kosong";
continue;
}
cout<<"\n\nMasukkan posisi yang akan dihapus : ";
cin>>m;
del(m);
break;
case 5:
disp();
break;
case 6:
exit(0);
break;
default:
cout<<endl<<endl<<"Pilihan yang salah";
}
}
}
void create(int data)
{
struct node *q,*tmp;
tmp=(struct node  *)malloc(sizeof(struct node));
tmp->info=data;
tmp->link=null;
if(last==null)
{
last=tmp;
tmp->link=last;
}
else
{
tmp->link=last->link;
last->link=tmp;
last=tmp;
}
return;
}


void addat(int data){
     struct node *q,*tmp;
     tmp=(struct node  *)malloc(sizeof(struct node));
     tmp->info=data;
     tmp->link=last->link;
     last->link=tmp;
     }
void addbt(int data,int pos){
                struct node *tmp,*q;
                int i;
                q=last->link;;
                for(i=0;i<pos-1;i++)
                {
                                q=q->link;
                                if(q==last->link)
                                {
                                                cout<<"\n\nDimana r kurang dari "<<pos<<"elemen ";
                                                return;
                                }
                }
                tmp=(struct node  *)malloc(sizeof(struct node));
                tmp->link=q->link;
                tmp->info=data;
                q->link=tmp;
                if(q==last)
                last=tmp;
 }
  void del(int data)
   {
                                struct node *tmp,*q;
                                if(last->link==last&&last->info==data)
                                {
                                                tmp=last;
                                                last=null;
                                                free(tmp);
                                                cout<<"\n\nElemen "<<data<" dihapus";
                                                return;
                                }
                                q=last->link;
                                if(q->info==data)
                                {
                                                tmp=q;
                                                last->link=q->link;
                                                free(tmp);
                                                cout<<"\n\nElemen "<<data<" dihapus ";
                                                return;
                                }
                                while(q->link!=last)
                                {
                                                if(q->link->info==data)
                                                {
                                                                tmp=q->link;
                                                                q->link=tmp->link;
                                                                free(tmp);
                                                                cout<<"\n\nElemen "<<data<<" dihapus ";
                                                                return;
                                                }
                                                q=q->link;
                                }
                                if(q->link==last)
                                {
                                if(q->link->info==data)
                                {
                                                tmp=last;
                                                last=q;
                                                last->link=tmp->link;
                                                free(tmp);
                                                cout<<"\n\nElemen "<<data<<" dihapus ";
                                                return;
                                }
                                }

                                cout<<"\n\nElemen tidak ditemukan ";

 }

void disp()
   {
                struct node *q;
                if(last==null)
                 {
                                   cout<<"\n\nList kosong";
                                   return;
                  }q=last->link;
                  cout<<endl;
                   while(q!=last)
                   {
                                   cout<<q->info<<" ";
                                   q=q->link;
                   }
                   cout<<last->info;
   }

Tidak ada komentar:

Posting Komentar