Anda di halaman 1dari 15

LAPORAN PRAKTIKUM

STRUKTUR DATA

ADT LINKED LIST

Disusun oleh :

Nama : Griyanda Azhar Yustiani


NIM : 3411201004
Kelas : Informatika - A

JURUSAN INFORMATIKA
FAKULTAS SAINS DAN INFORMATIKA
UNIVERSITAS JENDERAL ACHMAD YANI
2021
DAFTAR ISI

BAB I HASIL PRAKTIKUM........................................................................................................2


1. Boolean.h..................................................................................................................................2
2. list.c...........................................................................................................................................3
3. List.h.........................................................................................................................................8
4. Mline.c....................................................................................................................................11
HASIL EKSEKUSI.......................................................................................................................13
ANALISA.......................................................................................................................................13
BAB II KESIMPULAN.....................................................................................................................14
BAB I
HASIL PRAKTIKUM
1. Boolean.h
/*
Program : Boolean.h
Author : 3411201004, Griyanda Azhar Yustiani
Kelas : A
Deskripsi : Header file boolean
Tanggal : 14 Juni 2021
*/

#ifndef boolean_H
#define boolean_H
#define true 1
#define false 0
#define boolean unsigned char
#endif

2. list.c
/* Program : list.c
Author : 3411201004, Griyanda Azhar Yustiani
Kelas : A
Tanggal : 14 Juni 2021
*/

