Selasa, 20 Oktober 2009

Double Linked List



#include<conio.h>
#include<iostream.h>
#include<string.h>
//mendeklarasikan bagian-bagian didalam simpul
struct simpul// pendeklarasian anggota simpul di dalam simpul adalah sbb
{
//long no;
long nrp;
char nma[20];
char jur[30];
simpul *next;
simpul *prev;
};
//pendeklarasian class senarai(kumpulan fungsi-fungsi untuk operasi simpul)
class senarai // pedeklarasian anggot kls dn fungsi
{
private:
    simpul *awal;// pembuatan objek dri simpul berbentuk pointer digunakan sbb acuan pnulisan pembacaan penghapusan pencarian dll
    simpul *akhir; //jadi buat penamabahan data simpul selain simpul pertama
    simpul *hps;
    simpul *sis;
    long i;
    long nr; // inputan nrp user
    char name[20];
    char jr[30];
    char jawab;
public:
    senarai();//konstruktor
    ~senarai();//destruktor
    void tambah(long nr,char name[20],char jr[30]); //d masukan k void isi
    void isi();
    void tampil();
    void tampil2();
    void cari();
    void hapus();
    void ins1();
    void ins2();
       //    void gnti();
}data;
//konstruktor yang mendeklarasikan bahwa pointer awal dan pointer akhir pada saat PROGRAM DIJALANKAN tidak menunjuk ke mana-mana (NULL)
senarai::senarai()
{
awal=NULL;//dfnsi pointer awal pd saat progrm d jalankan pertm kli tdka menunjuk k mana2
akhir=NULL;
}
//destruktor yang mendefinisikan penghapusan seluruh simpul pada saat PROGRAM BERAKHIR, untuk penghematan memori
senarai::~senarai()
{
simpul *dhapus;
while(awal!=NULL)
{
dhapus=awal;
awal=awal->next;
delete dhapus;
}
}
//fungsi untuk tambah data pendefinisian
void senarai::tambah(long nr, char name[20], char jr[30])
{
simpul *baru;// membuat objk baru dari simpul
baru= new simpul;//menunjk pointer baru ke simpul baru
//baru->no=n;
baru->nrp=nr;//menyalin nr yg diinput user ke barunya nrp
strcpy(baru->nma,name); // menyalin name ke barunya nma
strcpy(baru->jur,jr);
if(awal==NULL)
 {
 awal=baru; //pertama pengisian data simpul , masuk k kondisi ini
 baru->prev=NULL;
 }
else
 {
 akhir->next=baru;
 baru->prev=akhir;
 }
 akhir=baru;
 akhir->next=NULL;
}
//looping tambah data, selama user memilih "Y"
void senarai::isi()
{
i=1;
 do
 {
  clrscr();
  data.tampil();
  cout<<endl<<endl<<endl;
  cout<<"Data Nama dan NRP"<<endl;
  cout<<endl<<"NRP    : ";
  cin>>nr;
  cout<<endl<<"Nama   : ";
  cin>>name;
    if(nr>=6300000 && nr<=6399999)
    {
        strcpy(jr, "Teknik Informatika");
    }
    else if(nr>=3300000 && nr<=3399999)
    {
        strcpy(jr, "Manajemen Informatika");
    }
    else if (nr>=4300000 && nr<=4399999)
    {
    strcpy (jr, "Administrasi Perkantoran");
    }
    else
    {
        clrscr();
        cout<<"Maaf, Data NRP Yang Anda Masukan Salah";
         break;
    }
  //data.gnti();
  data.tambah(nr,name,jr);
  cout<<endl<<"Apakah Akan Menambah Data (Y/N) : ";
  cin>>jawab;
  i++;
 }
 while (jawab=='Y' || jawab=='y');
}
//fungsi tampilkan data yang sudah ada
void senarai::tampil()
{
 i=1;
 simpul *baca;
 baca=awal;
 cout<<"ÄÄÄÄÄÄÄPROGRAM STUDI MANAJEMEN INFORMATIKAÄÄÄÄÄÄÄ"<<endl;
 while (baca!=NULL)
  {
   cout<<endl<<i<<". NRP         : "<<baca->nrp;
   cout<<endl<<ends<<ends<<ends<<"NAMA        : "<<baca->nma;
   cout<<endl<<ends<<ends<<ends<<"KONSENTRASI : "<<baca->jur;

   baca=baca->next;
   i++;
  }
}

void senarai::tampil2()
{
 //i=1;
 simpul *baca;
 baca=akhir;
 cout<<"ÄÄÄÄÄÄÄPROGRAM STUDI MANAJEMEN INFORMATIKAÄÄÄÄÄÄÄ"<<endl;
 while (baca!=NULL)
  {
   cout<<endl<</*i*/"   NRP         : "<<baca->nrp;
   cout<<endl<<ends<<ends<<ends<<"NAMA        : "<<baca->nma;
   cout<<endl<<ends<<ends<<ends<<"KONSENTRASI : "<<baca->jur;

   baca=baca->prev;
   //i++;
  }
}

