Anda di halaman 1dari 18

LAPORAN PRAKTIKUM VI

LINKED LIST

Disusun untuk Memenuhi Matakuliah Praktikum Algoritma dan Struktur Data


Dibimbing oleh Bapak Wahyu Nur Hidayat, S.Pd., M.Pd.

Oleh :

Aisya Rawdha (170533628608)

S1 PTI’17 OFF A

UNIVERSITAS NEGERI MALANG


FAKULTAS TEKNIK
JURUSAN TEKNIK ELEKTRO
PRODI S1 PENDIDIKAN TEKNIK INFORMATIKA
APRIL 2018
A. LATIHAN PERCOBAAN
1. Latihan 1 : Program Single Linked List Non Circular
a. Syntax Program

#include <iostream>
#include <conio.h>
#include <iomanip> //setw()
using namespace std;

struct node
{
int data;
node* next; //untuk menghubungkan dengan node lain,
tipe data dibuat sama seperti aturan penggunaan pointer
};

node* head;
node* tail;
node* curr;
node* entry;
node* del;

void inisialisasi()
{
head = NULL;
tail = NULL;
}

void input(int dt)


{
entry = (node* )malloc(sizeof(node)); //alokasi
memori
entry->data = dt;
entry->next = NULL;
if(head==NULL)
{
head = entry;
tail = head;
}
else
{
tail->next = entry;
tail = entry;
}
}

void hapus()
{
int simpan;
if(head==NULL)
{
cout<<"\nlinked list kosong, penghapusan tidak
bisa dilakukan"<<endl;
}
else
{
simpan = head->data;
cout<<"\ndata yang dihapus
adalah"<<simpan<<endl;
//hapus depan
del = head;
head = head->next;
delete del;
}
}

void cetak()
{
curr = head;
if(head == NULL)
cout<<"\ntidak ada data dalam linked
list"<<endl;
else
{
cout<<"\nData yang ada dalam linked list
adalah"<<endl;
cout<<setw(6);
while(curr!=NULL)
{
cout<<curr->data<<"->";
curr = curr->next;
}
cout<<endl;
}
}
void menu()
{
char pilih, ulang;
int data;
do
{
system("cls");
cout<<"SINGLE LINKED LIST NON CIRCULAR"<<endl;
cout<<"-------------------------------"<<endl;
cout<<"Menu : "<<endl;
cout<<"1. Input data"<<endl;
cout<<"2. Hapus data"<<endl;
cout<<"3. Cetak data"<<endl;
cout<<"4. Exit"<<endl;
cout<<"Masukkan pilihan Anda : ";
cin>>pilih;
switch(pilih)
{
case '1' :
cout<<"\nMasukkan data : ";
cin>>data;
input(data);
break;
case '2' :
hapus();
break;
case '3' :
cetak();
break;
case '4' :
exit(0);
break;
default :
cout<<"\nPilih ulang"<<endl;
}
cout<<"Kembali ke menu?(y/n)";
cin>>ulang;
}while (ulang=='y' || ulang=='Y');
}
int main()
{
inisialisasi();
menu();
return EXIT_SUCCESS;
}

b. Output Program
c. Analisis Program
Program di atas ini menggunakan single linked list non circular dengan
menggunakan header file #include <iostream>, #include

<conio.h>, #include <iomanip> untuk menjalankan fungsi setv.


Kemudian mendeklarasikan struct node yang didalamnya berisikan
variabel data yang bertipe interger dan menggunakan pointer node* next
untuk menghubungkan dengan node lain, tipe data dibuat sama seperti
aturan penggunaan pointer. Lalu pendeklarasian variabel node* head;
node* tail; node* curr; node* entry; node* del; itu semua
merupakan pointer-pointer untuk menunjukkan penyimpanan sebuah
operasi. Kemudian pendeklarasian fungsi inisialisasi head = NULL;
node pertama akan diberikan nilai NULL dan tail = NULL; node
terakhir akan diberikan nilai NULL juga. Lalu setelah deklarasi fungsi
inisialisasi, kemudian deklarasi fungsi input yang datanya bertipe integer,
didalam fungsi input dideklarasikan entry = (node* )

