Anda di halaman 1dari 15

CONTOH SINGLE LINGKED LIST

#include<conio.h>

#include<stdio.h>

#include<string.h>

#include<stdlib.h>

struct karyawan{

char nama[20];

char alamat[30];

char telepon[12];

struct karyawan *berikut;

};

struct karyawan *kepala,*akhir;

void menu();

void isi_data();

void hapus_data();

void tampil_data();

void sisip_depan();

void hapus_depan();

void sisip_belakang();

void hapus_belakang();

void sisip_tengah();

void hapus_tengah();

main()
{

/*menginisialisasi list berkait*/

kepala=NULL;

char pilih='0';

while(pilih!='4')

menu();

pilih=getche();

switch(pilih)

case'1':{

while(pilih!='0')

isi_data();

pilih=getche();

switch(pilih)

case'0':break;

case'1':sisip_depan();break;

case'2':sisip_tengah();break;

case'3':sisip_belakang();break;

};break;

case'2':{
while(pilih!='0')

hapus_data();

pilih=getche();

switch(pilih)

case'0':break;

case'1':hapus_depan();break;

case'2':hapus_tengah();break;

case'3':hapus_belakang();break;

};break;

case'3':tampil_data();break;

case'4':break;

return 0;

/*menampilkan menu*/

void menu()

textbackground(WHITE);

textcolor(BLACK);

clrscr();
gotoxy(35,10);cprintf("MENU PILIHAN");

gotoxy(32,11);cprintf("------------------");

gotoxy(32,12);cprintf("1. ISI DATA ");

gotoxy(32,13);cprintf("2. HAPUS DATA ");

gotoxy(32,14);cprintf("3. TAMPIL DATA ");

gotoxy(32,15);cprintf("4. SELESAI");

gotoxy(32,16);cprintf("------------------");

gotoxy(32,18);cprintf("PILIHAN ANDA : ");

/*menampilkan isi data*/

void isi_data()

textbackground(WHITE);

textcolor(BLACK);

clrscr();

gotoxy(36,10);cprintf("ISI DATA");

gotoxy(28,11);cprintf("------------------------");

gotoxy(29,12);cprintf("0. KEMBALI KE MENU ");

gotoxy(29,13);cprintf("1. PENYISIPAN DEPAN ");

gotoxy(29,14);cprintf("2. PENYISIPAN TENGAH ");

gotoxy(29,15);cprintf("3. PENYISIPAN BELAKANG");

gotoxy(28,16);cprintf("------------------------");

gotoxy(29,18);cprintf("PILIHAN ANDA : ");

}
/*menampilkan hapus data*/

void hapus_data()

textbackground(WHITE);

textcolor(BLACK);

clrscr();

gotoxy(35,10);cprintf("HAPUS DATA");

gotoxy(27,11);cprintf("---------------------------");

gotoxy(28,12);cprintf("0. KEMBALI KE MENU ");

gotoxy(28,13);cprintf("1. HAPUS DATA DI DEPAN ");

gotoxy(28,14);cprintf("2. HAPUS DATA DI TENGAH ");

gotoxy(28,15);cprintf("3. HAPUS DATA DI BELAKANG");

gotoxy(27,16);cprintf("---------------------------");

gotoxy(28,18);cprintf("PILIHAN ANDA : ");

/*mengisi data baru penyisipan depan*/

void sisip_depan()

struct karyawan *p;

char nama[20];

int i;

clrscr();
i=1;

gotoxy(31,10);printf("DATA KARYAWAN KE-%d",i);

gotoxy(15,11);printf("-----------------------------------------------");

gotoxy(15,12);printf("NAMA (?-berhenti) : ");fflush(stdin);gets(nama);

