Single Linked List Nama

Berikut ini adalah program pembuatan nama dengan bahasa C menggunakan single linked list yang saya buat sendiri dengan menggunakan Dev-C++ . Berikut adalah codenya :


/*
  tugas ketiga struktur data
  single linked list 
  programmed by a-d-i-p-u-t-r-a
*/

#include <stdio.h>
#include <stdlib.h>

struct node
{
   char info[20];
   struct node *next;
};
typedef struct node simpul;
simpul *namabaru, *awal, *akhir, *q, *namabantu;

void masukan_nama(char *nama_input);
void sisip_nama_depan(char nama_input[20]);
void sisip_nama_akhir(char nama_input[20]);
void sisip_nama_tengah(char nama_input[20]);
void hapus_depan_nama();
void hapus_belakang_nama();
void hapus_tengah_nama();
void tampil();
void menu_tampil();
void menu_sisip();
void menu_hapus();

/*=================== program utama ================================*/
int main(int argc, char *argv[])
{
  menu_tampil();
  system("PAUSE");	
  return 0;
}

void menu_tampil()
{
   int pilih;
   
   
   while(pilih!=0)
   {
     printf("=============================\n");
     printf("    MENU UTAMA LINKED LIST   \n");
     printf("=============================\n");
     printf("    1. Penyisipan List       \n");
     printf("    2. Pengapusan List       \n");
     printf("    0. Keluar                \n");
     printf("=============================\n");
     printf("    Pilihan Anda :       ");
     gotoxy(25,8);scanf("%i",&pilih);
     while(pilih < 0 || pilih>2)
     {
          gotoxy(15,12);printf("salah memasukan angka, ulangi!!!");
          getch();
          gotoxy(15,12);clreol();
          gotoxy(25,8);clreol();
          gotoxy(25,8);scanf("%i",&pilih);
     }
     
     switch(pilih)
     {
        case 1 :  menu_sisip();
                  break;
              
        case 2 :  clrscr();
                  menu_hapus();
                  break;
     }
   }
   exit(0);
}


void menu_hapus()
{
   int pilih_hapus;
   
   clrscr();
   while(pilih_hapus!=0)
   {
     printf("======================\n");
     printf("   MENU PENGAPUSAN    \n");
     printf("======================\n");
     printf(" 1. Pengapusan Depan  \n");
     printf(" 2. Pengapusan Akhir  \n");
     printf(" 3. Pengapusan Tengah \n");
     printf(" 0. Kembali           \n");
     printf("======================\n");
     printf("   Pilihan Anda :   ");
     gotoxy(22,9);scanf("%i",&pilih_hapus);
     while(pilih_hapus < 0 || pilih_hapus > 3)
     {
          gotoxy(15,12);printf("salah memasukan angka, ulangi!!!");
          getch();
          gotoxy(15,12);clreol();
          gotoxy(22,9);clreol();
          gotoxy(22,9);scanf("%i",&pilih_hapus);
     }
     switch(pilih_hapus)
     {
         case 1 :  clrscr();
                   hapus_depan_nama();
                   tampil();
                   getch();
                   clrscr();
                   break;
              
         case 2 :  clrscr();
                   hapus_belakang_nama();
                   tampil();
                   getch();
                   clrscr();
                   break;
            
         case 3 :  clrscr();
                   hapus_tengah_nama();
                   tampil();
                   getch();
                   clrscr();
                   break;
     }
   }
   clrscr();   
}

void menu_sisip()
{
   int pilih_sisip;
   char gl[2];
   char nama_input[20];
   
   clrscr();
   while(pilih_sisip!=0)
   {
     printf("======================\n");
     printf("   MENU PENYISIPAN    \n");
     printf("======================\n");
     printf(" 1. Penyisipan Depan  \n");
     printf(" 2. Penyisipan Akhir  \n");
     printf(" 3. Penyisipan Tengah \n");
     printf(" 0. Kembali           \n");
     printf("======================\n");
     printf(" Pilihan Anda :  ");
     gotoxy(22,9);scanf("%i",&pilih_sisip);
     while(pilih_sisip < 0 || pilih_sisip > 3)
     {
          gotoxy(15,12);printf("salah memasukan angka, ulangi!!!");
          getch();
          gotoxy(15,12);clreol();
          gotoxy(22,9);clreol();
          gotoxy(22,9);scanf("%i",&pilih_sisip);
     }
     
     switch(pilih_sisip)
     {
         case 1 :  clrscr();
                   strcpy(gl,"n");
                   do
                   {   
                       clrscr();
                       masukan_nama(nama_input);
                       sisip_nama_depan(nama_input);
                       printf("mau tambah lagi ? y / n : ");
                       scanf("%c",&gl);
                   }while(strcmpi(gl,"Y")==0);
                   tampil();
                   getch();
                   clrscr();
                   break;
              
         case 2 :  clrscr();
                   strcpy(gl,"n");
                   do
                   {   
                       clrscr();
                       masukan_nama(nama_input);
                       sisip_nama_akhir(nama_input);
                       printf("mau tambah lagi ? y / n : ");
                       scanf("%c",&gl);
                   }while(strcmpi(gl,"Y")==0);
                   tampil();
                   getch();
                   clrscr();
                   break;
            
         case 3 :  clrscr();
                   sisip_nama_tengah(nama_input);
                   tampil();
                   getch();
                   clrscr();
                   break;
     }
   }
   clrscr();   
}