//fungsi mencari data berdasarkan "key" nama
void senarai::cari()
{
 long g;
 simpul *car;
 car=awal;
 data.tampil();
 cout<<endl<<endl<<"Pencarian Berdasarkan NRP"<<endl;
 cout<<endl<<"Masukan NRP: ";
 cin>>g;
 cout<<endl;
 while(car!=NULL)
 {
  if(g==car->nrp)
  {
  cout<<"DATA YANG ANDA CARI: "<<endl<<endl;
  cout<<"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ"<<endl;
  //cout<<" NO          : "<<car->no<<endl;
  cout<<" NRP         : "<<car->nrp<<endl;
  cout<<" Nama        : "<<car->nma<<endl;
  cout<<" Konsentrasi : "<<car->jur<<endl;
  cout<<"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ"<<endl;
  }
  car=car->next;
 }
}
//fungsi menghapus data berdasarkan "key" nama
void senarai::hapus()
{
long h;
data.tampil();
cout<<endl<<endl<<"Masukan NRP Data Yang Akan Anda Hapus: ";
cin>>h;
simpul *posisi;
simpul *dat;
simpul *dt;
simpul *seln;
dt=NULL;
hps=NULL;
dat=awal;
 while(dat!=NULL)
 {
  if(h==dat->nrp)
  {
  dt=dat;
  break;
  }
  hps=dat;
  dat=dat->next;
 }
 posisi=dt;
 seln=posisi->next;
//if (posisi!=NULL)
//{
 if(hps==NULL)
 {
 awal=awal->next;
 seln->prev=NULL;
 //data.gnti();
 }
 else
 {
    if(seln==NULL)
    {
    hps->next=NULL;
    akhir=hps;
    //data.gnti();
    }
    else
    {
    seln->prev=posisi->prev;
    hps->next=posisi->next;
    //data.gnti();
    }
 }
delete posisi;
cout<<endl;
data.tampil();
}

void senarai::ins1()
{
long j;
long sisnr;
char sisnm[20];
char sisjr[30];
data.tampil();
cout<<endl<<endl<<"Sebelum NRP Data Apa Anda Akan Menyisipkan Data? ";
cin>>j;
cout<<endl<<"SISIPKAN DATA SEBELUM"<<endl;
cout<<"Masukan NRP : ";
cin>>sisnr;
cout<<endl<<"Masukan Nama: ";
cin>>sisnm;

    if(sisnr>=6300000 && sisnr<=6399999)
    {
        strcpy(sisjr, "Teknik Informatika");
    }
    else if(sisnr>=3300000 && sisnr<=3399999)
    {
        strcpy(sisjr, "Manajemen Informatika");
    }
    else if (sisnr>=4300000 && sisnr<=4399999)
    {
        strcpy (sisjr, "Administrasi Perkantoran");
    }
    else
    {
        clrscr();
        cout<<"Maaf, Data NRP Yang Anda Masukan Salah";
        goto x;
    }

simpul *sisip;
sisip= new simpul;
simpul *car;
simpul *dt;
simpul *posisi;
dt=NULL;
sis=NULL;
car=awal;

sisip->nrp=sisnr;
strcpy(sisip->nma, sisnm);
strcpy(sisip->jur, sisjr);

while(car!=NULL)
{
 if(j==car->nrp)
   {
   dt=car;
   break;
   }
   sis=car;
   car=car->next;
}
  posisi=dt;
 // seln=dt->next;
  if(sis==NULL)
  {
    dt->prev=sisip;
    sisip->next=awal;
    sisip->prev=NULL;
    awal=sisip;
       //    data.gnti();
  }
  else
  {
       //    sisip->no=sis->no+1;

    sisip->prev=posisi->prev;
    posisi->prev=sisip;
    sisip->next=sis->next;
    sis->next=sisip;
    //data.gnti();
  }
  cout<<endl;
  data.tampil();

  x:
}

