int allocate_node();
void sisip_awal();
void sisip_akhir();
void sisip_sebelum();
void sisip_setelah();
void tampil_list();
Node *head = NULL, *p;
main() {
int ch;
char ans = 'Y';
while (ans == 'Y'||ans == 'y')
{
puts("MENU");
printf("1. sisip awal\n");
printf("2. sisip akhir\n");
printf("3. sisip sebelum\n");
printf("4. sisip setelah\n");
printf("5. keluar\n");
printf("Masukkan Pilihan :");
scanf("%d", &ch);
switch (ch){
case 1:
printf("\nSisip Awal\n");
sisip_awal();
tampil_list();
break;
case 2:
printf("\nSisip Akhir\n");
sisip_akhir();
tampil_list();
break;
case 3:
printf("\nSisip Sebelum\n");
sisip_sebelum();
tampil_list();
break;
case 4:
printf("\nSisip Setelah\n");
sisip_setelah();
tampil_list();
break;
case 5:
printf("\nTerima Kasih\n");
return 0;
break;
default:
printf("\nPilihan Tidak Ada\n");
break;
}
printf("\nIngin Melanjutkan ?(Y/N)");
scanf(" %c", &ans);
}
return 0;
}
int allocate_node() {
int nilai;
void sisip_awal() {
char jawab;
int hsl;
do {
hsl = allocate_node();
if(hsl == 0) //alokasi gagal
exit(0);
if(head == NULL) { //list msh kosong
p->next = NULL;
head = p; //node baru mjd data pertama
}
else {
p->next = head; //sdh ada existing linked list, insert di awal
head = p;
}
fflush(stdin);
printf("Ada data lagi (y/t) ? ");
jawab = getchar();
} while ((jawab == 'y') || (jawab == 'y'));
}
void sisip_akhir() {
Node *tail;
char jawab;
int hsl;
do
{
hsl = allocate_node();
if(hsl == 0) {
puts("Alokasi memori gagal");
exit(0);
}
if(head == NULL) { //list msh kosong
head = p; //data baru mjd data pertama
tail = p; //sekaligus data terakhir
}
else {
tail->next = p; //arahkan tail->next ke data baru
tail = tail->next; //update posisi tail
}
fflush(stdin);
printf("Ada data lagi (y/t) ? ");
jawab = getchar();
} while ((jawab == 'y') || (jawab == 'y'));
}
void sisip_sebelum() {
Node *before, *prevbefore;
int cari, hsl;
fflush(stdin);
printf("Data tsb akan disisipkan sebelum data berapa : ");
scanf("%d", &cari);
before = head;
if(head->data == cari) //data cari ada di node pertama
sisip_awal();
else
{
hsl = allocate_node();
if(hsl == 0) { //alokasi node baru gagal
puts("Alokasi gagal");
exit(0);
}
do { //telusuri list utk memposisikan
prevbefore = before; //pointer before & prevbefore
if(before->next == NULL) {
printf("Data %d tdk ada dlm list\n", cari);
exit(0);
}
else
before = before->next; //update posisi pointer before
} while(before->data != cari);
void sisip_setelah() {
Node *after;
int hsl, cari;
hsl = allocate_node();
if(hsl == 0) {
printf("Alokasi memori gagal\n");
exit(1);
}
fflush(stdin);
printf("Data tsb disisipkan setelah data berapa : ");
scanf("%d", &cari);
void tampil_list() {
Node *baca;
puts("\nData yang telah diinputkan :");
baca = head;
while(baca != NULL) {
printf("%d\n", baca->data);
baca = baca->next;
}
}
Output Program :
Deskripsi :
Program diatas merupakan program gabungan dalam pengoperasian single linked list, sisip
awal, sisip akhir, sisip before dan sisip after. Untuk menggabung program terserbut hanya
perlu menggabungkan beberapa bagian saja. Yang terutama adalah bagian fungsi main dari
tiap-tiap program kecil, fungsi operasinya, sehingga program yang dijalankan dapat
melakukan compaile sesuai perintah user .