Professional Documents
Culture Documents
I. Tujuan
Untuk mengakses elemen dalam linked list, dimulai dari head dan
menggunakan pointer next dari elemen selanjutnya untuk berpindah dari
elemen ke elemen berikutnya sampai elemen yang diminta dicapai. Dengan
1
POLITEKNIK ELEKTRONIKA NEGERI SURABAYA
INSTITUT TEKNOLOGI SEPULUH NOPEMBER
single linked list, list dapat dilintasi hanya satu arah dari head ke tail karena
masing-masing elemen tidak terdapat link dengan elemen sebelumnya.
Sehingga, apabila kita mulai dari head dan berpindah ke beberapa elemen
dan berharap dapat mengakses elemen sebelumnya, kita harus mulai dari
head. Secara konseptual, linked list merupakan deretan elemen yang
berdampingan. Akan tetapi, karena elemen-elemen tersebut
dialokasikan secara dinamis (menggunakan malloc), sangat penting
untuk diingat bahwa kenyataannya, linked list akan terpencar-pencar
lokasinya di memori seperti Gambar 2.3. Pointer dari elemen ke
elemen (pointer next) berarti sebagai penjamin bahwa semua elemen dapat
diakses.
2
POLITEKNIK ELEKTRONIKA NEGERI SURABAYA
INSTITUT TEKNOLOGI SEPULUH NOPEMBER
1) p = (Node *) malloc(sizeof(Node));
2) p->data = 11511;
3) p->next = NULL;
4) head = p;
3
POLITEKNIK ELEKTRONIKA NEGERI SURABAYA
INSTITUT TEKNOLOGI SEPULUH NOPEMBER
akan dihapus setelahnya dan pointer hapus untuk menandai simpul yang
akan dihapus.
Algoritma:
• cari node yang akan dihapus dengan variable x
• cek dimana tempat data x,jika di awal maka delete awal,jika akhir
maka delete akhir.
• jika x ketemu di tengah,tandai dengan pointer hapus dan arahkan
pointer prev->next=hapus->next agar linked list tidak terputus.
• lalu hapus dengan free(hapus) dan mengeset hapus=NULL.
III. Percobaan
Linked List
DELETE AWAL
#include<stdio.h>
#include<stdlib.h>
typedef struct simpul node;
struct simpul
{
int data;
node *next;
};
node *head;
node *p;
int allocate_node();
void sisip_akhir();
void delete_awal();
void tampil();
main()
{
char jawab;
sisip_akhir();
printf("ingin menghapus data pertama?(y/t)\njawab:");
scanf("%s",&jawab);
if(jawab='y')
4
POLITEKNIK ELEKTRONIKA NEGERI SURABAYA
INSTITUT TEKNOLOGI SEPULUH NOPEMBER
{
delete_awal();
tampil();
}
else
tampil();
}
int allocate_node()
{
p=(node *)malloc(sizeof(node));
if(p==NULL)
return 0;
else
{
printf("masukkan Data:");
scanf("%d",&p->data);
fflush(stdin);
p->next=NULL;
return 1;
}
}
void sisip_akhir()
{
node *tail;
char jawab;
tail=head;
do
{
allocate_node();
if(allocate_node==0)
{
printf("pemesanan memori GAGAL\n");
exit(0);
}
if(head==NULL)
{
head=p;
tail=p;
}
else
{
while(tail->next!=NULL)
tail=tail->next;
5
POLITEKNIK ELEKTRONIKA NEGERI SURABAYA
INSTITUT TEKNOLOGI SEPULUH NOPEMBER
tail->next=p;
tail=tail->next;
}
printf("ingin memasukkan data lagi?(y/t)\njawab:");
scanf("%s",&jawab);
fflush(stdin);
}
while(jawab!='t');
}
void delete_awal()
{
node *hapus;
hapus=head;
head=hapus->next;
free(hapus);
hapus=NULL;
}
void tampil()
{
node *hasil;
hasil=head;
printf("data\n");
while(hasil!=NULL)
{
printf("%d\n",hasil->data);
hasil=hasil->next;
}
}
6
POLITEKNIK ELEKTRONIKA NEGERI SURABAYA
INSTITUT TEKNOLOGI SEPULUH NOPEMBER
#include<stdio.h>
#include<stdlib.h>
typedef struct simpul node;
struct simpul
{
char nama[10];
int no;
int nilai;
node *next;
};
node *head;
node *p;
int allocate_node();
void sisip_akhir();
void delete_awal();
void tampil();
main()
{
char jawab;
sisip_akhir();
printf("ingin menghapus data pertama?(y/t)\njawab:");
scanf("%s",&jawab);
if(jawab='y')
{
delete_awal();
tampil();
}
else
tampil();
}
int allocate_node()
{
p=(node *)malloc(sizeof(node));
if(p==NULL)
return 0;
else
{
printf("no = ");
scanf("%d",&p->no);
7
POLITEKNIK ELEKTRONIKA NEGERI SURABAYA
INSTITUT TEKNOLOGI SEPULUH NOPEMBER
fflush(stdin);
printf("nama mahasiswa =");
gets(p->nama);
fflush(stdin);
printf("nilai =");
scanf("%d",&p->nilai);
p->next=NULL;
return 1;
}
}
void sisip_akhir()
{
node *tail;
char jawab;
tail=head;
do
{
allocate_node();
if(allocate_node==0)
{
printf("pemesanan memori GAGAL\n");
exit(0);
}
if(head==NULL)
{
head=p;
tail=p;
}
else
{
while(tail->next!=NULL)
tail=tail->next;
tail->next=p;
tail=tail->next;
}
printf("ingin memasukkan data lagi?(y/t)\njawab:");
scanf("%s",&jawab);
fflush(stdin);
}
while(jawab!='t');
}
void delete_awal()
8
POLITEKNIK ELEKTRONIKA NEGERI SURABAYA
INSTITUT TEKNOLOGI SEPULUH NOPEMBER
{
node *hapus;
hapus=head;
head=hapus->next;
free(hapus);
hapus=NULL;
}
void tampil()
{
node *hasil;
printf("NO\tNAMA\tNILAI\n");
hasil=head;
while(hasil!=NULL)
{
printf("%d\t%s\t%d\n",hasil->no,hasil->nama,hasil->nilai);
hasil=hasil->next;
}
}
9
POLITEKNIK ELEKTRONIKA NEGERI SURABAYA
INSTITUT TEKNOLOGI SEPULUH NOPEMBER
DELETE AKHIR
#include<stdio.h>
#include<stdlib.h>
typedef struct simpul node;
struct simpul
{
int data;
node *next;
};
node *head;
node *p;
int allocate_node();
void sisip_akhir();
void delete_akhir();
void tampil();
main()
{
char jawab;
sisip_akhir();
printf("ingin menghapus data terakhir?(y/t)\njawab:");
scanf("%s",&jawab);
if(jawab='y')
{
delete_akhir();
tampil();
}
else
tampil();
}
int allocate_node()
{
p=(node *)malloc(sizeof(node));
if(p==NULL)
return 0;
else
{
printf("masukkan Data:");
scanf("%d",&p->data);
fflush(stdin);
p->next=NULL;
10
POLITEKNIK ELEKTRONIKA NEGERI SURABAYA
INSTITUT TEKNOLOGI SEPULUH NOPEMBER
return 1;
}
}
void sisip_akhir()
{
node *tail;
char jawab;
tail=head;
do
{
allocate_node();
if(allocate_node==0)
{
printf("pemesanan memori GAGAL\n");
exit(0);
}
if(head==NULL)
{
head=p;
tail=p;
}
else
{
while(tail->next!=NULL)
tail=tail->next;
tail->next=p;
tail=tail->next;
}
printf("ingin memasukkan data lagi?(y/t)\njawab:");
scanf("%s",&jawab);
fflush(stdin);
}
while(jawab!='t');
}
void delete_akhir()
{
node *prev;
node *hapus;
hapus=head;
while(hapus->next!=NULL)
{
11
POLITEKNIK ELEKTRONIKA NEGERI SURABAYA
INSTITUT TEKNOLOGI SEPULUH NOPEMBER
prev=hapus;
hapus=hapus->next;
}
prev->next=NULL;
free(hapus);
hapus=NULL;
}
void tampil()
{
node *hasil;
hasil=head;
printf("data\n");
while(hasil!=NULL)
{
printf("%d\n",hasil->data);
hasil=hasil->next;
}
}
#include<stdio.h>
#include<stdlib.h>
typedef struct simpul node;
struct simpul
{
char nama[10];
int no;
int nilai;
12
POLITEKNIK ELEKTRONIKA NEGERI SURABAYA
INSTITUT TEKNOLOGI SEPULUH NOPEMBER
node *next;
};
node *head;
node *p;
int allocate_node();
void sisip_akhir();
void delete_akhir();
void tampil();
main()
{
char jawab;
sisip_akhir();
printf("ingin menghapus data terakhir?(y/t)\njawab:");
scanf("%s",&jawab);
if(jawab='y')
{
delete_akhir();
tampil();
}
else
tampil();
}
int allocate_node()
{
p=(node *)malloc(sizeof(node));
if(p==NULL)
return 0;
else
{
printf("no = ");
scanf("%d",&p->no);
fflush(stdin);
printf("nama mahasiswa =");
gets(p->nama);
fflush(stdin);
printf("nilai =");
scanf("%d",&p->nilai);
p->next=NULL;
return 1;
}
}
void sisip_akhir()
{
node *tail;
13
POLITEKNIK ELEKTRONIKA NEGERI SURABAYA
INSTITUT TEKNOLOGI SEPULUH NOPEMBER
char jawab;
tail=head;
do
{
allocate_node();
if(allocate_node==0)
{
printf("pemesanan memori GAGAL\n");
exit(0);
}
if(head==NULL)
{
head=p;
tail=p;
}
else
{
while(tail->next!=NULL)
tail=tail->next;
tail->next=p;
tail=tail->next;
}
printf("ingin memasukkan data lagi?(y/t)\njawab:");
scanf("%s",&jawab);
fflush(stdin);
}
while(jawab!='t');
}
void delete_akhir()
{
node *prev;
node *hapus;
hapus=head;
while(hapus->next!=NULL)
{
prev=hapus;
hapus=hapus->next;
}
prev->next=NULL;
free(hapus);
hapus=NULL;
14
POLITEKNIK ELEKTRONIKA NEGERI SURABAYA
INSTITUT TEKNOLOGI SEPULUH NOPEMBER
}
void tampil()
{
node *hasil;
printf("NO\tNAMA\tNILAI\n");
hasil=head;
while(hasil!=NULL)
{
printf("%d\t%s\t%d\n",hasil->no,hasil->nama,hasil->nilai);
hasil=hasil->next;
}
}
15
POLITEKNIK ELEKTRONIKA NEGERI SURABAYA
INSTITUT TEKNOLOGI SEPULUH NOPEMBER
#include<stdio.h>
#include<stdlib.h>
typedef struct simpul node;
struct simpul
{
int data;
node *next;
};
node *head;
node *p;
int allocate_node();
void sisip_akhir();
void delete_after();
void tampil();
main()
{
char jawab;
sisip_akhir();
printf("apakah ingin menghapus data awal yang telah
diinputkan?(y/t)\njawab:");
scanf("%s",&jawab);
if(jawab='y')
{
delete_after();
tampil();
}
else
tampil();
}
int allocate_node()
{
p=(node *)malloc(sizeof(node));
if(p==NULL)
return 0;
else
{
printf("masukkan Data:");
scanf("%d",&p->data);
fflush(stdin);
16
POLITEKNIK ELEKTRONIKA NEGERI SURABAYA
INSTITUT TEKNOLOGI SEPULUH NOPEMBER
p->next=NULL;
return 1;
}
}
void sisip_akhir()
{
node *tail;
char jawab;
tail=head;
do
{
allocate_node();
if(allocate_node==0)
{
printf("pemesanan memori GAGAL\n");
exit(0);
}
if(head==NULL)
{
head=p;
tail=p;
}
else
{
while(tail->next!=NULL)
tail=tail->next;
tail->next=p;
tail=tail->next;
}
printf("mau memasukkan data lagi?(y/t)\njawab:");
scanf("%s",&jawab);
fflush(stdin);
}
while(jawab!='t');
}
void delete_after()
{
int x;
node *cari;
node *hapus;
cari=head;
17
POLITEKNIK ELEKTRONIKA NEGERI SURABAYA
INSTITUT TEKNOLOGI SEPULUH NOPEMBER
while(cari->data!=x)
{
if(cari->next==NULL)
printf("data no.%d tidak ada dalam linked list\n",x);
else
{
cari=cari->next;
}
}
hapus=cari->next;
cari->next=hapus->next;
free(hapus);
hapus=NULL;
}
void tampil()
{
node *hasil;
hasil=head;
printf("data\n");
while(hasil!=NULL)
{
printf("%d\n",hasil->data);
hapus=hapus->next;
}
}
18
POLITEKNIK ELEKTRONIKA NEGERI SURABAYA
INSTITUT TEKNOLOGI SEPULUH NOPEMBER
#include<stdio.h>
#include<stdlib.h>
typedef struct simpul node;
struct simpul
{
char nama[10];
int data;
int nilai;
node *next;
};
node *head;
node *p;
int allocate_node();
void sisip_akhir();
void delete_after();
void tampil();
main()
{
char jawab;
sisip_akhir();
printf("apakah ingin menghapus data awal yang telah
diinputkan?(y/t)\njawab:");
scanf("%s",&jawab);
if(jawab='y')
{
delete_after();
tampil();
}
else
tampil();
}
int allocate_node()
{
p=(node *)malloc(sizeof(node));
if(p==NULL)
return 0;
else
{
printf("no = ");
scanf("%d",&p->data);
fflush(stdin);
printf("nama mahasiswa =");
gets(p->nama);
fflush(stdin);
19
POLITEKNIK ELEKTRONIKA NEGERI SURABAYA
INSTITUT TEKNOLOGI SEPULUH NOPEMBER
printf("nilai =");
scanf("%d",&p->nilai);
p->next=NULL;
return 1;
}
}
void sisip_akhir()
{
node *tail;
char jawab;
tail=head;
do
{
allocate_node();
if(allocate_node==0)
{
printf("pemesanan memori GAGAL\n");
exit(0);
}
if(head==NULL)
{
head=p;
tail=p;
}
else
{
while(tail->next!=NULL)
tail=tail->next;
tail->next=p;
tail=tail->next;
}
printf("mau memasukkan data lagi?(y/t)\njawab:");
scanf("%s",&jawab);
fflush(stdin);
}
while(jawab!='t');
}
void delete_after()
{
int x;
node *cari;
node *hapus;
20
POLITEKNIK ELEKTRONIKA NEGERI SURABAYA
INSTITUT TEKNOLOGI SEPULUH NOPEMBER
cari=head;
printf("setelah data ke berapa data yang ingin di hapus?");
scanf("%d",&x);
while(cari->data!=x)
{
if(cari->next==NULL)
printf("data no.%d tidak ada dalam linked list\n",x);
else
{
cari=cari->next;
}
}
hapus=cari->next;
cari->next=hapus->next;
free(hapus);
hapus=NULL;
}
void tampil()
{
node *hasil;
printf("NO\tNAMA\tNILAI\n");
hasil=head;
while(hasil!=NULL)
{
printf("%d\t%s\t%d\n",hasil->data,hasil->nama,hasil->nilai);
hasil=hasil->next;
}
}
21
POLITEKNIK ELEKTRONIKA NEGERI SURABAYA
INSTITUT TEKNOLOGI SEPULUH NOPEMBER
#include<stdio.h>
#include<stdlib.h>
typedef struct simpul node;
struct simpul
{
int data;
node *next;
};
node *head;
node *p;
int allocate_node();
22
POLITEKNIK ELEKTRONIKA NEGERI SURABAYA
INSTITUT TEKNOLOGI SEPULUH NOPEMBER
void menu();
void sisip();
void sisip_awal();
void sisip_akhir();
void sisip_after();
void sisip_before();
void del();
void del_awal();
void del_akhir();
void del_after();
void tampil();
main()
{
do
{
menu();
}
while(1);
}
void menu()
{
int pil;
printf("MENU UTAMA\n");
printf("1.Insert\n2.Delete\n3.Tampil\n4.Keluar\n");
printf("pilihan anda:");
scanf("%d",&pil);
switch(pil)
{
case 1:allocate_node();
sisip();
break;
case 2:
del();
break;
case 3:tampil();
break;
case 4:exit(0);
break;
}
printf("\n");
}
23
POLITEKNIK ELEKTRONIKA NEGERI SURABAYA
INSTITUT TEKNOLOGI SEPULUH NOPEMBER
void sisip()
{
int pil;
printf("MENU INSERT\n");
printf("1.Insert Awal\n2.Insert Akhir\n3.Insert After\n4.Insert Before\n");
printf("pilihan anda:");
scanf("%d",&pil);
switch(pil)
{
case 1:
sisip_awal();
break;
case 2:
sisip_akhir();
break;
case 3:
sisip_after();
break;
case 4:
sisip_before();
break;
}
}
int allocate_node()
{
int nilai;
printf("masukkan nilai data:");
scanf("%d",&nilai);
p=(node *)malloc(sizeof(node));
if(p==NULL)
{
printf("pemesanan alokasi memori GAGAL\n");
return 0;
}
else
{
p->data=nilai;
p->next=NULL;
return 1;
}
}
void sisip_awal()
{
24
POLITEKNIK ELEKTRONIKA NEGERI SURABAYA
INSTITUT TEKNOLOGI SEPULUH NOPEMBER
if(head==NULL)
head=p;
else
{
p->next=head;
head=p;
}
void sisip_akhir()
{
node *tail;
tail=head;
if(allocate_node==0)
exit(0);
if(head==NULL)
{
head=p;
tail=p;
}
else
{
while(tail->next!=NULL)
{
tail=tail->next;
}
tail->next=p;
tail=tail->next;
}
void tampil()
{
node *baca;
baca=head;
while(baca!=NULL)
{
25
POLITEKNIK ELEKTRONIKA NEGERI SURABAYA
INSTITUT TEKNOLOGI SEPULUH NOPEMBER
printf("%d\n",baca->data);
baca=baca->next;
}
}
void sisip_before()
{
node *bef;
node *pbef;
int x;
if(allocate_node==0)
{
printf("pemesanan memori GAGAL\n");
exit(0);
}
fflush(stdin);
printf("nilai tersebut akan disisipkan sebelum data?");
scanf("%d",&x);
bef=head;
if(head->data==x)
{
p->next=head;
head=p;
}
else
{
do
{
pbef=bef;
if(bef->next==NULL)
{
printf("data %d tidak ada dalam linked list\n",x);
exit(0);
}
else
{
bef=bef->next;
}
}
while(bef->data!=x);
p->next=bef;
26
POLITEKNIK ELEKTRONIKA NEGERI SURABAYA
INSTITUT TEKNOLOGI SEPULUH NOPEMBER
pbef->next=p;
}
}
void sisip_after()
{
int x;
node *after;
if(allocate_node==0)
{
printf("pemesanan memori GAGAL\n");
exit(0);
}
after=head;
printf("\n");
printf("data akan disisipkan setelah data?");
scanf("%d",&x);
while(after->data!=x)
{
if(after->next==NULL)
printf("data tidak ada dalam linked list\n");
else
after=after->next;
}
p->next=after->next;
after->next=p;
}
void del()
{
int pil;
printf("MENU INSERT\n");
printf("1.Delete Awal\n2.Delete Akhir\n3.Delete After\n4.Delete
Before\n");
printf("masukkan pilihan anda:");
scanf("%d",&pil);
switch(pil)
{
case 1:
27
POLITEKNIK ELEKTRONIKA NEGERI SURABAYA
INSTITUT TEKNOLOGI SEPULUH NOPEMBER
del_awal();
break;
case 2:
del_akhir();
break;
case 3:
del_after();
break;
}
}
void del_awal()
{
node *hapus;
hapus=head;
head=hapus->next;
free(hapus);
hapus=NULL;
}
void del_akhir()
{
node *prev;
node *hapus;
hapus=head;
while(hapus->next!=NULL)
{
prev=hapus;
hapus=hapus->next;
}
prev->next=NULL;
free(hapus);
hapus=NULL;
}
void del_after()
{
int x;
node *prev;
node *hapus;
prev=head;
printf("setelah data ke berapa data yang ingin di hapus?");
28
POLITEKNIK ELEKTRONIKA NEGERI SURABAYA
INSTITUT TEKNOLOGI SEPULUH NOPEMBER
scanf("%d",&x);
while(prev->data!=x)
{
if(prev->next==NULL)
printf("data no.%d tidak ada dalam linked list\n",x);
else
{
prev=prev->next;
}
}
hapus=prev->next;
prev->next=NULL;
free(hapus);
hapus=NULL;
}
Analisis :
Fungsi main() hanya berisikan fungsi menu() .Program akan selesai jika
memilih menu keluar yang berisi perintah exit(0). Sehingga program ini dapat
menginput,hapus,dan tampilkan data linked list sesuai keinginan user nya.
Sampai program selesai dengan memilih menu keluar .
5.MENU STRUCT
#include<stdio.h>
#include<stdlib.h>
typedef struct simpul node;
struct simpul
{
int no;
char nama[20];
float nilai;
node *next;
};
node *head;
node *p;
int allocated_node();
void menu();
void sisip();
void sisip_awal();
void sisip_akhir();
void sisip_after();
29
POLITEKNIK ELEKTRONIKA NEGERI SURABAYA
INSTITUT TEKNOLOGI SEPULUH NOPEMBER
void sisip_before();
void del();
void del_awal();
void del_akhir();
void del_after();
void tampil();
void main()
{
do
{
menu();
}
while(1);
}
void menu()
{
int pil;
printf("MENU UTAMA\n");
printf("1.Insert\n2.Delete\n3.Tampil\n4.Keluar\n");
printf("masukkan pilihan anda:");
scanf("%d",&pil);
switch(pil)
{
case 1:allocated_node();
sisip();
break;
case 2:
del();
break;
case 3:tampil();
break;
case 4:exit(0);
break;
}
printf("\n");
void sisip()
{
int pil;
printf("\n");
30
POLITEKNIK ELEKTRONIKA NEGERI SURABAYA
INSTITUT TEKNOLOGI SEPULUH NOPEMBER
printf("MENU INSERT\n");
printf("1.Insert Awal\n2.Insert Akhir\n3.Insert After\n4.Insert Before\n");
printf("masukkan pilihan anda:");
scanf("%d",&pil);
switch(pil)
{
case 1:
sisip_awal();
break;
case 2:
sisip_akhir();
break;
case 3:
sisip_after();
break;
case 4:
sisip_before();
break;
}
printf("\n");
}
int allocated_node()
{
p=(node *)malloc(sizeof(node));
if(p==NULL)
{
printf("pemesanan alokasi memori GAGAL\n");
return 0;
}
else
{
printf("Masukkan NO.MHS:");
scanf("%d",&p->no);
fflush(stdin);
printf("Masukkan Nama MHS:");
gets(p->nama);
fflush(stdin);
printf("Masukkan Nilai MHS:");
scanf("%g",&p->nilai);
fflush(stdin);
p->next=NULL;
return 1;
printf("\n");
}
31
POLITEKNIK ELEKTRONIKA NEGERI SURABAYA
INSTITUT TEKNOLOGI SEPULUH NOPEMBER
void sisip_awal()
{
if(allocated_node==0)
{
printf("pemesanan memori GAGAL\n");
exit(0);
}
if(head==NULL)
head=p;
else
{
p->next=head;
head=p;
}
fflush(stdin);
;
void sisip_akhir()
{
node *tail;
tail=head;
if(allocated_node==0)
exit(0);
if(head==NULL)
{
head=p;
tail=p;
}
else
{
while(tail->next!=NULL)
{
tail=tail->next;
}
32
POLITEKNIK ELEKTRONIKA NEGERI SURABAYA
INSTITUT TEKNOLOGI SEPULUH NOPEMBER
tail->next=p;
tail=tail->next;
}
void tampil()
{
node *baca;
baca=head;
printf("NO\tNAMA\tNILAI\n");
printf("===========================\n");
while(baca!=NULL)
{
printf("%d\t%s\t%g\n\n",baca->no,baca->nama,baca->nilai);
baca=baca->next;
}
}
void sisip_before()
{
node *bef;
node *pbef;
int x;
printf("\n");
if(allocated_node==0)
{
printf("pemesanan memori GAGAL\n");
exit(0);
}
fflush(stdin);
printf("data tersebut akan disisipkan sebelum MHS.no?");
scanf("%d",&x);
bef=head;
if(head->no==x)
{
p->next=head;
head=p;
}
else
{
33
POLITEKNIK ELEKTRONIKA NEGERI SURABAYA
INSTITUT TEKNOLOGI SEPULUH NOPEMBER
do
{
pbef=bef;
if(bef->next==NULL)
{
printf("data %d tidak ada dalam linked list\n",x);
exit(0);
}
else
{
bef=bef->next;
}
}
while(bef->no!=x);
p->next=bef;
pbef->next=p;
}
void sisip_after()
{
int x;
node *after;
if(allocated_node==0)
{
printf("pemesanan memori GAGAL\n");
exit(0);
}
after=head;
printf("\n");
printf("data akan disisipkan setelah MHS.no?");
scanf("%d",&x);
while(after->no!=x)
{
if(after->next==NULL)
printf("data tidak ada dalam linked list\n");
else
after=after->next;
34
POLITEKNIK ELEKTRONIKA NEGERI SURABAYA
INSTITUT TEKNOLOGI SEPULUH NOPEMBER
}
p->next=after->next;
after->next=p;
void del()
{
int pil;
printf("\n");
printf("MENU INSERT\n");
printf("1.Delete Awal\n2.Delete Akhir\n3.Delete After\n");
printf("masukkan pilihan anda:");
scanf("%d",&pil);
switch(pil)
{
case 1:
del_awal();
break;
case 2:
del_akhir();
break;
case 3:
del_after();
break;
}
void del_awal()
{
node *hapus;
hapus=head;
head=hapus->next;
free(hapus);
hapus=NULL;
void del_akhir()
{
node *prev;
node *hapus;
hapus=head;
35
POLITEKNIK ELEKTRONIKA NEGERI SURABAYA
INSTITUT TEKNOLOGI SEPULUH NOPEMBER
while(hapus->next!=NULL)
{
prev=hapus;
hapus=hapus->next;
}
prev->next=NULL;
free(hapus);
hapus=NULL;
void del_after()
{
int x;
node *prev;
node *hapus;
prev=head;
printf("setelah MHS.no ke berapa yang ingin di hapus?");
scanf("%d",&x);
while(prev->no!=x)
{
if(prev->next==NULL)
printf("MHS no.%d tidak ada dalam linked list\n",x);
else
{
prev=prev->next;
}
}
hapus=prev->next;
prev->next=NULL;
free(hapus);
hapus=NULL;
Analisis :
Fungsi main() hanya berisikan fungsi menu() .Program akan selesai jika
memilih menu keluar yang berisi perintah exit(0). Sehingga program ini dapat
menginput,hapus,dan tampilkan data linked list sesuai keinginan user nya.
Sampai program selesai dengan memilih menu keluar .
36
POLITEKNIK ELEKTRONIKA NEGERI SURABAYA
INSTITUT TEKNOLOGI SEPULUH NOPEMBER
6.SORTING DATA
#include<stdio.h>
#include<stdlib.h>
typedef struct simpul node;
struct simpul
{
int data;
node *next;
};
int allocated_node();
void menu();
void sisip();
void del();
void cari();
void tampil();
node *head=NULL;
node *p;
void main()
{
do
{
menu();
}
while(1);
}
int allocated_node()
{
p=(node *)malloc(sizeof(node));
if(p==NULL)
{
printf("Pemesanan Memori GAGAL\n");
return 0;
}
else
{
printf("Masukkan Data:");
scanf("%d",&p->data);
p->next=NULL;
return 1;
}
}
void menu()
{
int pil;
37
POLITEKNIK ELEKTRONIKA NEGERI SURABAYA
INSTITUT TEKNOLOGI SEPULUH NOPEMBER
printf("MENU\n");
printf("1.Insert\n2.Delete\n3.Tampil\n4.Cari Data\n5.Keluar\n");
printf("Masukkan Pilihan Anda:");
scanf("%d",&pil);
switch(pil)
{
case 1:allocated_node();
sisip();
break;
case 2:del();
break;
case 3:tampil();
break;
case 4:cari();
break;
case 5:exit(0);
default:printf("Pilihan Anda Salah\n");
break;
}
}
void sisip()
{
node *bantu;
node *prev;
bantu=head;
if(allocated_node==0)
exit(0);
if(head==NULL)
{
head=p;
}
else
{
while(bantu!=NULL)
{
if(p->data<head->data)
{
p->next=head;
head=p;
break;
}
else if(p->data>=bantu->data)
{
38
POLITEKNIK ELEKTRONIKA NEGERI SURABAYA
INSTITUT TEKNOLOGI SEPULUH NOPEMBER
if(bantu->next!=NULL)
{
prev=bantu;
bantu=bantu->next;
}
else
{
bantu->next=p;
break;
}
}
else
{
p->next=bantu;
prev->next=p;
break;
}
}
}
}
void del()
{
int x;
int ketemu=1;
node *hapus;
node *prev;
hapus=head;
printf("Masukkan Data yang akan di Delete:");
scanf("%d",&x);
if(hapus==NULL)
{
printf("Linked List kosong\n");
}
else
{
while(hapus->data!=x)
{
if(hapus->next!=NULL)
{
prev=hapus;
hapus=hapus->next;
}
else
{
ketemu=0;
39
POLITEKNIK ELEKTRONIKA NEGERI SURABAYA
INSTITUT TEKNOLOGI SEPULUH NOPEMBER
while(bantu!=NULL)
{
while(bantu->data!=x)
{
if(bantu->next!=NULL)
{
40
POLITEKNIK ELEKTRONIKA NEGERI SURABAYA
INSTITUT TEKNOLOGI SEPULUH NOPEMBER
bantu=bantu->next;
}
else
{
ketemu=0;
break;
}
}
if(ketemu!=0)
{
jumlah++;
}
bantu=bantu->next;
}
if(jumlah>0)
printf("Data %d ditemukan sebanyak %d kali\n",x,jumlah);
else
printf("Datanya Gag ketemu Mas..\n");
}
41
POLITEKNIK ELEKTRONIKA NEGERI SURABAYA
INSTITUT TEKNOLOGI SEPULUH NOPEMBER
42
POLITEKNIK ELEKTRONIKA NEGERI SURABAYA
INSTITUT TEKNOLOGI SEPULUH NOPEMBER
• FLOWCHART DELETE
43
POLITEKNIK ELEKTRONIKA NEGERI SURABAYA
INSTITUT TEKNOLOGI SEPULUH NOPEMBER
44
POLITEKNIK ELEKTRONIKA NEGERI SURABAYA
INSTITUT TEKNOLOGI SEPULUH NOPEMBER
Analisis
Linked list memudahkan dalam pemasukan atau penghapusan data
baik terurut ataupun tidak, karena dengan linked list kemungkinan data
terjaga sangat baik. Dan dari hasil percobaan yang dilakukan, ternyata
program sorting baik itu data atau struct memakai program yang relative lebih
simple dan lebih mudah. Ini berarti semakin menghemat penggunaan memori
yang terpakai.
45
POLITEKNIK ELEKTRONIKA NEGERI SURABAYA
INSTITUT TEKNOLOGI SEPULUH NOPEMBER
KESIMPULAN :
1. Single linked list atau biasa disebut linked list terdiri dari elemen-
elemen individu, dimana masing-masing dihubungkan dengan
pointer tunggal.
2. Linked List Insert:
a. Siapkan node yang akan disimpan, tempatkan pada variabel
penampung dan cek lokasi,
b. Cari posisi insert,
c. Sambungkan.
3. Linked List Delete:
a. Cari posisi node yang akan didelete,
b. Sambungkan node agar linked list tidak terputus,
c. Bebaskan lokasi dan NULL-kan pointer.
4. Insert terdiri dari insert awal, insert akhir, insert sebelum node tertentu
dan insert sesudah node tertentu.
5. Delete terdiri dari delete awal, delete akhir dan delete sesudah node
tertentu.
46