while(nama[0]!='?'){

p=new karyawan;

strcpy(p->nama,nama);

gotoxy(15,13);printf("Alamat : ");gets(p->alamat);

gotoxy(15,14);printf("Nomor Telepon : ");gets(p->telepon);

if(kepala==NULL)

akhir=p;

p->berikut=NULL;

else

p->berikut=kepala;

kepala=p;

clrscr();

gotoxy(31,10);printf("DATA KARYAWAN KE-%d\n",++i);

gotoxy(15,11);printf("-----------------------------------------------");

gotoxy(15,12);printf("NAMA (?-berhenti) : ");gets(nama);

/*menghapus data*/
void hapus_depan()

char jawab;

struct karyawan *p1,*simpan;

clrscr();

p1=kepala;

if(kepala==NULL)

gotoxy(31,12);printf("List kosong....!!\n");

getch();

else

gotoxy(29,9);printf("Data yang akan dihapus");

gotoxy(17,10);printf("---------------------------------------------");

gotoxy(17,11);printf("Nama : %s",p1->nama);

gotoxy(17,12);printf("Alamat : %s",p1->alamat);

gotoxy(17,13);printf("Nomor telepon : %s",p1->telepon);

gotoxy(17,15);printf("Dihapus (Y/T) ? ");jawab=getche();

if(jawab=='Y'||jawab=='y'){

if(kepala==akhir)

kepala=NULL;

akhir=NULL;

else

kepala=p1->berikut;
delete p1;

/*mengisi data baru penyisipan belakang*/

void sisip_belakang()

struct karyawan *p;

char nama[20];

int i;

clrscr();

i=1;

gotoxy(31,10);printf("DATA KARYAWAN KE-%d",i);

gotoxy(15,11);printf("-----------------------------------------------");

gotoxy(15,12);printf("NAMA (?-berhenti) : ");fflush(stdin);gets(nama);

while(nama[0]!='?'){

p=new karyawan;

strcpy(p->nama,nama);

gotoxy(15,13);printf("Alamat : ");gets(p->alamat);

gotoxy(15,14);printf("Nomor Telepon : ");gets(p->telepon);

if(kepala==NULL)

kepala=p;
p->berikut=NULL;

akhir=kepala;

else

p->berikut=NULL;

akhir=kepala;

while(akhir->berikut!=NULL)

akhir=akhir->berikut;

akhir->berikut=p;

akhir=p;

clrscr();

gotoxy(31,10);printf("DATA KARYAWAN KE-%d\n",++i);

gotoxy(15,11);printf("-----------------------------------------------");

gotoxy(15,12);printf("NAMA (?-berhenti) : ");gets(nama);

/*menghapus data di belakang*/

void hapus_belakang()

char jawab;

struct karyawan *p1,*p2;

clrscr();
if (kepala==NULL)

gotoxy(31,12);printf("List kosong...!!\n");

getch();

else

p1=kepala;

p2=kepala;

while(p1->berikut!=NULL)

p1=p1->berikut;

while(p2->berikut!=p1)

p2=p2->berikut;

gotoxy(29,9);printf("Data yang akan dihapus");

gotoxy(17,10);printf("---------------------------------------------");

gotoxy(17,11);printf("Nama : %s",p1->nama);

gotoxy(17,12);printf("Alamat : %s",p1->alamat);

gotoxy(17,13);printf("Nomor telepon : %s",p1->telepon);

gotoxy(17,15);printf("Dihapus (Y/T) ? ");jawab=getche();

if(jawab=='Y'||jawab=='y'){

p2->berikut=NULL;

p2=akhir;
delete p1;

/*mengisi data baru penyisipan tengah*/

void sisip_tengah()

struct karyawan *p,*x;

char nama[20];

int i;

clrscr();

i=1;

gotoxy(31,10);printf("DATA KARYAWAN KE-%d",i);

gotoxy(15,11);printf("-----------------------------------------------");

gotoxy(15,12);printf("NAMA (?-berhenti) : ");fflush(stdin);gets(nama);

while(nama[0]!='?'){

p=new karyawan;

strcpy(p->nama,nama);

gotoxy(15,13);printf("Alamat : ");gets(p->alamat);

gotoxy(15,14);printf("Nomor Telepon : ");gets(p->telepon);

if(kepala==NULL)

kepala=p;
akhir=p;

p->berikut=NULL;

else

x=kepala;

if(kepala==akhir)

akhir->berikut=p;

akhir=p;

akhir->berikut=NULL;

else

while(p->nama>x->berikut->nama)

{x=x->berikut;

p->berikut=x->berikut;

x->berikut=p;

clrscr();

gotoxy(31,10);printf("DATA KARYAWAN KE-%d\n",++i);

gotoxy(15,11);printf("-----------------------------------------------");

gotoxy(15,12);printf("NAMA (?-berhenti) : ");gets(nama);

}
}

/*menghapus data di tengah*/

void hapus_tengah()

char jawab,hnama[20];

struct karyawan *p1,*p2;

clrscr();

if(kepala==NULL)

gotoxy(31,12);printf("List kosong...!!\n");

getch();

else

gotoxy(20,12);printf("Nama yang akan dihapus : ");scanf("%s",&hnama);

/*cari data*/

p2=NULL;

p1=kepala;

while(p1&&strcmp(hnama,p1->nama))

p2=p1;

p1=p1->berikut;

clrscr();

if(!p1)

{
gotoxy(26,12);printf("Data tersebut tidak ada...!!\n");

getch();

else

gotoxy(29,9);printf("Data yang akan dihapus");

gotoxy(17,10);printf("---------------------------------------------");

gotoxy(17,11);printf("Nama : %s",p1->nama);

gotoxy(17,12);printf("Alamat : %s",p1->alamat);

gotoxy(17,13);printf("Nomor telepon : %s",p1->telepon);

gotoxy(17,15);printf("Dihapus (Y/T) ? ");jawab=getche();

if(jawab=='Y'||jawab=='y'){

if(!p2)

kepala=p1->berikut;

else

p2->berikut=p1->berikut;

delete p1;

/*menampilkan data penyisipan depan, tengah dan belakang*/

void tampil_data()

int i=1;
struct karyawan *p;

p=kepala;

clrscr();

/*mencetak judul*/

printf("\n\n\n DATA KARYAWAN PT. SINAR AGUNG\n");

printf(" TAHUN 2005 \n\n");

printf(" +-----+----------------------+--------------------------------+--------------+\n");

printf(" | No. | NAMA | ALAMAT | TELEPON |\n");

printf(" +-----+----------------------+--------------------------------+--------------+\n");

while(p){

printf(" | %2d | %-20s | %-30s | %-12s |\n",i++,p->nama,p->alamat,p->telepon);

p=p->berikut;

printf(" +-----+----------------------+--------------------------------+--------------+\n");

getch();

Anda mungkin juga menyukai