#include "link.h"
#include <stdio.h>
#include <conio.h>
/*Realisasi Prototype Linear List*/
/* Konstruktor memebnetuk List */
void CreateList(List *L){
/* I.S : L terdefinisi, tidak diketahui nilainya
F.S : L diinisialisasikan first(L)=nil
*/
//kamus
//algoritma
first(*L) = NULL;
}
/* Destruktor /Dealokator : */
address Alokasi(infotype x){
/* Mengirimkan address hasil alokasi sebuah elemen
Jika alokasi berhasil, maka adress !=Nil,
dan misalnya menghasilkan P, maka Info(P)=x, Next(P)=Nil
Jika alokasi gagal, mengirimkan Nil
*/
//kamus
address P;
//algoritma
P = (address)malloc(sizeof(Elmtlist));
info(P) = x;
next(P) = NULL;
return P;
}
/** {Kelompok Operasi Cek Elemen kosong atau penuh} **/
boolean isempty(List L){
//Mengecek apakah jumlah elemen pada list kosong
//mengirimkan true jika List kosong, mengirimkan false
jika tidak
/** {Kelompok Interaksi dengan I/O device, Baca/Tulis} **/
//kamus
//algoritma
if(first(L) == NULL){
return true;
}
else{
return false;
}
}
/** Penambahan Elemen **/
void insertfirst(List *L ,infotype x){
/* I.S : L terdefinisi, mungkin kosong
F.S : melakukan alokasi sebuah elemen dan
menambahkan elemen pertama pada List dengan nilai X jika
alokasi
berhasil. Jika alokasi gagal IS=FS
*/
//kamus
address P;
//algoritma
P = Alokasi(x);
if(isempty(*L)){
first(*L) = P;
}
else{
next(P) = first(*L);
first(*L) = P;
}
}
void insertlast(List *L, infotype x){
/* I.S : L terdefinisi, mungkin kosong
F.S : melakukan alokasi sebuah elemen dan
menambahkan elemen terakhir pada List dengan nilai X jika
alokasi
berhasil. Jika alokasi gagal IS=FS
*/
//kamus
address P,temp;
//algoritma
P = Alokasi(x);
if(isempty(*L)){
first(*L) = P;
}
else{
temp = first(*L);
while(next(temp) != NULL){
temp = next(temp);
}
next(temp) = P;
}
}
void insertafter(List *L, infotype y, infotype x){
/* I.S : L terdefinisi, mungkin kosong
F.S : Melakukan alokasi sebuan elemen dengan nilai x dan
menambahkan elemen list setelah y ditemukan pertama kali
pada list
*/
//kamus
address P,temp;
boolean find;
//algoritma
P = Alokasi(y);
temp = first(*L);
find = false;
while(temp != NULL && find == false){
if(info(temp) == x){
find = true;
}
else{
temp = next(temp);
}
}
if(find == true){
next(P) = next(temp);
next(temp) = P;
}
else
printf("\n Angka tidak ditemukan di List!!!");
}
/* Penghapusan Elemen */
void delfirst(List *L, infotype *temp){
/* I.S : L tidak kosong
F.S : Elemen pertama list dihapus, nilai info disimpan
pada X dan alamat
elemen pertama didealokasi. Sehingga elemen pertama
pada List adalah emelen berikutnya sebelum penghapusan.
*/
//kamus
address P;
//algoritma
if(isempty(*L)){
printf("List kosong!!!");
}
else{
(*temp) = info(first(*L));
P = first(*L);
first(*L) = next(first(*L));
next(P) = NULL;
}
}
void dellast(List *L, infotype *temp){
/* I.S : L tidak kosong
F.S : Elemen terakhir List dihapus: nilai info disimpan
pada X dan alamat
elemen terakhir didealikasi.
Sehingga elemen terakhir pada List adalah elemen
sebelumnya sbelum
penghapusan
*/
//kamus
address P1,P2;
//algoritma
P1 = first(*L);
while(next(P1) != NULL){
P2 = P1;
P1 = next(P1);
}
(*temp) = info(P1);
next(P2) = NULL;
//free(P1);
}
void delafter(List *L, infotype *temp, infotype x){
/* I.S : L terdefinisi, mungkin kosong
F.S : melakukan dealokasi sebuah elemen sedengan nilai X
setelah nilai Y
pertama detemukan pada List.
Nilai X yang dihapus dalam List akan disimpan sebagai
keluaran dari
procedur
*/
//kamus
address P,O;
boolean find;
//algoritma
P = first(*L);
find = false;
while(P != NULL && find == false){
if(info(P) == x){
find = true;
}
else{
P = next(P);
}
}
if(find == true){
O = next(P);
(*temp) = info(O);
next(P) = next(O);
next(O) = NULL;
}
else{
printf("\n Angka tidak ditemukan!!!");
}
}
void printinfo(List L){
/* I.S : L terdefinisi, mungkin kosong
F.S : Jika List tidak kosong, menampilkan semua info yang
disimpan pada
elemen List ke layar. Jika List kosong,
hanya menampilkan pesan "List kosong"
*/
//kamus
address P;
//algoritma
P = first(L);
printf(" List : ");
while(P != NULL){
printf("%d => ",info(P));
P = next(P);
}
printf("NULL");
}
/** Kelompok Operasi Lain Terhadap Type **/
int Nbelmt(List L){
// Mengirimkan banyaknya elemen List atau mengirimkan 0
jika List kosong
//kamus
int count;
address P;
//algoritma
P = first(L);
count = 0;
while(P != NULL){
count = count + 1;
P = next(P);
}
return count;
}
address Search(List L, infotype x){
/* Mencari apakah ada elemen List dengan Info (P) = X
Jika ada, mengirimkan address elemen tersebut yang
pertama kali ditemukan.
Jika tidak ada, mengirimkan Nil
*/
//kamus
address P;
boolean find;
//algoritma
P = first(L);
find = false;
while(P != NULL){
if(info(P) == x){
return P;
}
else{
P = next(P);
}
}
return NULL;
}
void inverstList(List *L){
/* I.S : L sembarang
F.S : Mengubah elemen list menjadi terbalik, yaitu elemen
terakhir menjadi
elemen pertama,
elemen kedua menjadi elemen sebelum terakhir dsb
Membalik elemen list, tanpa melakukan alikasi/ dealokasi
*/
//kamus
address P,M;
List L2;
//algoritma
L2 = (*L);
P = first(*L);
CreateList(&L2);
while(P != NULL){
insertfirst(&L2,info(P));
P = next(P);
}
(*L) = L2;
}
List getnewinverstlist(List L){
// Mengirimkan list baru, hasil invers dari L
//kamus
address P;
List L2;
//algoritma
L2 = L;
P = first(L);
CreateList(&L2);
while(P != NULL){
insertfirst(&L2,info(P));
P = next(P);
}
return L2;
}

3. List.h
/* Program : list.h
Author : 3411201004, Griyanda Azhar Yustiani
Kelas : A
Tanggal : 14 Juni 2021
*/

