Anda di halaman 1dari 9

LAPORAN RESMI MENU SSL ALGORITMA

DAN STRUKTUR DATA

NAMA : Adhitia Nur Riski


KELAS : D3 PJJ Fresh TI 2018
NRP : 2103187017
MATA KULIAH : Praktikum ASD
Percobaan 1
Algoritma dan Struktur Data
Nama Program : Program membuat menu ssl
Bahasa Pemrogramam :C
Compiler : Code Blocks
Script program :
#include <stdio.h>
#include <stdlib.h>

typedef struct simpul Node;


struct simpul {
int data;
Node *next;
};

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;

printf("\nNilai yang akan disimpan dalam node baru : ");


scanf("%d", &nilai);
p = (Node *) malloc(sizeof(Node));
if(p == NULL)
return 0;
else{
p->data = nilai;
p->next = NULL;
return 1;
}
}

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);

p->next = before; //sambungkan node baru dg existing LL


prevbefore->next = p;
}
}

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);

after = head; //telusuri list utk mendptkan posisi


while(after->data != cari) //node yg akan disisipi pd posisi stlhnya
{
if(after->next == NULL) //sampai data terakhir, data gak ketemu
{
printf("Data %d tdk ada dlm list\n", cari);
exit(1);
}
else
after = after->next; //update posisi after
}

p->next = after->next; //sambungkan node baru dg existing LL


after->next = p;
}

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 .

Anda mungkin juga menyukai