BAB I
SINGLE LINKED LIST : INSERT
1. Menu SLL Insert Int
a. Listing program
#include <stdio.h>
#include <stdlib.h>
void info_program();
void menu();
typedef struct simpul Node;
struct simpul{
int data;
Node *next;
};
Node *head=NULL, *p;
void insert_akhir();
void insert_awal();
void insert_after();
void insert_before();
void alokasi();
void tampil();
int main()
{
puts("\tPROGRAM SINGLE LINKED LIST INSERT");
puts("\t=================================\n");
do{
info_program();
fflush(stdin);
menu();
puts("");
}while(1);
return 0;
}
void menu()
{
int pilihan;
printf("Masukkan pilihan menu anda\t: ");
scanf("%d", &pilihan);
if(pilihan==1 || pilihan==2)
alokasi();
if(pilihan==1)
insert_awal();
else if(pilihan==2)
insert_akhir();
else if(pilihan==3)
insert_after();
else if(pilihan==4)
insert_before();
else if(pilihan==5)
tampil();
else
exit(0);
}
void info_program()
{
puts("Pilihan menu :");
puts("1. Insert Awal");
puts("2. Insert Akhir");
puts("3. Insert After");
puts("4. Insert Before");
puts("5. Tampil");
puts("6. Keluar");
}
void alokasi()
{
int nilai;
p=(Node *) malloc(sizeof(Node));
if(p==NULL)
exit(0);
printf("Masukkan angka yang disimpan\t: ");
scanf("%d", &nilai);
p->data = nilai;
p->next = NULL;
}
void tampil()
{
Node *baca;
baca = head;
while(baca != NULL)
{
printf("%d ", baca->data);
baca = baca ->next;
}
puts("");
}
void insert_awal()
{
if(head==NULL)
head = p;
else{
p->next = head;
head=p;
}
}
void insert_akhir()
{
Node *tail;
tail=head;
if(head==NULL){
head = p;
}else{
while(tail->next!=NULL){
tail=tail->next;
}
tail->next = p;
tail = p;
}
}
void insert_after()
{
Node *after;
int x, kondisi=0;
printf("Setelah angka berapa disisipkan? ");
scanf("%d", &x);
alokasi(); //tidak perlu menjabarkan p=(Node *)malloc.... bla bla
//karena nantinya membuat duplikasi kode, jadi panggil saja
fungsi alokasi()
after = head;
while(after->data != x){
if(after->next == NULL){
printf(" Maaf, angka %d tidak ada!\n", x);
kondisi=1; //jika hanya ada break dan tidak ada
kondisi=1,
break; //maka alokasi() pada fungsi ini akan tetap
dimasukkan ke fungsi tampil()
}else
after = after->next;
}
if(kondisi==0){
p->next = after->next;
after->next = p;
}
}
void insert_before()
{
Node *bef, *pbef;
int x, kondisi=0;;
printf("Sebelum angka berapa disisipkan? ");
scanf("%d", &x);
alokasi();
bef = head;
if(bef->data == x)
insert_awal();
else{
while(bef->data != x){
if(bef->next == NULL){
printf(" Maaf angka %d tidak ada!\n", x);
kondisi=1;
break;
}else{
pbef = bef;
bef = bef->next;
}
}
if(kondisi==0){
p->next = bef;
pbef->next = p;
}
}
}
b. Capture
2. Menu SLL Insert Struct
a. Listing program
#include <stdio.h>
#include <stdlib.h>
#define MAX 5
void info_program();
void menu();
typedef struct simpul Node;
struct simpul{
int data;
char name[MAX];
float value;
Node *next;
};
Node *head=NULL, *p;
void insert_akhir();
void insert_awal();
void insert_after();
void insert_before();
void alokasi();
void tampil();
int main()
{
puts("\tPROGRAM SINGLE LINKED LIST INSERT");
puts("\t\t DATA STRUCT");
puts("\t=================================\n");
do{
info_program();
fflush(stdin);
menu();
puts("");
}while(1);
return 0;
}
void menu()
{
int pilihan;
printf("Masukkan pilihan menu anda : ");
scanf("%d", &pilihan);
if(pilihan==1 || pilihan==2)
alokasi();
if(pilihan==1)
insert_awal();
else if(pilihan==2)
insert_akhir();
else if(pilihan==3)
insert_after();
else if(pilihan==4)
insert_before();
else if(pilihan==5)
tampil();
else
exit(0);
}
void info_program()
{
puts("Pilihan menu :");
puts("1. Insert Awal");
puts("2. Insert Akhir");
puts("3. Insert After");
puts("4. Insert Before");
puts("5. Tampil");
puts("6. Keluar");
}
void alokasi()
{
p=(Node *) malloc(sizeof(Node));
if(p==NULL)
exit(0);
printf("Masukkan nomor\t: ");
scanf("%d", &p->data);
fflush(stdin);
printf("Masukkan nama\t: ");
gets(p->name);
fflush(stdin);
printf("Masukkan nilai\t: ");
scanf("%f", &p->value);
p->next = NULL;
}
void tampil()
{
Node *baca;
baca = head;
printf("=========================\n");
printf("No.\t Nama\t Nilai\t\n");
printf("=========================\n");
while(baca != NULL)
{
printf("%d\t %s\t %0.1f\n", baca->data, baca->name, baca-
>value);
baca = baca->next;
}
printf("=========================\n");
}
void insert_awal()
{
if(head==NULL)
head = p;
else{
p->next = head;
head=p;
}
}
void insert_akhir()
{
Node *tail;
tail=head;
if(head==NULL){
head = p;
}else{
while(tail->next!=NULL)
tail=tail->next;
tail->next = p;
tail = p;
}
}
void insert_after()
{
Node *after;
int x, kondisi=0;
printf("Setelah angka berapa disisipkan? ");
scanf("%d", &x);
alokasi();
after = head;
while(after->data != x){
if(after->next == NULL){
printf(" Maaf nomor %d tidak ada!\n", x);
kondisi=1;
break;
}else{
after = after->next;
}
}
if(kondisi==0){
p->next = after->next;
after->next = p;
}
}
void insert_before()
{
Node *bef, *pbef;
int x, kondisi=0;
printf("Sebelum angka berapa disisipkan? ");
scanf("%d", &x);
alokasi();
bef = head;
if(bef->data==x)
insert_awal();
else{
while(bef->data != x){
if(bef->next == NULL){
printf(" Maaf nomor %d tidak ada!\n", x);
kondisi=1;
break;
}else{
pbef = bef;
bef = bef->next;
}
}
if(kondisi==0){
p->next = bef;
pbef->next = p;
}
}
}
b. Capture