malloc(sizeof(node)); untuk pengalokasi memori entry->data =


dt; entry->next = NULL;if(head==NULL), kemudian terdapat
kondisi jika (head sama dengan NULL) maka, head = entry; tail =
head; yang akan berjalan, dan jika selain head sama dengan NULL maka
tail->next = entry; tail = entry; yang akan berjalan. Lalu
setelah pendeklarasian fungsi input, kemudian pendeklarasian fungsi
hapus, di dalam fungsi ini pertama dideklarasiakan variabel simpan yang
bertipe data integer lalu terdapat kondisi bahwa jika head (depan) adalah
bernilai NULL makan akan keluar “linked list kosong, penghapusan
tidak bisa dilakukan” dan jika tidak memenuhi kondisi head(depan sama
dengan NULL, maka akan simpan = head->data; dan akan keluar
“data yang dihapus adalah"... (memanggil variabel simpan) untuk
menghapus depan dengan perumusan del = head; head = head-
>next; delete del. Kemudian pendeklarasian fungsi cetak , yang di
dalamnya diketahui curr = head; terdapat kodisi jika head bernilai NULL
maka akan keliuar “tidak ada data dalam linked list” kemudian jika
kondisi tersebut tidak memenuhi maka akan keluar "Data yang ada
dalam linked list adalah" dengan pemanggilan data yang telah diinputkan
dengan menggunakan perulangan while dengan kondisi (curr!=NULL)
untuk pemanggilannya. Kemudian pendeklarasian fungsi menu yang
menggunakan switch case untuk pemilihan menu, jika kita memilih 1
maka akan menginputkan data dengan pemnanggilan fungsi input, jika
kita memilih 2 maka akan memghapus data dengan pemanggilan fungsi
hapus, jika kita memilih 3 maka akan mencetak data dengan
pemanggilan fungsi cetak, jika kita memilih 4 maka akan exit, dan jika
kita memilih selain angka 1 sampai 4 maka akan default “Pilih ulang”.
Kemudian untuk jalannya program kita langsun g menuju ke fungsi
utama yaitu int main yang pertama adalaah pemanggilan fungsi
inisialisasi untuk menginisialkan, dan kemudian pemanggilan fungsi
menu, untuk pengoperasian program.

B. TUGAS PRAKTIKUM
1. Praktikum 1 : Program Linked List ( TROUBLESHOOT)
a. Syntax Program
#include <stdio.h>
#include <stdlib.h>

//definisikan struct
struct SNode{
int data;
struct SNode *next;
struct SNode *before;
};

struct SNode *n_awal, //node awal dari linked list


*n_tampil, //node bantu untuk tampilkan
data
*n_bantu; //node bantu untuk insert
node baru

int iterasi;

//inisialisasi linked list


void inisialisasi(){
n_awal = NULL;
}

//tampilkan linked list


void tampil_list(){
n_tampil = n_awal;

while(n_tampil!=NULL){
printf("%d ->", n_tampil->data);
n_tampil = n_tampil->next;
}
printf("\n");
}

//method untuk insert node baru


void insert_node(int data){

//node baru yang akan di insert


struct SNode *n_insert;
n_insert = (struct SNode*)malloc(sizeof(struct
SNode));
n_insert->data = iterasi;
n_insert->next = NULL;
n_insert->before = NULL;

//kondisi linked list masih kosong


if(n_awal == NULL){
n_awal = n_insert;
}else{
n_bantu = n_awal;

//cari node terakhir


while(n_bantu->next != NULL){
n_bantu = n_bantu->next;
}

//hubungkan node terakhir dengan node


baru
if(n_bantu->next==NULL)
{
n_bantu->next = n_insert;
n_insert->before = n_bantu;
}
}
}
int main(int argc, char *argv[])
{
inisialisasi();
for(iterasi = 11; iterasi<=15; iterasi++)
{
insert_node(iterasi);
}

tampil_list();

system("PAUSE");
return 0;
}

b. Output Program

c. Analisis Program
Program di atas ini menggunakan linkd list, di dalam program ini kita
di tuntut untuk mengatahui kesalah yang ada dan dituntut untuk
melakukan pembenaran. Berjalannya program ini yaitu pertama
dengan cara pendeklarasian #include <stdlib.h> lalu
pendefinisian struct struct SNode{ int data; struct SNode
*next; struct SNode *before;}; Kemudian pendeklarasian
struct Snode yang berisikan pointer *n_awal, node awal dari
linked list, *n_tampil, node bantu untuk tampilkan data ,
*n_bantu; node bantu untuk insert node baru, kemudian deklarasi
variabel iterasi yang bertipe data integer. Lalu pendeklarasian fungsi
inisialisasi, yaitu berisikan inisialisasi linked list n_awal = NULL;.
Kemudian deklarasi fungsi tampil_list yang di dalam n_tampil =
n_awal; kemudian terdapat perulangan yang mengandung kondisi
(n_tampil!=NULL) yang akan menampilkan printf("%d ->",
n_tampil->data); untuk menampilkan datanya n_tampil =

n_tampil->next; Kemudian pendeklarasian fungsi insert_node (int


data) yang didalamnya terdapat node baru yang akan diinsertkan
struct SNode *n_insert; n_insert = (struct
SNode*)malloc(sizeof(struct SNode)); n_insert->data =
iterasi; n_insert->next = NULL; n_insert->before =

NULL; kemudian terdapat kondisi jika linked list masih kosong


(n_awal == NULL) akan menggunakan perumusan n_awal =
n_insert; dan jika kondisi diatas tidak memenuhi maka akan
berjalan ke kondisi berikutnya yaitu, n_bantu = n_awal; dengan
perulangan while untuk mencari node terakhir yang di dalamnya
terdapat kondisi untuk menghubungkan node tekahri dengan node
baru. Lalu untuk menjalankan programnya menggunakan fungsi
utama yaitu int main yang pertama dilakukan yaitu pemanggilan
fungsi inisialisasi yang telah dideklarasikan di atas dengan
perulangan data yang berisikan angka 11 sampai 15, dan kemudian
pemanggilan fungsi tampil_list untuk menaampilkan angka tersebut..

C. TUGAS RUMAH
1. Tugas Rumah 1 : Program Link List ( Wahana Jatim Park Malang )
a. Syntax Program
#include <stdio.h>
#include <windows.h>
#include <conio.h>
struct Node{
int data;
Node *next;
Node *bfr;
};
struct Node *head, *tail, *help;
void init(){
head=NULL;
}

void insert_node(int data){


struct Node *newnode;
newnode = new Node;
newnode->data=data;
newnode->next=NULL;
newnode->bfr=NULL;
if(head==NULL){
head=newnode;
tail=newnode;
}
else{
tail->next=newnode;
newnode->bfr=tail;
tail=tail->next;
}
}
void masuk(){
if(head!=NULL){
if(head->next!=NULL){
help=head;
head=head->next;
head->bfr=NULL;
delete help;
}
else{
delete head;
head=NULL;
tail=NULL;
}
}
else{
printf("\n\n Antrian Kosong");
}
}
void msk_semua(){
if(head!=NULL){
if(head->next==NULL){
delete head;
}
else{
do{
help=tail;
tail=tail->bfr;
delete help;
} while(tail->bfr!=NULL);
}
head=NULL;
tail=NULL;
}
else{
printf("\n\n Antrian Kosong");
}
}void tampil(){
if(head!=NULL){
help=head;
if(head->next!=NULL){
while(help!=NULL){
printf("%d ",help->data);
help=help->next;
}
}
else
printf("%d ",help->data);
}
else{
printf("\n\n Antrian Kosong");
}
}

int main()
{
int pil;
init();
{
system("cls");
system("color A0");
printf("±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
±±±±±±±±±±±±±±±±±±±±±±±±±\n");
printf("±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
±±±±±±±±±±±±±±±±±±±±±±±±±\n");
printf("±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
±±±±±±±±±±±±±±±±±±±±±±±±±\n\n");
printf(" ±±±± ±±±± ±±±±±±±±±±±± ±±±±±±±
±±±±±±± ±±±±±±±±±±± \n");
printf(" ±±±± ±±±± ±±±±±±±±±±±± ±±±±±±±±
±±±±±±±± ±±±±±±±±±±± \n");
printf(" ±±±± ±±±± ±±±±±±±±±±±± ±±±± ±±±±
±±±± ±±±± ±±±± \n");
printf(" ±±±±±±±±±±± ±±±± ±±±± ±±±± ±±±
±±± ±±±± ±±±±±±±±±±± \n");
printf(" ±±±±±±±±±±± ±±±± ±±±± ±±±± ±±
±± ±±±± ±±±±±±±±±±± \n");
printf(" ±±±±±±±±±±± ±±±± ±±±± ±±±± ±
± ±±±± ±±±±±±±±±±± \n");
printf(" ±±±± ±±±± ±±±±±±±±±±±± ±±±±
±±±± ±±±± \n");
printf(" ±±±± ±±±± ±±±±±±±±±±±± ±±±±
±±±± ±±±±±±±±±±± \n");
printf(" ±±±± ±±±± ±±±±±±±±±±±± ±±±±
±±±± ±±±±±±±±±±± \n\n");
printf("±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
±±±±±±±±±±±±±±±±±±±±±±±±±\n");
printf("±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
±±±±±±±±±±±±±±±±±±±±±±±±±\n");
printf("±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
±±±±±±±±±±±±±±±±±±±±±±±±±\n");
printf(" By : Aisya Rawdha\n\n");

printf("============================================\n");
printf("1. Pendaftaran Permainan Wahana Jatim
Park Malang \n");
printf("2. EXIT \n");
printf("============================================\n");
printf(" >>Pilihan ANDA : ");
scanf("%d",&pil);
switch(pil){
case 1:
do{
system("cls");
system("color 57");
printf("\n\n\n ");
printf("Pendaftaran Antrian
Wahana Jatim Park Malang\n\n");

printf("================================================\n
\n");
printf("1. Masukkan antrian
penumpang\n");
printf("2. Mulai masuk
permainan\n");
printf("3. Memberangkatkan
semua antrian\n");
printf("4. Menampilkan semua
antrian\n");
printf("5. Kembali ke menu
utama\n");
printf("6. Keluar\n");

printf("================================================\n
\n");
printf(" >> Pilihan ANDA :
");
scanf("%d",&pil);
switch(pil){
case 1:int no_karcis;
printf("\nMasukkan
Nomor Karcis : ");

scanf("%d",&no_karcis);

insert_node(no_karcis);
printf("\nData berhasil dimasukkan, diantaranya :
\n\n");
tampil(); printf("\n");
system("pause");
break;
case 2:
printf("\nAntrian Pertama Telah Masuk ke
Permainan\n\n");
masuk();
printf("Antrian Sekarang diantaranya : \n\n");
tampil(); printf("\n");
system("pause");
break;
case 3:
printf("\nSemua Antrian Masuk Dalam Permainan Wahana
Jatim Park");
msk_semua(); printf("\n")
system("pause");
break;
case 4:
printf("\nSemua Antrian : \n\n");
tampil(); printf("\n");
system("pause");
break;
case 5:
system("cls");
main();
break;
case 6:
system("cls");
printf("\n\n Terimakasih Atas Kunjungannya");

return 0;

break;
default:
printf("\n\n Maaf, Pilihan tidak tersedia\n");
system("pause");
break;
}

} while(pil!=5);
break;
case 2:
system("cls");
printf("\n\n Terimakasih Atas Kunjungannya");
break;
default :
printf("\n\n Maaf, Pilihan tidak tersedia\n");
system("pause");
system("cls");
break;
}
while(pil!=2);
}
}

b. Output Program
c. Analisis Program
Program di atas ini merupakan program linked list untuk pendaftaraan
antrian masuk ke wahana jatim park malang. Program ini berjalan
pertamanya dengan pendeklarasian header file #include <stdio.h>
#include <windows.h> #include <conio.h>, setelah
pendeklarasian header kemudian pendeklarasian struct Node *head,
*tail, * help; kemudian langsung ke fungsi utama yaitu int main,
pertama yang kita lakukan adalah mendaftarkan permain di dalam
wahana jatim park dengan menggunakan switch case, pilih nomor 1.
Kemudian di dalam case terdapat case lagi langsung menuju case 1 ,
yang pertama berisikan “Masukkan nomor karcis:” kita nenginputkan
nomor 1 untuk menginputkan nomor antiran, kemudian inputkan
nomor antrian Anda, dengan pemanggilan fungsi
insert_node(no_karcis) dan disimpan menginputkkan tanpa ada
batasan, dan nomor karcis yang telah diiinputkan akan keluar di
bawahnya dengan pemanggilan fungsi tampil(). Kemudian pilihan ke
dua yaitu dengan menuju ke case 2 “Mulai masuk permainan” dari
pilihan ini kita dapat memasukkan nomor antrian pertama yang
pertama kali diinputkan ke didalam pilihan 1 dengan pemanggilan
fungsi masuk(); kemudian setelah antrian pertama masuk, maka akan
keluar daftar antrian selanjutnya dengan memanggilan fungsi
tampil(); lalu menuju case 3 yaitu “Memberangkatkan semua antrian”
dengan mengeluarkan outputan “semua antrian dalam permainan
wahana jatim park, dengan pemanggilan fungsi msk_semua();,
kemudian pilihan ke empat menuju case 4 yaitu, untuk “menampilkan
ke semua antrian” dengan pemanggilan fungsi tampil() jika telah
antrian semua telah masuk dalam antrian maka semua antrian akan
kosong. Kemudian case 5 untuk mengembalikan program ke menu
utama dengan menaggilan fungsi utama main();. Lalu yang terakhir
adalah pilihan ke 6 yang langsung menuju ke case 6 “Terimakasih Atas
Kunjungannya". Jika pilihan yang Anda pilih selain angak 1 sampai 6,
maka pilihan default akan keluar outputan “Maaf, Pilihan tidak
tersedia”.

D. KESIMPULAN
Dari praktikum modul 6 mengenai materi “SINGLE & DOUBLE LINKED
LIST” ini, kita dapat mengambil kesimpulan bahwa:

1. Linked List merupakan suatu struktur data pengembangan dari konsep ADT
(Abstrak Data Type) yang bersifat dinamis.

2. Linked List juga dapat benar – benar dihapus / dibersihkan dari memory.
Linked List sebenarnya merupakan suatu typedata tersendiri

3. Ciri – ciri utama dari Linked List adalah, dia mempunyai minimal dua
elemen utama. Elemen – elemen itu adalah data dan pointer untuk
menunjukkan ke list berikutnya.
4. Operasi-operasi pada linked list, yaitu insert (menambahkan),
IsEmpty(menentuan kosong / tidak), Find First(menari elemen pertama),
Find Next (menari elemen yang telah ditunjuk), Retrieve(mengambil elemen
yang ditunjuk oleh now. Elemen tersebut lalu dikembalikan oleh fungsi),
Update(mengubah elemen yang ditunjuk), Delete Now(mengapus elemen
yang ditunjuk now), Delete Head(menghapus elemen yang ditunjuk head),
lear(menghapus linked list yang sudah ada).

5. Macam-macam linked list, yaitu single linked list non cirular, single linked
list circular, double link list non cirular, single linked list circular.

Anda mungkin juga menyukai