void masukan_nama(char *nama_input)
{
    printf("Masukan Nama : ");
    fflush(stdin);gets(nama_input);
}

void sisip_nama_depan(char nama_input[20])
{
    char temp2[20];
    simpul *namabaru;
    
    strcpy(temp2,nama_input);
    namabaru=(simpul*) malloc(sizeof(simpul));
    strcpy(namabaru->info,temp2);
    if(awal == NULL)
    {
       namabaru->next = NULL;
       akhir = namabaru;
    }
    else
    {
       namabaru->next = awal;
    }
    
    awal = namabaru;
}

void sisip_nama_akhir(char nama_input[20])
{
   simpul *namabaru;
   char temp3[20];
   
   strcpy(temp3,nama_input);
   namabaru=(simpul*) malloc(sizeof(simpul));
   strcpy(namabaru->info,temp3);
   
   if(awal==NULL)
     awal = namabaru;
   else
     akhir->next = namabaru;
     
   namabaru->next = NULL;
   akhir = namabaru;
}

void sisip_nama_tengah(char nama_input[20])
{
   char nama_cari[20];
   simpul *namabaru, *namabantu;
   int ketemu;
   
   if(awal==NULL)
   {
      printf("Tidak ada simpul\n");
      printf("Kita buat baru ye!!!\n");
      printf("Silakan pilih menu sisip depan!!!\n");
      getch();
      menu_sisip();
   }
   else
   {
      printf("Masukan nama setelah nama : ");
      fflush(stdin);gets(nama_cari);
      namabantu = awal;
      ketemu = 0;
      while(ketemu==0 && namabantu != NULL)
      {
          if(strcmpi(nama_cari,namabantu->info)==0)
             ketemu = 1;
          else
             namabantu = namabantu->next;
      }
   }
   
   if(ketemu==1)
   {
      masukan_nama(&nama_input);
      if(namabantu==akhir)
      {
          sisip_nama_akhir(nama_input);
      }
      else
      {
          namabaru=(simpul*) malloc(sizeof(simpul));
          strcpy(namabaru->info,&nama_input);
          namabaru->next = namabantu->next;
          namabantu->next = namabaru;
      }
   }
   else
   {
      printf("nama cari tidak ada dalam list atau list kosong\n");
   }
   
}

void tampil()
{
    char temp[20];
    int i;
    
    i=0;
    q = awal;
    gotoxy(14,11);printf("================");
    while(q!=NULL)
    {
        strcpy(temp, q->info);
        gotoxy(14,12+i);printf("!");
        gotoxy(19,12+i);printf("%s",temp);
        gotoxy(29,12+i);printf("!");
        q = q->next;
        i++;
    }
    gotoxy(14,13+i);printf("================");
}

void hapus_depan_nama()
{
   simpul *hapusnama;
   char delnama[20];
   
   hapusnama = awal;
   if(awal==akhir)
   {
      awal = NULL;
      akhir = NULL;
   }
   else
       awal = awal->next;
       
   strcpy(delnama,hapusnama->info);
   free(hapusnama);
}


void hapus_tengah_nama()
{
     char namacari[20];
     simpul *bantu_hapus,*nama_hapus;
     int ketemu;
     if(awal==NULL)
     {
        printf("Data Memori Kosong");
     }
     else
     {
        printf("Masukan Nama Yang Dicari : ");
        fflush(stdin);gets(namacari);
        bantu_hapus=awal;
        ketemu = 0;
        while(ketemu == 0 && bantu_hapus != NULL)
        {
           if (strcmpi(namacari,bantu_hapus->info)==0)
              ketemu = 1;
           else
              bantu_hapus = bantu_hapus->next;
        }
     }
     
     if(ketemu==1)
     {
       if(bantu_hapus == akhir)
          hapus_belakang_nama();
       else
       {
         nama_hapus = bantu_hapus->next;
         bantu_hapus = nama_hapus->next;
         free(nama_hapus);
       }
     }
     else
        printf("Nama yang dicari tidak ditemukan");
     
}

void hapus_belakang_nama()
{
   simpul *hapusnama;
   char delnama[20];
   
   hapusnama = awal;
   while(hapusnama->next != akhir)
   {
     hapusnama=hapusnama->next;  
   }
   akhir = hapusnama;
   hapusnama = hapusnama->next;
   akhir->next = NULL;
   strcpy(delnama,hapusnama->info);
   free(hapusnama);
}


Moga bermanfaat..kalo masih ada yg error, mohon koreksinya..
Program n makalahnya bisa di download di alamat [ INI ]
Klo bisa dipelajari logika n coding sederhananya…

Iklan

2 thoughts on “Single Linked List Nama

  1. Ping-balik: Linked List Nama Dgn Merge Sort « Mari Terus Belajar Dan Berbagi

  2. makasih infonya bro
    kebetulan lagi nyari nih

    lengkap banget disini ^^

    mana programnya sama pake Dev-C juga
    jangan2 dosen kita sama. haha ======> junior, unikom 08′. Peace! 😀

Silahkan Komentar...

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s