ALGORITMA
Procedure sisip_awal (input tamu : dtamu, i/o head,tail: simpul)
{I.S : data yang akan disisipkan, pointer penunjuk head & pointer penunjuk tail sudah terdefinisi}
{F.S : menghasilkan satu simpul yang disisipkan di depan pada single linked list}
kamus :
baru : simpul
algoritma :
alloc (baru)
baru↑.noßno.tamu
baru↑.namaßnama.tamu
if (head=nil)
then
baru↑.nextßnil
tail ßbaru
else
baru↑.nextßhead
endif
headßbaru
endprocedure
procedure sisip_akhir (input tamu : dtamu, i/o head, tail : simpul)
{I.S : data yang akan disisipkan, pointer penunjuk head & pointer penunjuk tail sudah terdefinisi}
{F.S : menghasilkan satu simpul yang disisipkan di belakang pada single linked list}
kamus :
baru : simpul
algoritma :
alloc (baru)
baru↑.noßno.tamu
baru↑.namaßnama.tamu
baru↑.nextßnil
if (head=nil)
then
headßbaru
else
tail ↑.nextßbaru
endif
tail ßbaru
endprocedure
procedure sisip_tengah(input tamu : dtamu, i/o head, tail : simpul)
{I.S : data yang akan disisipkan, pointer penunjuk head & pointer penunjuk tail sudah terdefinisi}
{F.S : menghasilkan satu simpul yang disisipkan di tengah pada single linked list}
kamus :
procedure sisip_akhir (input tamu : dtamu,i/o head, tail : simpul)
baru,bantu : simpul
ketemu : boolean
datasisip : string
algoritma :
if (head=nil)
then
alloc (baru)
baru↑.noßno.tamu
baru↑.namaßnama.tamu
baru↑.nextßnil
headßbaru
tail ßbaru
else
input (datasisip)
bantußhead
ketemußfalse
while(not ketemu and bantu≠nil) do
if ((datasisip=bantu↑.no) and (datasisip=bantu↑.nama))
then
ketemußtrue
else
bantußbantu↑.next
endif
endwhile
if (ketemu)
then
alloc (baru)
baru↑.noßno.tamu
baru↑.namaßnama.tamu
if (bantu=tail)
then
sisip_akhir (tamu,head, tail)
else
baru↑.nextßbantu↑.next
bantu↑.nextßbaru
endif
else
output (‘Data yang akan disisipkan tidak ada’)
endif
endif
endprocedure
allocated_dtamu(input tamu : dtamu,i/o head,tail : simpul)
{I.S : data yang akan disisipkan sudah terdefinisi}
{F.S : - }
kamus :
algoritma :
alloc(baru)
input(no.tamu)
input(nama.tamu)
endprocedure
procedure del_awal (i/o head, tail : simpul)
{I.S : pointer penunjuk head & pointer penunjuk tail sudah terdefinisi}
{F.S : menghasilkan satu simpul yang dihapus di depan pada single linked list}
kamus :
phapus : simpul
algoritma :
if (head=nil)
then
output (‘Data kosong & tidak bisa dihapus’)
else
if (head= tail)
then
noßhead↑.no
namaßhead↑.nama
dealloc (head)
head↑.noßnil
head↑.namaßnil
akhir↑.noßnil
tail ↑.namaßnil
else
phapusßhead
noßhead↑.no
namaßhead↑.nama
headßhead↑.next
dealloc (phapus)
endif
endprocedure
procedure del_akhir (i/o head, tail : simpul)
{I.S : pointer penunjuk head & pointer penunjuk akhir sudah terdefinisi}
{F.S : menghasilkan satu simpul yang dihapus di belakang pada single linked list}
kamus :
phapus : simpul
algoritma :
if (head=nil)
then
output (‘Data kosong dan tidak bisa dihapus’)
else
if (head= tail)
then
noß tail ↑.no
namaß tail ↑.nama
dealloc (baru)
tail ↑.noßnil
tail ↑.namaßnil
head↑.noßnil
head↑.namaßnil
else
phapusß tail
while (phapus↑.next≠ tail) do
bantußbantu↑.next
endwhile
tail ßphapus
phapusß tail ↑.next
noß tail ↑.no
namaß tail ↑.nama
dealloc (phapus)
endif
endprocedure
procedure del_tengah (input posisi : integer, i/o head, tail : simpul)
{I.S : pointer penunjuk head & pointer penunjuk akhir sudah terdefinisi}
{F.S : menghasilkan satu simpul yang dihapus di tengah pada single linked list}
kamus :
banyakdata,poshapus : integer
prev,hapus : simpul
algoritma :
if (head=nil)
then
output (‘Linked list kosong’)
else
banyakdata=1
prev=head
while(prev↑.next≠nil) do
prev=prev↑.next
banyakdata=banyak + 1
endwhile
if ((posisi<1) or (posisi>banyakdata))
then
output (‘posisi di luar jangkauan’)
else
if (posisi=1)
then
del_awal (head, tail)
else
if (posisi=banyakdata)
then
del_akhir(head, tail)
else
prev=head
poshapus=1
while(poshapus<(posisi-1)) do
prev=prev↑.next
poshapus=poshapus+1
endwhile
hapus=prev↑.next
prev↑.next=hapus↑.next
dealloc(hapus)
endif
endif
endprocedure
procedure cari (input tamu : dtamu,i/o head : simpul)
{I.S : data yang dicari,pointer penunjuk head dan pointer penunjuk akhir telah terdefinisi }
{F.S : menampilkan data yang dicari}
kamus :
bantu : simpul
posisi,ketemu : integer
algoritma :
ketemu=0
if (head≠nil)
then
posisi=1
bantußhead
while ((bantu≠nil) and (ketemu=0)) do
if ((bantu↑.no=no) and (bantu↑.nama=nama))
then
ketemu=1
else
bantußbantu↑.next
posisißposisi + 1
endif
endwhile
endif
endprocedure
procedure tampil ( i/o head : simpul)
{I.S : pointer penunjuk head telah terdefinisi }
{F.S : menampilkan data yang sudah terurut secara descending}
kamus :
bantu,bantu2,idxterkecil : simpul
temp : integer
algoritma :
if (head≠nil)
then
bantu=head
while (bantu↑.next≠nil) do
bantu2=bantu
idxterkecil=bantu
while (bantu2≠nil) do
if (bantu2↑.no < idxterkecil↑.no)
then
idxterkecil=bantu2
endif
bantu2=bantu2↑.next
endwhile
if (bantu↑.no > idxterkecil↑.no)
then
temp=bantu↑.no
bantu↑.no=idxterkecil↑.no
idxterkecil↑.no=temp
endif
bantu=bantu↑.next
endwhile
else
output (‘Pengurutan dibatalkan karena linked list kosong’)
endif
endprocedure
procedure listkosong ( i/o head : simpul)
{I.S : pointer penunjuk head telah terdefinisi }
{F.S : menampilkan list kosong}
kamus :
algoritma :
output(" List Kosong \n");
output(" Masukkan Data Terlebih Dahulu \n\n\n");
endprocedure
{algoritma utama}
Algoritma_penyisipan
kamus :
procedure sisip_awal (input tamu : dtamu i/o head, tail : simpul)
procedure sisip_akhir (input tamu : dtamu, i/o head, tail : simpul)
procedure sisip_tengah (input tamu : dtamu, i/o head, tail : simpul)
procedure del_depan (i/o head, tail : simpul)
procedure del_akhir (i/o head, tail : simpul)
procedure del_tengah (input posisi : integer, i/o head, tail : simpul)
procedure cari(input tamu : dtamu ,i/o head : simpul)
allocated_dtamu(input tamu : dtamu,i/o head,tail : simpul)
procedure listkosong ( i/o head : simpul)
procedure tampil ( i/o head : simpul)
procedure urut (i/o head : simpul)
{Deklarasi}
simpul=↑dtamu
dtamu=record
< no : integer,
nama : string,
next : simpul>
endrecord
head, tail =simpul {pointer penunjuk}
menu,posisi : integer
no : integer
nama: string
algoritma :
headßnil
tail ßnil
repeat
output (‘MENU LINKED LIST’)
output (‘1.Sisip Data Tamu’)
output (‘2.Hapus Data’)
output (‘3.Cari Data’)
output (‘4.Tampil Data secara descending’)
output (‘5.Keluar’)
input (menu)
if (menu=1)
then
output (‘1.Sisip Depan’)
output (‘2.Sisip Tengah’)
output (‘3.Sisip Belakang’)
input (menu)
depend on (menu)
(menu=1) : allocated_dtamu(no,nama)
sisip_awal (no,nama,head, tail)
(menu=2) : allocated_dtamu(no,nama)
sisip_tengah (no,nama,head, tail)
(menu=3) : allocated_dtamu(no,nama)
sisip_akhir (no,nama,head, tail)
enddepend
else
if (menu=2)
then
output (‘1.Hapus Awal’)
output (‘2.Hapus Tengah’)
output (‘3.Hapus Akhir’)
input (menu)
depend on (menu)
(menu=1) : del_awal (head, tail)
(menu=2) : del_tengah (posisi,head, tail)
(menu=3) : del_akhir (head, tail)
enddepend
else
if (menu=3)
then
cari (no,nama ,head)
else
if (menu=4)
then
tampil (head)
endif
until (menu=5)
endalgoritma
BAHASA C
#include<stdio.h>
#include<stdlib.h>
typedef struct simpul dtamu;
struct simpul
{
int no;
char nama[20];
dtamu *next;
};
dtamu *head;
dtamu *p;
dtamu *bantu;
dtamu *bantu2;
dtamu *tail;
int allocated_dtamu(int *no,char *nama);
void menu();
void sisip();
void sisip_awal();
void sisip_akhir();
void sisip_sesudah();
void sisip_sebelum();
void del();
void del_awal();
void del_akhir();
void del_tengah();
void tampil();
void cari();
void listkosong();
void urut();
int main(int argc, char *argv[])
{
do {
menu();
}while(1);
system("PAUSE");
return 0;
}
void menu() {
int pil,no;
char nama[20];
printf(" MENU LINKED LIST \n");
printf(" ==================================\n");
printf(" 1.Sisip Data Tamu \n");
printf(" 2.Hapus Data \n");
printf(" 3.Cari Data \n");
printf(" 4.Tampil Data Secara Descending \n");
printf(" 5.Keluar \n");
printf(" ===================================\n");
printf(" Masukkan Pilihan Anda [1..5] : "); scanf("%d",&pil);
switch(pil)
{
case 1:
system("CLS");
allocated_dtamu(no,nama);
sisip();
break;
case 2:
system("CLS");
del();
break;
case 3:
system("CLS");
cari();
system("PAUSE");
system("CLS");
break;
case 4:
system("CLS");
urut();
tampil();
system("PAUSE");
system("CLS");
break;
case 5:
exit(0);
break;
}
printf("\n");
}
void sisip()
{
system("CLS");
int pil;
printf("\n");
printf(" MENU SISIP \n");
printf(" ================================\n");
printf(" 1.Sisip Awal \n");
printf(" 2.Sisip Akhir \n");
printf(" 3.Sisip Sesudah \n");
printf(" 4.Sisip Sebelumn \n");
printf(" ================================\n");
printf(" Masukkan Pilihan Anda [1..4] : "); scanf("%d",&pil);
switch(pil)
{
case 1:
system("CLS");
sisip_awal();
tampil();
break;
case 2:
system("CLS");
sisip_akhir();
tampil();
break;
case 3:
system("CLS");
sisip_sesudah();
tampil();
break;
case 4:
system("CLS");
sisip_sebelum();
tampil();
break;
}
printf("\n");
}
int allocated_dtamu(int *no,char *nama){
p=(dtamu *)malloc(sizeof(dtamu));
if(p==NULL){
printf("Pemesanan Alokasi Memori GAGAL\n");
return 0;
}
else
{
printf(" Masukkan No.Tamu : ");scanf("%d",&p->no);fflush(stdin);
printf(" Masukkan Nama Tamu : ");gets(p->nama);fflush(stdin);
p->next=NULL;
return 1;
printf("\n");
}
}
void sisip_awal()
{
if(allocated_dtamu==0){
printf("Pemesanan Memori GAGAL\n");
exit(0);
} if(head==NULL)
head=p;
else{
p->next=head;
head=p;
}
fflush(stdin);
;}
void sisip_akhir() {
dtamu *tail;
tail=head;
if(allocated_dtamu==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() {
dtamu *tampil;
tampil=head;
printf(" =====================================\n");
printf(" NO \ NAMA \n\n");
while(tampil!=NULL)
{
printf(" %d \ %s\n\n",tampil->no,tampil->nama);
tampil=tampil->next;
}
}
void sisip_sebelum() {
dtamu *bef;
dtamu *pbef;
int x;
printf("\n");
if(allocated_dtamu==0){
printf("Pemesanan Memori GAGAL\n");
exit(0);
}
fflush(stdin);
system("CLS");
printf("Data tersebut akan disisipkan sebelum Tamu.no?");scanf("%d",&x);
system("CLS");
bef=head;
if(head->no==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->no!=x);
p->next=bef;
pbef->next=p;
}
}
void sisip_sesudah() {
int x;
dtamu *after;
if(allocated_dtamu==0) {
printf("pemesanan memori GAGAL\n");
exit(0);
}
after=head;
printf("\n");
system("CLS");
printf("Data akan disisipkan setelah Tamu.no?"); scanf("%d",&x);
system("CLS");
while(after->no!=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("\n");
printf("MENU HAPUS\n");
printf("================================\n");
printf("1.Hapus Awal \n");
printf("2.Hapus Akhir\n");
printf("3.Hapus Tengah\n");
printf("================================\n");
printf("Masukkan Pilihan Anda [1..4] : "); scanf("%d",&pil);
switch(pil) {
case 1:
system("CLS");
del_awal();
tampil();
break;
case 2:
system("CLS");
del_akhir();
tampil();
break;
case 3:
system("CLS");
del_tengah();
tampil();
break;
}
}
void del_awal() {
dtamu *hapus;
hapus=head;
head=hapus->next;
free(hapus);
hapus=NULL;
}
void del_akhir() {
dtamu *prev;
dtamu *hapus;
hapus=head;
while(hapus->next!=NULL) {
prev=hapus;
hapus=hapus->next;
}
prev->next=NULL;
free(hapus);
hapus=NULL;
}
void del_tengah() {
int x;
dtamu *prev;
dtamu *hapus;
prev=head;
system("CLS");
printf("setelah Tamu.no ke berapa yang ingin di hapus?"); scanf("%d",&x);
while(prev->no!=x) {
if(prev->next==NULL)
printf("Tamu no.%d tidak ada dalam linked list\n",x);
else {
prev=prev->next;
}
}
hapus=prev->next;
prev->next=NULL;
free(hapus);
hapus=NULL;
}
void listkosong(){
system("cls");
printf(" List Kosong \n");
printf(" Masukkan Data Terlebih Dahulu \n\n\n");
}
void cari()
{
int no;
char nama[20];
char cari[24];
dtamu *nmbantu;
int ketemu;
if(head==NULL) {
listkosong();
}
else {
printf(" \n ");
printf(" Masukkan no Tamu : ");fflush(stdin);scanf("%d",&p->no);
printf(" Masukkan Nama Tamu : ");fflush(stdin);gets(cari);
nmbantu = head;
ketemu = 0;
while(ketemu==0 && nmbantu != NULL)
{
if(strcmpi(cari,nmbantu->nama)==0)
ketemu = 1;
else
nmbantu = nmbantu->next;
}
if(ketemu==1)
{
printf(" \n\n\n");
printf(" List yang Dicari \n");
printf(" ==================== \n");
printf(" \n");
printf(" \n");
printf(" %d \ %s \n\n",nmbantu->no,nmbantu->nama);
}
else {
system("cls");
printf(" \n");
printf(" Maaf, List yang Anda Cari Tidak Ditemukan \n");
printf(" \n");
}
}
}
void urut()
{
char temp[10];
bantu=tail;
while(bantu!=tail)
{
bantu2=bantu->next;
while(bantu2!=NULL){
if(strcmp(bantu2->nama, bantu->nama)>=0){
strcpy(temp, bantu->nama);
strcpy(bantu2->nama, bantu->nama);
strcpy(bantu->nama, temp); }
bantu2=bantu2->next;
}
bantu=bantu->next;