#ifndef _LIST_H
#define _LIST_H
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include "boolean.h"
#define info(P) (P)->info
#define next(P) (P)->next
#define first(L) (L).First
/** Definisi ABSTRACT DATA TYPE List**/
/* Definisi List : */
/* List kosong ===> First (L) = Nil
Setiap elemen dengan address P dapat diacu info (P) dan
Next(P);
Elemen terakhir list ===> Jika addressnya Last maka Next
(Last) = Nil
*/
typedef struct tElmtList *address;//pointer menunjuk ke
alamat tElmList
typedef int infotype;
typedef struct tElmtList{
infotype info;
address next;
}Elmtlist;
typedef struct{
address First;
}List;
/*Prototype Linear List*/
/* Konstruktor memebnetuk List */
void CreateList(List *L);
/* I.S : L terdefinisi, tidak diketahui nilainya
F.S : L diinisialisasikan first(L)=nil
*/
/* Destruktor /Dealokator : */
address Alokasi(infotype x);
/* Mengirimkan address hasil alokasi sebuah elemen
Jika alokasi berhasil, maka adress !=Nil,
dan misalnya menghasilkan P, maka Info(P)=x, Next(P)=Nil
Jika alokasi gagal, mengirimkan Nil
*/
/** {Kelompok Operasi Cek Elemen kosong atau penuh} **/
boolean isempty(List L);
//Mengecek apakah jumlah elemen pada list kosong
//mengirimkan true jika List kosong, mengirimkan false
jika tidak
/** {Kelompok Interaksi dengan I/O device, Baca/Tulis} **/
/** Penambahan Elemen **/
void insertfirst(List *L ,infotype x);
/* I.S : L terdefinisi, mungkin kosong
F.S : melakukan alokasi sebuah elemen dan
menambahkan elemen pertama pada List dengan nilai X jika
alokasi
berhasil. Jika alokasi gagal IS=FS
*/
void insertlast(List *L, infotype x);
/* I.S : L terdefinisi, mungkin kosong
F.S : melakukan alokasi sebuah elemen dan
menambahkan elemen terakhir pada List dengan nilai X jika
alokasi
berhasil. Jika alokasi gagal IS=FS
*/
void insertafter(List *L, infotype y, infotype x);
/* I.S : L terdefinisi, mungkin kosong
F.S : Melakukan alokasi sebuan elemen dengan nilai x dan
menambahkan elemen list setelah y ditemukan pertama kali
pada list
*/
/* Penghapusan Elemen */
void delfirst(List *L, infotype *temp);
/* I.S : L tidak kosong
F.S : Elemen pertama list dihapus, nilai info disimpan
pada X dan alamat
elemen pertama didealokasi. Sehingga elemen pertama
pada List adalah emelen berikutnya sebelum penghapusan.
*/
void dellast(List *L, infotype *temp);
/* I.S : L tidak kosong
F.S : Elemen terakhir List dihapus: nilai info dismpan
pada X dan alamat
elemen terakhir didealikasi.
Sehingga elemen terakhir pada List adalah elemen
sebelumnya sbelum
penghapusan
*/
void delafter(List *L, infotype *temp, infotype x);
/* I.S : L terdefinisi, mungkin kosong
F.S : melakukan dealokasi sebuah elemen sedengan nilai X
setelah nilai Y
pertama detemukan pada List.
Nilai X yang dihapus dalam List akan disimpan sebagai
keluaran dari
procedur
*/
void printinfo(List L);
/* I.S : L terdefinisi, mungkin kosong
F.S : Jika List tidak kosong, menampilkan semua info yang
disimpan pada
elemen List ke layar. Jika List kosong,
hanya menampilkan pesan "List kosong"
*/
/** Kelompok Operasi Lain Terhadap Type **/
int Nbelmt(List L);
// Mengirimkan banyaknya elemen List atau mengirimkan 0
jika List kosong
address Search(List L, infotype x);
/* Mencari apakah ada elemen List dengan Info (P) = X
Jika ada, mengirimkan address elemen tersebut yang
pertama kali ditemukan.
Jika tidak ada, mengirimkan Nil
*/
void inverstList(List *L);
/* I.S : L sembarang
F.S : Mengubah elemen list menjadi terbalik, yaitu elemen
terakhir menjadi
elemen pertama,
elemen kedua menjadi elemen sebelum terakhir dsb
Membalik elemen list, tanpa melakukan alikasi/ dealokasi
*/
List getnewinverstlist(List L);
// Mengirimkan list baru, hasil invers dari L
#endif

