Anda di halaman 1dari 34

LAPORAN PRAKTIKUM VI

SINGLE & DOUBLE LINKED LIST


Disusun untuk Memenuhi Matakuliah Praktikum Algoritma dan Struktur Data
Dibimbing oleh Bapak Utomo Pujianto

Oleh:
Miftachul Huda (150533605486)
Mirza R. Pratama (150533604496)
S1 PTI15 OFF B

UNIVERSITAS NEGERI MALANG


FAKULTAS TEKNIK
JURUSAN TEKNIK ELEKTRO
S1 PENDIDIKAN TEKNIK INFORMATIKA
APRIL 2016

Single & Double Linked List


Tujuan
1. Tujuan Instruksional Umum
Mahasiswa dapat melakukan perancangan aplikasi menggunakan struktur Linked
List (Senarai Berkait)
Mahasiswa mampu melakukan analisis pada algoritma Single & Double Linked
List yang dibuat
Mahasiswa mampu mengimplementasikan algoritma Single & Double Linked List
pada sebuah aplikasi secara tepat dan efisien
2. Tujuan Instruksional Khusus a.
Mahasiswa dapat menjelaskan mengenai Single & Double Linked List b

Mahasiswa dapat membuat dan mendeklarasikan Abstraksi Tipe Data Single &
Double Linked List
Mahasiswa mampu menerapkan operasi Single Linked List Non Circular & Single
Linked List Circular
Mahasiswa mampu menerapkan Double Linked List Non Circular & Double
Linked List Circular

DASAR TEORI
Pengertian Linked List
Salah satu bentuk struktur data yang berisi kumpulan data yang tersusun secara
sekuensial, saling bersambungan, dinamis dan terbatas adalah senarai berkait (linked
list). Suatu senarai berkait (linked list) adalah suatu simpul (node) yang dikaitkan dengan
simpul yang lain dalam suatu urutan tertentu. Suatu simpul dapat berbentuk suatu struktur
atau class. Simpul harus mempunyai satu atau lebih elemen struktur atau class yang berisi
data. Secara teori, linked list adalah sejumlah node yang dihubungkan secara linier dengan
bantuan pointer. Senarai berkait lebih efisien di dalam melaksanakan penyisipan-penyisipan
dan penghapusan-penghapusan. Senarai berkait juga menggunakan alokasi penyimpanan
secara dinamis, yang merupakan penyimpanan yang dialokasikan pada runtime. Karena di
dalam banyak aplikasi, ukuran dari data itu tidak diketahui pada saat kompile, hal ini bisa
merupakan suatu atribut yang baik juga. Setiap node akan berbentuk struct dan memiliki satu
buah field bertipe struct yang

sama,

yang berfungsi sebagai

pointer. Dalam

menghubungkan setiap node, kita dapat menggunakan cara first-create-first-access ataupun


first-create-lastaccess. Yang berbeda dengan deklarasi struct sebelumnya adalah satu field
bernama next, yang bertipe struct tnode. Hal ini sekilas dapat membingungkan. Namun,

satu hal yang jelas, variabel next ini akan menghubungkan kita dengan node di sebelah
kita, yang juga bertipe struct tnode. Hal inilah yang menyebabkan next harus bertipe struct
tnode.
Bentuk Umum :
infotype sebuah tipe terdefinisi yang menyimpan informasi sebuah elemen list
next address dari elemen berikutnya (suksesor) .
Jika L adalah list, dan P adalah address, maka alamat elemen pertama list L dapat
diacu dengan notasi : first (L)
Sebelum digunakan harus dideklarasikan terlebih dahulu :
#define First(L) (L)
Elemen yang diacu oleh P dapat dikonsultasi informasinya dengan notasi :
info(P)deklarasi #define info(P) Pinfo
next(P)deklarasi #define next(P) Pnext
Beberapa Definisi :
1. List l adalah list kosong, jika First(L) = Nil
2. Elemen terakhir dikenali, dengan salah satu cara adalah karena Next(Last) = Nil Nil