void senarai::ins2()
{
long k;
long sisnr;
char sisnm[20];
char sisjr[30];
data.tampil();
cout<<endl<<endl<<"Setelah NRP Data Apa Anda Akan Menyisipkan Data? ";
cin>>k;
cout<<endl<<"SISIPKAN DATA SETELAH"<<endl;
cout<<"Masukan NRP : ";
cin>>sisnr;
cout<<endl<<"Masukan Nama: ";
cin>>sisnm;

    if(sisnr>=6300000 && sisnr<=6399999)
    {
        strcpy(sisjr, "Teknik Informatika");
    }
    else if(sisnr>=3300000 && sisnr<=3399999)
    {
        strcpy(sisjr, "Manajemen Informatika");
    }
    else if (sisnr>=4300000 && sisnr<=4399999)
    {
    strcpy (sisjr, "Administrasi Perkantoran");
    }
    else
    {
        clrscr();
        cout<<"Maaf, Data NRP Yang Anda Masukan Salah";
        goto x;
    }

simpul *sisip;
sisip= new simpul;
simpul *car;
simpul *dt;
simpul *sis;
dt=NULL;
sis=NULL;
car=awal;

sisip->nrp=sisnr;
strcpy(sisip->nma, sisnm);
strcpy(sisip->jur, sisjr);

while(car!=NULL)
{
 if(k==car->nrp)
   {
   dt=car;
   break;
   }
  // sis=car;
   car=car->next;
}
  sis=dt->next;
  //posisi=dt;
  if(sis==NULL)
  {
    akhir=sisip;
    dt->next=sisip;
    sisip->prev=dt;
    sisip->next=NULL;
    //data.gnti();
  }
  else
  {
    sis->prev=sisip;
    sisip->prev=dt;
    sisip->next=dt->next;
    dt->next=sisip;
    //data.gnti();
  }
  cout<<endl;
  data.tampil();
  x:
}

/*void senarai::gnti()
{
    simpul *ganti;
    ganti=awal;
    i=1;
    while(ganti!=NULL)
    {
     ganti->no=i;
     i++;
     ganti=ganti->next;
    }
}*/


//fungsi main menu

void main()
{
char opt1;
char opt2;
menu:
 clrscr();
 cout<<"ÄÄÄÄÄÄMENU UTAMAÄÄÄÄÄÄÄ"<<endl;
 cout<<endl<<endl;
 cout<<"1. Input Data Nama Dan Nomor Telepon"<<endl;
 cout<<"2. Tampilkan Data Queue"<<endl;
 cout<<"3. Tampil Data Stack"<<endl;
 cout<<"4. Cari Data No Telepon By Nama"<<endl;
 cout<<"5. Hapus Data"<<endl;
 cout<<"6. Sisipkan Data Sebelum"<<endl;
 cout<<"7. Sisipkan Data Setelah"<<endl;
 cout<<"8. Exit"<<endl;
 cout<<endl<<"Silakan Masukan Pilihan Anda (Misal.1): ";
 cin>>opt1;
 if (opt1=='1')
 goto a;
 else if (opt1=='2')
 goto b;
 else if (opt1=='3')
 goto c;
 else if (opt1=='4')
 goto d;
 else if (opt1=='5')
 goto e;
 else if (opt1=='6')
 goto f;
 else if (opt1=='7')
 goto g;
 else
 goto end;
 a:
 {
 clrscr();
 data.isi();
 cout<<endl<<endl<<"Apakah Akan Kembali Ke Menu Utama (Y/N): ";
 cin>>opt2;
 if (opt2=='Y' || opt2=='y')
 goto menu;
 else
 goto end;
 }
 b:
 {
 clrscr();
 data.tampil();
 cout<<endl<<endl<<"Apakah Akan Kembali Ke Menu Utama (Y/N): ";
 cin>>opt2;
 if (opt2=='Y' || opt2=='y')
 goto menu;
 else
 goto end;
 }
 c:
 {
 clrscr();
 data.tampil2();
 cout<<endl<<endl<<"Apakah Akan Kembali Ke Menu Utama (Y/N): ";
 cin>>opt2;
 if (opt2=='Y' || opt2=='y')
 goto menu;
 else
 goto end;
 }
 d:
 {
 clrscr();
 data.cari();
 cout<<endl<<endl<<"Apakah Akan Kembali Ke Menu Utama (Y/N): ";
 cin>>opt2;
 if (opt2=='Y' || opt2=='y')
 goto menu;
 else
 goto end;
 }
 e:
 {
 clrscr();
 data.hapus();
 cout<<endl<<endl<<"Apakah Akan Kembali Ke Menu Utama (Y/N): ";
 cin>>opt2;
 if (opt2=='Y' || opt2=='y')
 goto menu;
 else
 goto end;
 }
 f:
 {
 clrscr();
 data.ins1();
 cout<<endl<<endl<<"Apakah Akan Kembali Ke Menu Utama (Y/N): ";
 cin>>opt2;
 if (opt2=='Y' || opt2=='y')
 goto menu;
 else
 goto end;
 }
 g:
 {
 clrscr();
 data.ins2();
 cout<<endl<<endl<<"Apakah Akan Kembali Ke Menu Utama (Y/N): ";
 cin>>opt2;
 if (opt2=='Y' || opt2=='y')
 goto menu;
 else
 goto end;
 }

 end:
 getch();
}

mudah-mudahan postingan ini dapat menjawab pertanyaan dari sahabat blogger dan berguna juga untuk yang lain..

selamat mencoba... :D