4. Mline.c
/* Program : mainlist.c
Author : 3411201004, Griyanda Azhar Yustiani
Kelas : A
Tanggal : 14 Juni 2021
*/

#include "link.h"
#include <stdio.h>
#include <conio.h>
int main(){
//kamus
List L1,L2;
int x,y,z,a,b,f,ad,cari,tmp;
address t;
//algoritma
printf("\n =================== Linked List
==================");
printf("\n Insert x : ");scanf("%d",&x);
CreateList(&L1);
while(x != 999){
insertlast(&L1,x);
printf("\n Insert x : ");scanf("%d",&x);
}
printinfo(L1);
printf("\n-------------------=Insert
First=------------------");
printf("\nMasukan Nilai= ");scanf("%d", &y);
insertfirst(&L1,y);
printinfo(L1);
printf("\n-------------------=Insert
Last=-------------------");
printf("\nMasukan Nilai= ");scanf("%d", &z);
insertlast(&L1,z);
printinfo(L1);
printf("\n-------------------=Insert
After=------------------");
printf("\nMasukan yg dicari");scanf("%d",&cari);
printf("\nMasukan Nilai= ");scanf("%d",&z);
insertafter(&L1,z,cari);
printinfo(L1);
printf("\n-------------------=Delete
First=------------------\n");
delfirst(&L1,&tmp);
printinfo(L1);
printf("\n-------------------=Delete
After=------------------\n");
printf("masukan yg dicari");scanf("%d",&cari);
delafter(&L1,&tmp,cari);
printinfo(L1);
printf("\n-------------------=Delete
Last=-------------------\n");
dellast(&L1,&tmp);
printinfo(L1);
printf("\n----------------=Banyaknya
Elemen=-----------------");
tmp = Nbelmt(L1);
printf("\nJumal Element list : %d",tmp);
printf("\n------------=Elemen dari Alamat=-----------");
printf("\nMasukan yg dicari :");scanf("%d",&x);
t= Search(L1, x);
printf("Angka : %d ada di alamat : %d pada memory",x,t);
printf("\n-------------------=Invers
List=-------------------\n");
inverstList(&L1);
printinfo(L1);
printf("\n-----------------=New Invers
List=-----------------");
L2 = getnewinverstlist(L1);
printf("\nL1 :");printinfo(L1);
printf("\nL2 :");printinfo(L2);
}

HASIL EKSEKUSI

ANALISA
File header ini dibuat untuk mendeklarasikan isi program lainnya. Yang pertama ada
File boolean.h untuk membandingkan antara true atau false dalam sebuah program. Yang
kedua list.h juga merupakan file header dengan ekstensi .h yang berisi deklarasi, tipe
bentukan address : tElmtList, infotype : integer, tElmtList(info: infotype, next: address) dan
dalam file ini berisi prototype type program yang nantinya akan di realisasikan serta tidak
boleh ada deklarasi variabel. Ada 9 procedure dan 5 function dalam file ini. Yang ketigas File
list.c ini disebut sebagai file realisasi dari prototype yang didefinisikan pada tabint.h. File ini
merupakan bagian body dari sebuah program tab. File ini memiliki 9 procedure dan 5
function. Dan yang terakhir ada main.c yang merupakan main driver yang digunakan untuk
menjalankan program dan menguji ADT tersebut.
BAB II
KESIMPULAN
Pada modul 4 ini dapat disimpulkan bahwa sebuah ADT Linear Linked List adalah
sekumpulan elemen bertype sama yang saling terkait dengan elemen selanjutnya dan
mempunyai keterurutan tertentu. Setiap elemen pada List Linear terdiri dari dua bagian,
yaitu: informasi mengenai nilai elemennya (InfoType), dan informasi mengenai alamat
elemen suksesornya atau alamat elemen selanjutnya (address).

Anda mungkin juga menyukai