Program Menghapus Data Single-Linked List Non-Circlar


INSTRUKSI
Buatlah sebuah fungsi untuk menghapus nim yang diinputkan oleh user.
Contoh tampilan:
NIM yang mau dihapus: 2205376
NIM dengan nama Andrew S ditemukan dan telah dihapus 

KODE PROGRAM

#include "iostream.h"
#include "stdio.h"
#include "stdlib.h"
#include "ctype.h"
#include "string.h"

typedef struct TNode
{
    long nim;
    char nama[25];
  TNode *next;
}TNode;

TNode*head;
TNode*tail;

void init()
{
  head=NULL;
  tail=NULL;
}

int isEmpty()
{
  if (head==NULL)
    return 1;
    else
    return 0;
}

void insertdepan();
void insertbelakang();
void inserttengah();
void cari();
void hapus();
void tampil();

main()
{
  int pil;

  do
  {
  cout<<"\n \tPROGRAM UTAMA\n";
  cout<<" ===========================\n";
  cout<<"| 1. Tambah Data Di Depan   |\n";
  cout<<"| 2. Tambah Data Di Tengah  |\n";
  cout<<"| 3. Tambah Data Di Akhir   |\n";
  cout<<"| 4. Mencari Data           |\n";
  cout<<"| 5. Menghapus Data           |\n";
  cout<<"| 6. Tampilkan              |\n";
  cout<<"| 7. Keluar                 |\n";
  cout<<" ===========================\n\n";
  cout<<"Pilihan Anda = ";cin>>pil;
    switch (pil)
    {
    case 1 : insertdepan(); break;
    case 2 : inserttengah(); break;
    case 3 : insertbelakang(); break;
    case 4 : cari(); break;
    case 5 : hapus();break;
    case 6 : tampil(); break;
   }
  } while (pil!=7);
  return pil;
}


void insertdepan()
{
 TNode *baru;
  baru=new TNode;
  cout<<"\n\n------------------------------------";
  cout<<"\nNIM\t: ";
  cin>>baru->nim;
  cout<<"Nama\t: ";
  gets(baru->nama);
  cout<<"------------------------------------\n\n";
  baru->next=NULL;
  if (isEmpty()==1)
  {
    head=baru;
    head->next=NULL;
  }
  else
  {
    baru->next=head;
    head=baru;
  }

  getch();
}

void insertbelakang()
{
  TNode *baru, *bantu;

  baru = new TNode;
  cout<<"\n\n------------------------------------";
  cout<<"\nNIM\t: ";
  cin>>baru->nim;
  cout<<"Nama\t: ";
  gets(baru->nama);
  cout<<"------------------------------------\n\n";
  baru->next=NULL;
  if(isEmpty()==1)
  {
    head=baru;
    head->next=NULL;
  }
  else
  {
    bantu=head;
    while (bantu->next!=NULL)
      bantu=bantu->next;
    bantu->next=baru;
  }
}

void inserttengah()
{
TNode*baru, *bantu;
  long nimbaru;

   baru = new TNode;
  cout<<"\n\n------------------------------------";
  cout<<"\nNIM\t: ";
  cin>>baru->nim;
  cout<<"Nama\t: ";
  gets(baru->nama);
  cout<<"------------------------------------\n\n";
  cout<<"\nTambah Tengah Setelah NIM - ";
  cin>>nimbaru;
  baru->next=NULL;
  if (isEmpty()==1)
  {
    head=baru;
    head->next=NULL;
  }
  else
  {
    bantu=head;
    while (bantu->next!=NULL && bantu->nim!=nimbaru)
    bantu=bantu->next;
    baru->next=bantu->next;
    bantu->next=baru;
  }
}

void cari(){
    TNode *bantu ;   
    bantu=head;
    long caridata;
  cout<<"\n\n------------------------------------";
  cout<<"\nNIM Yang Dicari  \t: ";
  cin>>caridata;
 int ketemu=0;
  if (isEmpty()==0)
      {
        while (bantu!=NULL)
        {
          bantu->nim;
          if(caridata==bantu->nim)
          {
              cout<<"\n\n>>> Data Yang Anda Cari Ditemukan <<<";
              cout<<"\n NIM yang dicari : "<nim;
              cout<<"\n Nama Yang Bersangkutan Adalah "<nama;
              cout<<"\n\n";
              ketemu=1;
          }
          bantu=bantu->next;
        }
        if (ketemu==0)
        {
          cout<<"Data Tidak Ditemukan";
        }
      }
        else cout<<"Data Masih Kosong";
       
      getch();
}


void hapus_simpul(long caridata)
{
 struct TNode *bantu,*hapus;
 if (head==NULL) {
     cout<<"\n Data List Kosong ";
     }
     else
         {
         if ((head->nim==caridata)==1)
             {
             hapus=head;
             head=hapus->next;
              cout<<"\n\n>>> Data Telah Dihapus <<<";
              cout<<"\n NIM yang dihapus : "<nim;
              cout<<"\n NIM dengan nama "<nama <<" ditemukan dan telah dihapus";
              cout<<"\n\n";
             free(hapus);
             }
                else
                    {
                    bantu=head;
                    while ((caridata==bantu->next->nim!=1) && (bantu->next!=NULL))
                        {
                        bantu=bantu->next;
                        }
                        hapus=bantu->next;
                        if (hapus!=NULL)
                            {
                            if (hapus!=tail) { bantu->next=hapus->next;
                            }
                            else
                                {
                                tail=bantu;
                                tail->next=NULL;
                                }
              cout<<"\n\n>>> Data Telah Dihapus <<<";
              cout<<"\n NIM yang dihapus : "<nim;
              cout<<"\n NIM dengan nama "<nama <<" ditemukan dan telah dihapus";
              cout<<"\n\n";
                                free(hapus);   
                            }
                    }
         }
}


void hapus()
{
 long cari;
  cout<<"\nNIM yang akan dihapus :";
  cin>>cari;
  hapus_simpul(cari);
 
}

void tampil()
{
  TNode *bantu;
  int brs=2,i;
cout<<"\n";
  bantu=head;
  while (bantu!=NULL)
  {
    cout<<"\n----------------------------------------\n";
    cout<nim;
    cout<<"  "<nama<<"\n";
    brs++;
    bantu=bantu->next;
    }

  cout<<"\n----------------------------------------\n";
  cout<<"Tekan ENTER untuk Kembali Ke Program Utama\n\n";
  getch();
  }




TAMPILAN PROGRAM








0 komentar:

Posting Komentar