adalah pengganti Null, perubahan ini dituliskan dengan #define Nil Null
Operasi-operasi Linked List
Insert
Istilah Insert berarti menambahkan sebuah simpul baru ke dalam suatu linked list.
IsEmpty
Fungsi ini menentukan apakah linked list kosong atau tidak.
Find First
Fungsi ini mencari elemen pertama dari linked list.
Find Next
Fungsi ini mencari elemen sesudah elemen yang ditunjuk now.
Retrieve
Fungsi ini mengambil elemen yang ditunjuk oleh now. Elemen tersebut lalu
dikembalikan oleh fungsi.
Update
Fungsi ini mengubah elemen yang ditunjuk oleh now dengan isi dari sesuatu.
Delete Now

Fungsi ini menghapus elemen yang ditunjuk oleh now. Jika yang dihapus adalah
elemen pertama dari linked list (head), head akan berpindah ke elemen berikutnya.
Delete Head
Fungsi ini menghapus elemen yang ditunjuk head. Head berpindah ke elemen
sesudahnya.
Clear
Fungsi ini menghapus linked list yang sudah ada. Fungsi ini wajib dilakukan bila anda
ingin mengakhiri program yang menggunakan linked list. Jika anda melakukannya,
data-data yang dialokasikan ke memori pada program sebelumnya akan tetap
tertinggal di dalam memori.
A. Single Linked List (Senarai berkait tunggal)
Single linked list adalah apabila hanya ada satu pointer yang menghubungkan setiap
node (satu arah next).
1. Single Linked List non Circular
Pembuatan struct bernama tnode berisi 2 field, yaitu field data bertipe integer dan
field next yang bertipe pointer dari tnode.
Deklarasi node dengan struct:
struct tnode
{
int data;
struct tnode *next;

Gambar 1. Sebuah node pada Single Linked List

Asumsikan kita memiliki sejumlah node yang selalu menoleh ke sebelah


dalam

arah yang sama. Atau, sebagai alat bantu, kita bisa mengasumsikan

beberapa orang yang bermain kereta api. Yang belakang akan memegang yang
depan, dan semuanya menghadap arah yang sama. Setiap pemain adalah node. Dan
tangan pemain yang digunakan untuk memegang bahu pemain depan adalah
variabel next. Sampai di sini, kita baru saja mendeklarasikan tipe data dasar sebuah
node. Selanjutnya, kita akan mendeklarasikan beberapa variabel pointer bertipe
struct tnode. Beberapa variabel tersebut akan kita gunakan sebagai awal dari linked
list, node aktif dalam linked list, dan node sementara yang akan digunakan dalam
pembuatan node di linked list. Berikan nilai awal NULL kepada mereka.
Deklarasi node untuk beberapa keperluan, seperti berikut ini:
struct tnode *head=NULL, *curr=NULL, *node=NULL;

Dengan demikian, sampai saat ini, telah dimiliki tiga node. Satu sebagai kepala
(head), satu sebagai node aktif dalam linked list (curr) dan satu lagi node
sementara (node). Untuk mempermudah pengingatan, ingatlah gambar anak
panah yang mengarah ke kanan. Head akan berada pada pangkal anak panah,
dan node-node berikutnya akan berbaris ke arah bagian anak panah yang tajam.

Gambar 2. Single Linked List


Apabila diperhatikan, setiap node memiliki petunjuk untuk node
sebelahnya. Node terakhir akan diberikan nilai NULL. Dengan demikian, setiap
node kebagian jatah.
int i;
for (i=0; i<5; i++)
{
node = (struct tnode *)
malloc (sizeof(struct tnode));
node -> data = i;
if (head == NULL)
{
head = node;
curr = node;
}
else
{
curr -> next = node;
curr = node;
}
}
curr -> next = NULL;
Berikut adalah penjelasan kode-kode pembuatan singly linked list tersebut.
Pertama-tama, akan dibuat perulangan dari 0 sampai 4, yang dimaksudkan untuk
membuat lima buah node yang masing-masing field data nya berisikan nilai dari
0 sampai 4. Pembuatan node dilakukan dengan fungsi malloc().
for (i=0; i<5; i++)
{
node = (struct tnode *)
malloc (sizeof(struct tnode));
node -> data = i;
...
... }

Setelah itu, perlu dibuat node dan penghubung. Pertama-tama, akan diuji apakah
head bernilai NULL. Kondisi head bernilai NULL hanya terjadi apabila belum
dimiliki satu node pun. Dengan demikian, node tersebut akan dijadikan sebagai
head. Node aktif (curr), juga kita dapat dari node tersebut. Kalau head tidak
bernilai NULL alias telah dimiliki satu atau lebih node, yang pertama dilakukan
adalah menghubungkan pointer next dari node aktif (curr) ke node yang baru saja
dibuat. Dengan demikian, baru saja dibuat penghubung antara rantai lama dengan
mata rantai baru. Atau, dalam permainan kereta api, pemain paling depan
dalam barisan lama akan menempelkan tangannya pada bahu pemain yang baru
bergabung. Node aktif (curr) kemudian dipindahkan ke node yang baru dibuat.
if (head == NULL)
{
head = node;
curr = node;
}
Gambar 3. Membuat elemen pertama SLL
else
{
curr->next=node;
curr = node;
}
2. Single Linked List non Circular
Hampir sama dengan single linked list non circular, bahwa dibutuhkan
sebuah kait untuk menghubungkan node-node data yang ada, dimana pada node
terakhir atau tail yang semula menunjukkan NULL diganti dengan menunjuk ke
kepala atau head. Dimana inisialisasi senarai berkait tunggal sirkular
menggunakan struc adalah sebagai berikut:
Deklarasi Single Linked List Circular:
Struct tnode
{
int data; tnode *next;
};
void main()
{
head = new tnode;
head->next = head;
}

Gambar 5. Single Linked List circular

Menambah node dan membuat tail dari single linked list circular
Deklarasi penambahan node baru:
Void main()
{
node = new tnode;
tail = new tnode;
node->next = head->next;
head->next = node;
tail = node;
}
Menyisipkan Node baru

Deklarasi menyisipkan node baru menggunakan sintak berikut:


Void main() {
node = new tnode;
node->next = head->next;
head->next = node;
}
Menghapus Node dari Single Linked List Circular

Deklarasi menghapus node dari single linked list circular, menggunakan sintaks
berikut:
Void main()
{
hapus = new tnode;
if( head != tail)
{
hapus = head;
head = head->next;
tail->next = head;
delete hapus;
}else
{
head = NULL;
tail = NULL;
}
}

B. Double Linked List (Senarai berkait ganda)


Double Linked List adalah elemen-elemen yang dihubungkan dengan dua pointer
dalam satu elemen dan list dapat melintas baik di depan atau belakang. Elemen
double linked list terdiri dari tiga bagian :
1. Bagian data informasi
2. Pointer next yang menunjuk ke elemen berikutnya
3. Pointer prev yang menunjuk ke elemen sebelumnya
1. Double Linked List non Circular

Setiap node pada linked list mempunyai field yang berisi data dan pointer ke node
berikutnya dan ke node sebelumnya. Untuk pembentukan node baru, mulanya
pointer next dan prev akan menunjuk ke nilai NULL. Selanjutnya, pointer prev
akan menunjuk ke node sebelumnya, dan pointer next akan menunjuk ke node
selanjutnya pada list.

Deklarasi node dibuat dari struct berikut ini :


typedef struct TNode{
int data;
Tnode *next;
Tnode *prev;
};
Double Linked List Non Circular dengan HEAD membutuhkan satu buah variabel
pointer, yaitu: head. Head akan selalu menunjuk pada node pertama.

Deklarasi Pointer Penunjuk Kepala Double Linked List


Manipulasi linked list tidak bisa dilakukan langsung ke node yang dituju,
melainkan
harus melalui node pertama dalam linked list. Deklarasinya sebagai berikut:
TNode *head;
Fungsi Inisialisasi Single Linked List non Circular
void init(){
head = NULL;
}
Function untuk mengetahui kosong tidaknya DLLNC
int isEmpty(){
if(head == NULL) return 1;
else return 0;
}
Penambahan data di depan
Penambahan node baru akan dikaitkan di ode paling depan, namun pada saat
pertama kali (data masih kosong), maka penambahan data dilakukan pada headnya. Pada prinsipnya adalah mengkaitkan data baru dengan head, kemudian head
akan menunjuk pada data baru tersebut sehingga head akan tetap selalu menjadi
data terdepan. Untuk menghubungkan node terakhir dengan node terdepan
dibutuhkan pointer bantu.

Fungsi Menambah Di Depan


void insertDepan(int databaru){
TNode *baru;
baru = new TNode;
baru->data = databaru;
baru->next = NULL;
baru->prev = NULL;
if(isEmpty()==1){
head=baru;
head->next = NULL;
head->prev = NULL;
}
else {
baru->next = head;
head->prev = baru;
head = baru;
}
cout<<Data masuk\n;
}

Penambahan data di belakang


Penambahan data dilakukan di belakang, namun pada saat pertama kali data
langsung ditunjuk pada head-nya. Penambahan di belakang lebih sulit karena kita

membutuhkan pointer bantu untuk mengetahui data terbelakang, kemudian


dikaitkan dengan data baru. Untuk mengetahui data terbelakang perlu digunakan
perulangan.
Fungsi penambahan Node ke belakang :
Void insertBelakang (int databaru){
Tnode *baru, *bantu;
Baru = new Tnode;
baru->data = databaru;
baru->next = NULL;
baru->prev = NULL;
if(isEmpty()==1){
head=baru;
head->next = NULL;
head->prev = NULL;
}
else{
bantu=head;
while(bantu->next!=NULL){
bantu=bantu->next
}
bantu->next = baru;
baru->prev = bantu;
}
Cout<<Data masuk\n;
}

Ilustrasi Penambahan Node di Belakang

Function untuk menampilkan isi DLLNC


void tampil(){
TNode *bantu;
bantu = head;
if(isEmpty()==0){
while(bantu!=NULL){
cout<<bantu->data<<" ";
bantu=bantu->next;
}
cout<<endl;
} else cout<<"Masih kosong\n";
}
Function untuk menghapus data di depan:
void hapusDepan (){

TNode *hapus;
int d;
if (isEmpty()==0){
if(head->next != NULL){
hapus = head;
d = hapus->data;
head = head->next;
head->prev = NULL;
delete hapus;
} else {
d = head->data;
head = NULL;
}
cout<<d<<" terhapus\n";
} else cout<<"Masih kosong\n";
}
Fungsi untuk menghapus node terbelakang
void hapusBelakang(){
TNode *hapus;
int d;
if (isEmpty()==0){
if(head->next != NULL){
hapus = head;
while(hapus->next!=NULL){
hapus = hapus->next;
}
d = hapus->data;
hapus->prev->next = NULL;
delete hapus;
} else {
d = head->data;
head = NULL;
}cout<<d<<" terhapus\n";
} else cout<<"Masih kosong\n";
}

Menghapus Node Double Linked List


Tidak diperlukan pointer bantu yang mengikuti pointer hapus yang berguna untuk
menunjuk ke NULL. Karena pointer hapus sudah bisa menunjuk ke pointer
sebelumnya dengan menggunakan elemen prev ke node sebelumnya, yang akan
diset agar menunjuk ke NULL setelah penghapusan dilakukan.
Fungsi menghapus semua elemen
void clear(){
TNode *bantu,*hapus;
bantu = head;
while(bantu!=NULL){
hapus = bantu;
bantu = bantu->next;
delete hapus;
}
head = NULL;
}
2. Double Linked List Circular
Double Linked List Circular (DLLC) adalah linked list dengan menggunakan
pointer, dimana setiap node memiliki 3 field, yaitu 1 field pointer yang menunjuk
pointer berikutnya (next), 1 field menunjuk pointer sebelumnya (prev), serta
sebuah field yang berisi data untuk node tersebut dengan pointer next dan pre-nya
menunjuk ke dirinya sendiri secara circular.

Ilustrasi DLLC

Setiap node pada linked list mempunyai field yang berisi data dan pointer ke node
berikutnya dan ke node sebelumnya. Untuk pembentukan node baru, mulanya
pointer next dan prev akan menunjuk ke dirinya sendiri. Jika sudah lebih dari satu
node, maka pointer prev akan menunjuk ke node sebelumnya, dan pointer next
akan menunjuk ke node sesudahnya.
Deklarasi dan node baru DLLC
Deklarasi node
Dibuat dari struct berikut ini:
typedef struct TNode{
int data;
TNode *next;
Tnode *prev;
};
Pembentukan node baru
Digunakan keyword new yang berarti mempersiapkan sebuah node baru berserta
alokasi memorinya.
TNode *baru;
baru = new TNode;
baru->data = databaru;
baru->next = baru;
baru->prev = baru;

Penambahan data di depan


Penambahan node baru akan dikaitan di node paling depan, namun pada saat
pertama kali (data masih kosong), maka penambahan data dilakukan pada head
nya. Pada prinsipnya adalah mengkaitkan data baru dengan head, kemudian head
akan menunjuk pada data baru tersebut sehingga head akan tetap selalu menjadi
data terdepan. Untuk menghubungkan node terakhir dengan node terdepan
dibutuhkan pointer bantu.
void insertDepan(int databaru){
TNode *baru, *bantu;
baru = new TNode;
baru->data = databaru;
baru->next = baru;
baru->prev = baru;
if(isEmpty()==1){
head=baru;
head->next = head;
head->prev = head;
}
else {
bantu = head->prev;
baru->next = head;
head->prev = baru;
head = baru;
head->prev = bantu;
bantu->next = head;
}
cout<<"Data masuk\n";
}
Penambahan data di belakang
Penambahan data dilakukan di belakang, namun pada saat pertama kali data
langsung ditunjuk pada head-nya. Penambahan di belakang lebih sulit karena kita
membutuhkan pointer bantu untuk mengetahui data terbelakang, kemudian
dikaitkan dengan data baru. Untuk mengetahui data terbelakang perlu digunakan
perulangan.

void insertBelakang (int databaru){


Tnode *baru, *bantu;
baru = new Tnode;
baru->data = databaru;
baru->next = baru;
baru->prev = baru;
if(isEmpty()==1){
head=baru;
head->next = head;
head->prev = head;
}
else{
bantu=head->prev;
bantu->next = baru;
baru->prev = bantu;
baru->next = head;
head->prev = baru;
}
Cout<<Data masuk\n;
}

Function untuk menampilkan isi linked list


void tampil(){
TNode *bantu;
bantu = head;
if(isEmpty()==0){
do{
cout<<bantu->data<<" ";
bantu=bantu->next;
}while(bantu!=head);
cout<<endl;
} else cout<<"Masih kosong\n";
}

Function untuk menghapus node terbelakang


void hapusDepan (){
TNode *hapus,*bantu;
int d;

if (isEmpty()==0){
if(head->next != head){
hapus = head;
d = hapus->data;
bantu = head->prev;
head = head->next;
bantu->next = head;
head->prev = bantu;
delete hapus;
} else {
d = head->data;
head = NULL;
}
cout<<d<<" terhapus\n";
} else cout<<"Masih kosong\n";
}

Function untuk menghapus node terbelakang


void hapusBelakang(){
TNode *hapus,*bantu;
int d;
if (isEmpty()==0){
if(head->next != head){
bantu = head;

while(bantu->next->next != head){
bantu = bantu->next;
}
hapus = bantu->next;
d = hapus->data;
bantu->next = head;
delete hapus;
} else {
d = head->data;
head = NULL;
}
cout<<d<<" terhapus\n";
} else cout<<"Masih kosong\n";
}
Function untuk menghapus semua elemen
void clear(){
TNode *bantu,*hapus;
if (isEmpty()==0){
bantu = head;
while(bantu->next!=head){
hapus = bantu;
bantu = bantu->next;
delete hapus;
}
head = NULL;
}
}

Latihan Praktikum
Nama Program
Bahasa Pemrogramam
Compiler
Script Program

: Single Linked List Non Circular


: C++
: MinGW Developer Studio
:

#include <iostream>
#include <conio.h>
#include <iomanip> setw ()
using namespace std;
struct node
{
int data;
node *next;
};
node
node
node
node
node

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

void inisialisasi()
{
head = NULL;
tail = NULL;
}
void input (int dt)
{
entry = (node*) malloc(sizeof(node)); //alokasi memory
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

dilakukan"<<endl;
}
else
{
simpan = head->data;
cout<<"\ndata yang dihapus adalah"<<simpan<<endl;
//hapus depan
del = head;

tidak

bisa

head = head->next;
delete del;
}

void cetak ()
{
curr = head;
if(head == NULL)
cout<<"\ntidak ada data dalam linked list"<<endl;
else
{
cout<<"Data 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<<"Masukkan 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;

Output Program

Algoritma
:
1. Mulai
2. Mendeklarasikan header
3. Mendeklarasikan struct node
4. Penggunaan fungsi node:
node*head;
node*tail;
node*curr;
node*entry;
node*del;

5.
6.
7.
8.

Penggunaan void inisialisasi :


Untuk menginputkan data pada program
Untuk menghapuskan data pada program
Untuk menghapus depan
del=head;
head=head->next;
delete del;

9. Data diproses dahulu sebelum dicetak


10.

Data dicetak pada keluaran program

11.
Selesai
Penjelasan Program

Pada program di atas adalah single linked list non circular, pada program di atas pada
program terdapat 4 menu dari data yang pertama yaitu Input data, hapus data, Cetak data dan
yang terakhir yaitu exit. Pada input data kita memasukkan data yang di inputkan seperti
contoh kita memasukkan angka 48 dan 10 maka angka tersebut di simpan, dan hapus data
yaitu menghapus data yang telah dimasukkan seperti contoh kita memasukkan angka 48 maka
data yang akan dihapus tersebut yaitu 48. Dan cepat data yaitu untuk menampilkan kembali
data yang telah dimasukkan pada input data. Kita memasukkan angka 48 dan akan disimpan,
setelah itu di tampilkan pada cetak data tersebut. Dan yang terakhir yaitu Exit berguna untuk
mengakhiri dari program.

Nama Program
Bahasa Pemrogramam
Compiler

Tugas Praktikum
: Troubleshoot Program
: C++
: MinGW Developer Studio

Script Program

#include <stdio.h>
#include <stdlib.h>
#include <windows.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 menamilkan data
*n_bantu;
//node bantu untuk insert nodde 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; //awalnya before
}
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;
//konisi 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 terkahir dengan node baru


if(n_bantu->next == NULL)
{
n_bantu->next = n_insert;
n_insert->before = n_bantu;
}

}
int main()
{
inisialisasi();
for(iterasi = 11; iterasi<=15; iterasi++)
{
insert_node(iterasi);
}
tampil_list();
system("PAUSE");
return 0;

Output Program

Algoritma

1.
2.
3.
4.
5.
6.
7.

Mulai
Mendeklarasikan header
Mendeklarasikan struct node
Penggunaan fungsi node
Membaca fungsi inisialisasi, tampil_list, insert_node
Membaca menu utama
Menampilkan hasil dari program
8. Selesai
Penjelasan Program
:
Program di atas menjelaskan untuk menampilkan bilangan yang ada pada skrip program tetapi
harus diperbaiki dahulu yang telah didapatkan pada algoritmanya dengan maksud sebelum
program tersebut dibenahi keluaran dari program diatas tidak menampilkan bilangan yang
terdapat pada hasil akhir melaikan bilangan hanya menmpilkan angka 11 saja, oleh karena itu
kita mengganti pada awalah before menjadi next (n_tampil = n_tampil->next; //awalnya
before) untuk meneruskan pada bilangan atau angka agar urut apabila kita menginputkan
dengan before maka tampilan pada keluaran program hanya angka 11 saja karena digunakan
before atau sebelum, apabila next maka menampilkan angaka 11 12 13 14 15 seperti pada
hasil diatas.

Tugas Rumah

Nama Program
Bahasa Pemrogramam
Compiler
Script Program

: Metode Linked List


: C++
: MinGW Developer Studio
:

#include <stdio.h>
#include <windows.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();
do{
printf("\n\n\t\t
WAHANA PERMAINAN JATIM PARK MALANG\n\n");
printf(" By : Miftachul and Mirza \n\n 2016-2017\n\n");
printf("
================================================\n\n");
printf("
1. Pendaftaran Wahana Jatim Park Malang\n\n");
printf("
2. Exit\n\n");
printf("
================================================\n\n");
printf("
>>Pilihan Anda : ");
scanf("%d",&pil);
switch(pil){
case 1:
do{

Malang\n\n");

system("cls");
printf("\n\n\n
");
printf("Pendaftaran
Antrian

Wahana

Jatim

Park

printf("================================================\n\n");
printf("1. Masukkan antrian penumpang\n\n");
printf("2. Mulai masuk permainan\n\n");
printf("3. Memberangkatkan semua antrian\n\n");
printf("4. Menampilkan semua antrian\n\n");
printf("5. Kembali ke menu utama\n\n");
printf("6. Keluar\n\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);
diantaranya : \n\n");

Permainan\n\n");

printf("\nData

tampil();
printf("\n");
system("pause");
break;
case 2:
printf("\nAntrian Pertama
masuk();
printf("Antrian

\n\n");

berhasil

Sekarang

tampil();
printf("\n");
system("pause");
break;
case 3:
printf("\nSemua
Antrian

Permainan");

Kunjungannya");

Telah

Masuk

ke

diantaranya

Masuk

msk_semua();
printf("\n");
system("pause");
break;
case 4:
printf("\nSemua Antrian : \n\n");
tampil();
printf("\n");
system("pause");
break;
case 5:
system("cls");
break;
case 6:
system("cls");
printf("\n\n
Terimakasih
return 0;
break;
default:
printf("\n\n

tersedia\n");

dimasukkan,

system("pause");
break;

}
} while(pil!=5);
break;
case 2:
system("cls");

Maaf,

Pilihan

Dalam

Atas

tidak

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

Output Program

Algoritma
:
1. Mulai
2. Mendeklarasikan header file
3. Mendeklarasikan struct Snode
4. Mendeklarasikan fungsi inisialisasi, insert, input dan semua tampilan
5. Mendelarasikan fungsi menu dan main
6. Pemanggilan fungsi inisialisasi untuk mendeklarasikan nilai head
7. Dalam fungsi menu user melakukan inputan yang sesuai dengan kebutuhan user.
8. Jika user memilih menu 1, maka program menampilkan pendaftaran
9. Jika user memilih 2, maka user memilih keluar
10. Selesai
Penjelasan Program

Pada program diatas menjelaskan tentang Wahana dari wisata di jatimpark malang, pada awal
tampilan di program terdapat dua pilihan pada menu, menu yang pertama yaitu pendaftaran

pada wahana dan menu yang kedua yaitu keluar. Apabila kita memilih menu yang pertama
maka akan disajikan kembali dari data yang telah ada, terdapat 5 menu. Yang pertama yaitu
memasukkan antrian penumpang yang berarti kita memasukkan nomer pada penumpang
dahulu setelah itu data tersebut disimpan. Dan kedua yaitu mulai masuk permainan pada
program ini berguna untuk mengurutkan data pada penumpang dengan urut seperti contoh
apabila kita memasukkan nomer 1927 kemudia 1933 maka yang keluar dahulu adalah 1927
setelah itu 1933. Yang ketiga yaitu memberangkatkan antrian yang bermaksud sama dengan
menghapus tetapi memberangkatkan antrian tersebut berguna untuk menghilangkan semua
data yang sedang antri. Data keempat yaitu menampilkan antrian, dengan maksud
menampilkan antrian yang sedang aktif apabila antrian sudah diberangkatkan maka data pada
penumpang akan hilang, dan apabila data masih ada atau masi menunggu maka data tersebut
bisa ditampilkan. Dan selanjutnya yaitu kembali ke menu utama yaitu mengembalikan ke data
pada awal registrasi penumpang atau pengguna yang ingin menikmati wahana. Dan yang
terakhir yaitu keluar berguna untuk mengakhiri dari program.

KESIMPULAN

Linked List adalah salah satu bentuk struktur data, berisi kumpulan data (node) yang tersusun
secara sekuensial, saling sambungmenyambung, dinamis dan terbatas.
Linked List sering disebut juga Senarai Berantai
Linked List saling terhubung dengan bantuan variabel pointer
Masing-masing data dalam Linked List disebut dengan node (simpul) yang menempati
alokasi memori secara dinamis dan biasanya berupa struct yang terdiri dari beberapa
field.
Single Linked List adalah sebuah LINKED LIST yang menggunakan sebuah variabel pointer
saja untuk menyimpan banyak data dengan metode LINKED LIST, suatu daftar isi yang
saling berhubungan.
Double Link List adalah elemen-elemen yang dihubungkan dengan dua pointer dalam satu
elemen dan list dapat melintas baik di depan atau belakang.Elemen double link list terdiri dari
tiga bagian:
Bagian data informasi
Pointer next yang menunjuk ke elemen berikutnya
Pointer prev yang menunjuk ke elemen sebelumnya
Untuk menunjuk head dari double link list, pointer prev dari elemen pertama menunjuk
NULL. Sedangkan untuk menunjuk tail, pointer next dari elemen terakhir menunjuk NULL.

DAFTAR RUJUKAN
1. Tim Asisten Dosen.2016.Modul VI Single dan Double Linked List : Universitas
Negeri Malang.

Anda mungkin juga menyukai