Anda di halaman 1dari 26

Modul 1 Linked List dan Array

MODUL I
LINKED LIST DAN ARRAY
A. TUJUAN
1. Mahasiswa dapat mengetahui bagaimana mengimplementasikan array
dalam program.
2. Mahasiswa memahami dan mampu membuat single Linked List.
3. Mahasiswa memahami dan mampu membuat double Linked List.
4. Mahasiswa dapat membuat dan menggunakan berbagai operasi operasi
yang terdapat pada Linked List.
B.

DASAR TEORI
1. Array
Array atau larik adalah suatu bentuk struktur data yang menampung
satu data yang sejenis (bertipe data sama) yang diwakili oleh satu nama
variabel.[1]
1.1. Array Satu Dimensi
Array satu dimensi yaitu array yang terdiri atas satu baris dan
banyak kolom.pendeklarasian suatu array harus diikuti oleh suatu
indeks yang menunjukan jumlah maksimum data yang disediakan.[2]
Deklarasi array satu dimensi :
tipe_data nama_var_array [ukuran];

Contoh :
Char huruf [9];

Tabel 1.1 Indeks Array

Praktikum Algoritma dan Struktur Data

Modul 1 Linked List dan Array

4
indeks

Bentuk umum pengaksesan array :


Nama_Array [Indeks];

Pendefinisian inisialisasi array berdimensi satu, yaitu :


Tipe_Data Nama_Array [jml elemen] = [nilai array];

Contoh :
Float nilai [5] = {56, 66, 87, 98, 78}

1.2. Array Dua Dimensi


Array Dua Dimensi yaitu array yang tersusun dari banyak baris dan
banyak kolom, dimana indeks pertama menunjukan baris dan indeks
kedua menunjukan kolom.[3]
Deklarasi array dua dimensi :
Tipe_Data Nama_Var_array [batas_baris]
[batas_kolom];

Contoh :
Int b [2][3]= {{2,4,1},{5,3,7}};

Tabel 1.2. Array dua dimensi

1.3. Array Dinamis


Praktikum Algoritma dan Struktur Data

Modul 1 Linked List dan Array

Array dinamis adalah array yang jumlah pemesanan tempat di


memori dapat diubah sesuai dengan kebutuhan, sehingga lebih
optimal dalam pemanfaatan ruang di memori.[3]
Contoh :
Static int dataktp [2] [7] [8] [5]

2. Single Linked List


Sebuah list yang elemennya hanya menyimpan informasi elemen
setelahnya (next) dan hanya memiliki pengait ke elemen berikutnya, 1
pengait. Sehingga jalannya pengaksesan list hanya dapat dilakukan
secara maju sebelumnya, maka hanya dapat mengakses elemen
berikutnya.[4]
Contoh :
next

a
head

data

tail
NULL

Gambar 1.1 Single Linked List.

3. Double Linked List


Double Linked List adalah linked list biasa, hanya saja setiap elemen
listnya memuat 2 macam pointer yang satu menunjukan elemen
sebelumnya dan yang lainnya menunjuk ke elemen sesudahnya.[5]
Contoh :
next

a
head

data

d
tail
NULL

Praktikum Algoritma dan Struktur Data

Modul 1 Linked List dan Array

Gambar 1.2 Double Linked List.


4. Operasi Operasi yang Ada pada Linked List
4.1 Penyisipan simpul ke Linked list
1) Insert first (L,N), operasi penyisipan sebagai simpul N sebagai
simpul pertama di L.
2) Insert after (L, N, Prev N), operasi penyisipan simpul N setelah
simpul tertentu Prev N.
3) Insert last (L,N), operasi penyisipan simpul N sebagai simpul
terakhir.
4) Insert before (L,N), operasi penyisipan simpul N sebelum
simpul tertentu aft N.
4.2 Penghapusan variabel dinamis (simpul suatu Linked list)
1) Delete first (L), operasi penghapusan simpul pertama dari list L.
2) Delete last (L), operasi penghapusan simpul terakhir dari list L.
3) Delete after (L, PrevN), operasi penghapusan setelah simpul
tertentu PrevN di last L.
4) Penghapusan simpul tertentu

Delete Node (L,N), operasi penghapusan simpul N dari list


L.

Delete K Node (L,K), operasi penghapusan simpul dengan


key K dari list.[6]

Praktikum Algoritma dan Struktur Data

Modul 1 Linked List dan Array

C.

PERMASALAHAN
1. Buat single linked list dengan memuat minimal 1 buah data array
disertakan operasi :
a. Add front & add back
b. Insert (after/before/between)
c. Delete (front & back)
d. Delete linked list
Penyelesaian :
a. Algoritma
1. Add Front :
a. Buat fungsi add front yang mempunyai paramaeter tipe data
double.
b. Jika size dari Node tersebut adalah 0, buat Node baru yang
bernama tmp.
c. Data merupakan atribut dari tmp yang memiliki nilai dataIn.
d. Next merupakan atribut dari tmp yang memiliki nilai NULL.
Next digunakan sebagai penghubung antara satu Node dengan
Node yang lainnya.
e. Proses Lingking. Karena tmp adalah Node baru, maka head
dan tail memiliki nilai sama dengan tmp.
f. Size-nya akan terus bertambah 1 jika kondisi tersebut
terpenuhi.
g. Sebaliknya, jika size tidak sama dengan 0, maka buat Node
baru yang bernama tmp.
h. Data merupakan atribut dari tmp yang memiliki nilai dataIn.
i. Next merupakan atribut dari tmp yang memiliki nilai NULL.
Next digunakan sebagai penghubung antara satu Node dengan
Node yang lainnya.
j. Proses Lingking. Node akan ditambahkan di depan Node yang
sudah ada.

Praktikum Algoritma dan Struktur Data

Modul 1 Linked List dan Array

k. Next merupakan atribut dari tmp yang memiliki nilai head.


Node baru yang bernama tmp ditambahkan sebelum Node
yang sudah ada, sehingga tmp->next-nya adalah head dari
Node yang sudah ada tersebut.
l. Karena tmp yang merupakan Node baru tersebut sudah
terhubung dengan Node yang sudah ada, maka head-nya di
pindah ke Node yang bernama tmp. Jadi, head sama dengan
tmp.
2. Insert Node :
a. Buat fungsi insert node, dimana parameter dari fungsi
tersebut adalah double key, dan double dataIn.
b. Buat variable yang bertipe data bool yang bernama ketemu
yang diberi nilai false.
c. Tmp merupakan atribut dari Node yang memiliki nilai head.
d. Buat perulangan while, dimana kondisinya adalah ketemu
sama dengan false and tmp tidak sama dengan NULL.
e. jika data yang merupakan atribut dari tmp sama dengan key,
maka nilai ketemu sama dengan true.
f. Sebaliknya, jika data dari tmp tidak sama dengan key, maka
tmp-nya bernilai tmp->next.
g. Jika insert-nya ditemukan, maka akan membuat Node baru
yang bernama nN. nN yang merupakan atribut dari Node
sama dengan tipe dataIn. Dan next yang merupakan atribut
dari nN sama dengan NULL.
h. Proses lingking, next yang merupakan atribut dari nN sama
dengan next yang merupakan atribut dari tmp.

Praktikum Algoritma dan Struktur Data

Modul 1 Linked List dan Array

i. Print class. jika size sama dengan 0, maka tampilkan isi


linked list kosong.
j. Jika tmp tidak sama dengan 0, maka cetak isi linked list.
Dimana isi dari linked list itu adalah data yang merupakan
atribut dari tmp, dan tmp bernilai next.yang merupakan
atribut dari tmp
k. Cetak add front.
l. Cetak insert Node.
3. Remove all :
a) Ketika kondisi size tidak sama dengan 0. Maka, jika size sama
dengan 1, head-nya bernilai NULL, kemudian hapus tail-nya.
Karena sudah di hapus, maka tail bernilai NULL. Ukurannya
akan terus berkurang selama kondisi tersebut terpenuhi.
b) Sebaliknya, jika size tidak sama dengan 1, tmp yang
merupakan atribut dari Node sama dengan head. Ketika next
yang merupakan bagian dari tmp tidak sama dengan tail, tmpnya akan bernilai tmp->next. Kemudian tmp akan menjadi
tail. Artinya, Node tersebut akan mengecek semua Node
selama Node tersebut bernilai 1, dan tmp->next akan menjadi
tail-nya..
c) Ketika Node sudah berada pada posisi terakhir, maka tail>next bernilai NULL.
d) Hapus tmp.
4. Remove back :
a) Jika size bernilai 1, maka head sama dengan NULL. Kemudian
hapus tail-nya. Karena tail sudah dihapus, maka tail bernilai
NULL. Ukurannya akan terus berkurang 1 selama kondisi
tersebut terpenuhi.
b) Sebaliknya jika size tidak sama dengan 1,
c) Sebaliknya, jika size tidak sama dengan 1, tmp yang
merupakan atribut dari Node sama dengan head. Ketika next
yang merupakan bagian dari tmp tidak sama dengan tail, tmpnya akan bernilai tmp->next. Kemudian tmp akan menjadi

Praktikum Algoritma dan Struktur Data

Modul 1 Linked List dan Array

tail. Artinya, Node tersebut akan mengecek semua Node


selama Node tersebut bernilai 1, dan tmp->next akan menjadi
tail-nya..
d) Ketika Node sudah berada pada posisi terakhir, maka tail>next bernilai NULL.
e) Hapus tmp.
b. Source code
#include<iostream>
#include<conio.h>
#include<stdlib.h>
#include<time.h>
class LL_1D
{
private:
struct Node
{
double data;
Node *next;
};
Node * head;
Node * tail;
int size;
public :
LL_1D()
{
head=NULL;
tail=NULL;
size=0;
};
void hapus_semua (double dataIn);
void hapus_ekor (double dataIn);
void addFront (double dataIn);
void insertnode(double key, double dataIn);
int getSize()
{
return size;
}
void printLL();
};
void LL_1D :: hapus_semua (double dataIn)
{
while (size!=0)
if(size==1)
{
head=NULL;
delete tail;
tail=NULL;
size--;
}
else
{
Node * tmp= head;
while (tmp->next!=tail)
tmp=tmp->next;

Praktikum Algoritma dan Struktur Data

Modul 1 Linked List dan Array

tail=tmp;
tmp=tmp->next;
tail->next=NULL;
delete tmp;
size--;
}
}
void LL_1D :: hapus_ekor (double dataIn)
{
if(size==1)
{
head=NULL;
delete tail;
tail=NULL;
size--;
}
else
{
Node * tmp= head;
while (tmp->next!=tail)
tmp=tmp->next;
tail=tmp;
tmp=tmp->next;
tail->next=NULL;
delete tmp;
size--;
}
}
void LL_1D :: addFront (double dataIn)
{
if (size==0)
{
//buat node baru
Node * tmp=new (Node);
tmp->data=dataIn;
tmp->next=NULL;
//linking
head=tmp;
tail=tmp;
size++;
}
else
{

//buat node baru


Node * tmp=new (Node);
tmp->data=dataIn;
tmp->next=NULL;
//linking
tmp->next=head;
head=tmp;
size++;

}
}
void LL_1D::insertnode ( double key, double dataIn){

Praktikum Algoritma dan Struktur Data

Modul 1 Linked List dan Array

//1.cara posisi
bool ketemu = false;
Node *tmp = head;
while (ketemu==false&& tmp!=NULL)
if (tmp->data==key) ketemu=true;
else tmp=tmp->next;
}
//insert jika ketemu
if (ketemu){
//2.1 buat node baru
Node * nN=new (Node);
nN->data=dataIn;
nN->next=NULL;
//2.2 linking
nN->next=tmp->next;
tmp->next=nN;
size++;

void LL_1D::printLL(){
if (size==0)
cout<<"linked list kosong : "<<endl;
else {
cout<<"isi linked list : "<<endl;
Node * tmp=head;
while(tmp!=NULL){
cout<<tmp->data<<" ";
tmp=tmp->next;
}
cout<<endl;
}
}
int main ()
{
LL_1D praktikum;
cout<<"ukuran adalah :"<<praktikum.getSize()<<endl;
cout<<endl;
cout<<endl;
praktikum.addFront(5);
praktikum.addFront(10);
praktikum.addFront(15);
praktikum.addFront(20);
praktikum.printLL();
cout<<"ukuran adalah :"<<praktikum.getSize()<<endl;
cout<<endl;
cout<<endl;
cout<<"ukuran adalah :"<<praktikum.getSize()<<endl;
praktikum.printLL();
praktikum.insertnode(20,50);
cout<<"ukuran adalah :"<<praktikum.getSize()<<endl;
praktikum.printLL();
praktikum.addFront(1);
praktikum.printLL();
cout<<"ukuran adalah :"<<praktikum.getSize()<<endl;
cout<<endl;

Praktikum Algoritma dan Struktur Data

Modul 1 Linked List dan Array

cout<<endl;
praktikum.addFront(3);
praktikum.printLL();
cout<<"ukuran adalah :"<<praktikum.getSize()<<endl;
cout<<endl;
cout<<endl;
praktikum.hapus_ekor(5);
praktikum.printLL();
cout<<" ukuran berkurang: "<<praktikum.getSize()<<endl;
cout<<endl;
cout<<endl;
praktikum.hapus_semua(5);
praktikum.printLL();
cout<<"ukuran kosong : "<<praktikum.getSize()<<endl;
getch();
return 0;
}

c. Hasil Compile

Gambar 1.3 Hasil Compile pembahasan nomor 1.

D.

ANALISA
class LL_1D
{

class LL_1D akan menampung suatu bentuk tipe data baru dalam

linked list. Dimana class merupakan nama LL_1D.


private:
struct Node
{
double data;
Node *next;
};
Node * head;
Node * tail;

Praktikum Algoritma dan Struktur Data

Modul 1 Linked List dan Array

int size;

private: mengakses source code yang ada di dalam kelas tersebut

saja. struct Node dimana node variable yang bertipe data struct.
Dimana variable data sebagai simpanan dalam membuat node bertipe
data double. Node * next dimana next adalah artibut dari node,

dimana next berfungsi untuk menghubungkan node ke node yang lain.


Node * head; dimana head merupakan artibut dari node. Node *
tail; dimana tail adalah artibut dari node. int size; dimana
size adalah variable yang bertipe data int ,dimana berfungsi untuk

membuat ukuran suatu node.


public :
LL_1D()
{
head=NULL;
tail=NULL;
size=0;
};

LL_1D()merupakan

nama konstruktur harus sama dengan nama

class. head=NULL dimana head memiliki nilai null. tail=NULL

dimana Tail memiliki nilai null. size=0 dimana


ukuran node bernilai 0.
void hapus_semua ();
void hapus_ekor ();
void addFront (double dataIn);
void insertnode(double key, double dataIn);
int getSize()
{
return size;
}
void printLL();
};

Fungsi diatas merupakan pemanggilan fungsi.


void LL_1D :: hapus_semua ()
{
while (size!=0)
if(size==1)
{
head=NULL;
delete tail;
tail=NULL;

Praktikum Algoritma dan Struktur Data

size memiliki

Modul 1 Linked List dan Array

size--;
}

Void LL_1D merupakan bagian dari fungsi hapus_semua. Ketika size

tidak sama dengan 0. Jika size bernilai 1, maka head sama dengan NULL,
kemudian hapus tail, karena tail sudah dihapus, maka tail bernilai
NULL. Kemudian size-nya akan berkurang 1.
else
{

Node * tmp= head;


while (tmp->next!=tail)
tmp=tmp->next;
tail=tmp;
tmp=tmp->next;
tail->next=NULL;
delete tmp;
size--;

Sebaliknya, tmp akan sama dengan head. Ketika tmp-next tidak


sama dengan tail, maka tmp akan terus mencari tmp yang lainnya,
selama tmp-next tidak sama dengan tail. Jika sudah selesai, maka tail
sama dengan tmp. Dan tmp sama dengan tmp->next. karena tail>next adalah NULL, maka tail->next bernilai

NULL. Kemudian

hapus tmp.
void LL_1D :: hapus_ekor ()
{
if(size==1)
{
head=NULL;
delete tail;
tail=NULL;
size--;
}

Void LL_1D merupakan bagian dari fungsi hapus_ekor(). Jika size

sama dengan 1, maka head akan bernilai NULL. Setelah itu hapus tail,
karena tail sudah terhapus, maka nilai tail adalah. Karena tail-nya
sudah dihapus, maka size-nya akan berkurang 1.
else

{
Node * tmp= head;
while (tmp->next!=tail)
tmp=tmp->next;
tail=tmp;
tmp=tmp->next;

Praktikum Algoritma dan Struktur Data

Modul 1 Linked List dan Array

tail->next=NULL;
delete tmp;
size--;
}

Jika tidak, maka tmp sama dengan head. Selama tmp->next tidak
sama dengan tail. Maka tmp-nya bernilai tmp->next. Tail sama
dengan tmp. Tmp sama dengan tmp->next. tail->next bernilai
NULL. Kemudian hapus tmp. kemudian size-nya akan berkurang 1.
void LL_1D :: addFront (double dataIn)
{
if (size==0)
{
//buat node baru
Node * tmp=new (Node);
tmp->data=dataIn;
tmp->next=NULL;

//linking
head=tmp;
tail=tmp;
size++;

Pada Script di atas berfungsi untuk membuat node baru. void


LL_1D :: addFront (double dataIn)dimana addFront bagian

dari LL_1D yang bertipe data void. if (size==0)merupakan suatu


kondisi jika size bernilai 0 maka pernyataan akan dijalankan. Node
*

tmp=new(Node)

node,dimana

tmp

dimana

tmp

merupakan nama artibut dari

adalah nilai node baru. tmp->data=dataIn

dimana data merupakan artibut dari tmp yang bernilai dataIn.tmp>next=NULL dimana next merupakan artibut dari tmp yang bernilai
NULL. Dimana node tmp tidak terhubung dengan node yang lainnya.
head=tmp dimana tmp adalah haed atau kepala suatu node yang

bernama tmp.tail=tmp dimana tmp adalah tail atau ekor suatu


node yang bernama tmp. size++ berfungsi untuk penambahan suatu
node.
Else
{

//buat node baru


Node * tmp=new (Node);
tmp->data=dataIn;
tmp->next=NULL;

Praktikum Algoritma dan Struktur Data

Modul 1 Linked List dan Array

//linking
tmp->next=head;
head=tmp;
size++;
}

Jika tidak, maka akan membuat Node baru yang bernama tmp. Dimana
tmp->data bernilai dataIn. Karena Node sebelumnya sudah ada maka,
tmp->next bernilai head dari Node yang sebelumnya. Karena Node baru

sudh ditambahkan, maka head-nya akan dipindah ke Node baru tersebut.


Selanjutnya size akan bertambah 1.
void LL_1D::insertnode ( double key, double dataIn){
//1.cara posisi
bool ketemu = false;
Node *tmp = head;
while (ketemu==false&& tmp!=NULL)

Void LL_1D merupakan bagian dari fungsi insertnode yang

mempunyai parameter double key (digunakan sebagai acuan penambahan


Node), dan double dataIn. Hal pertama yang akan dilakukan adalah

mencari posisi. Terlebuih dahulu buat variable yang bernama ketemu yang
bernilai false. Dan jadikan tmp sebagai head. Ketika variable ketemu
sama dengan false dan tmp tidak sama dengan NULL.
if (tmp->data==key) ketemu=true;
else tmp=tmp->next;
}
//insert jika ketemu
if (ketemu){
//2.1 buat node baru
Node * nN=new (Node);
nN->data=dataIn;
nN->next=NULL;
//2.2 linking
nN->next=tmp->next;
tmp->next=nN;
size++;
}

Jika tmp->data sama dengan key. Maka ketemu=true. Maksudnya


jika, tmp tersebut sudah menemukan key, maka akan menambahkan Node
baru setelah key. Jika tidak, maka tmp akan mencari key sampai key
ketemu. Jika sudah ketemu, buat Node baru yang bernama nN. Dimana nN>data bernilai dataIn. Karena Node-nya baru dibuat maka, nN->next

Praktikum Algoritma dan Struktur Data

Modul 1 Linked List dan Array

bernilai NULL. Selanjutnya proses lingking, nN->next sama dengan tmpnext dan tmp->next=nN. Selanjutnya size akan bertambah 1.
void LL_1D::printLL(){
if (size==0)
cout<<"linked list kosong : "<<endl;
else {
cout<<"isi linked list : "<<endl;
Node * tmp=head;
while(tmp!=NULL){
cout<<tmp->data<<" ";
tmp=tmp->next;
}
cout<<endl;
}
}

void LL_1D::printLL(). if (size==0) merupakan suatu

kondisi jika size bernilai 0, maka akan menampilkan statement isi


linked kosong. else { cout<<"isi linked list:"<<endl jika
size tidak sama dengan 0, maka akan menampilkan statement isi linked

list. Node*tmp=head; dimana tmp merupakan nama artibut dari


node,dimana

tmp

bernilai

head.

while(tmp!=NULL)

dimana

while merupakan penanda bahwa satatement yang beada didalamnya

merupakan kondisi akhir maka kondisi tmp tidak sama dengan NULL
tidak akan melakukan pengecekan kembali. tmp=tmp->next dimana
tmp memiliki artibut next yang berfungsi menyambungkan dari node

ke node yang lain.


int main ()
{
LL_1D praktikum;
cout<<"ukuran adalah :"<<praktikum.getSize()<<endl;
cout<<endl;
cout<<endl;
cout<<"addfront: "<<endl<<endl;
praktikum.addFront(5);
praktikum.addFront(10);
praktikum.addFront(15);
praktikum.addFront(20);
praktikum.printLL();
cout<<"ukuran adalah :"<<praktikum.getSize()<<endl;
cout<<endl;
cout<<endl;
cout<<"insert node : "<<endl<<endl;
praktikum.insertnode(20,50);
cout<<"ukuran adalah :"<<praktikum.getSize()<<endl;
praktikum.printLL();
cout<<endl<<endl;
Praktikum Algoritma dan Struktur Data

Modul 1 Linked List dan Array

cout<<"menambahkan node di depan node sebelumnya :


"<<endl<<endl;
praktikum.addFront(1);
praktikum.printLL();
cout<<"ukuran adalah :"<<praktikum.getSize()<<endl;
cout<<endl;
cout<<endl;
cout<<"menambahkan node di depan node sebelumnya :
"<<endl<<endl;
praktikum.addFront(3);
praktikum.printLL();
cout<<"ukuran adalah :"<<praktikum.getSize()<<endl;
cout<<endl;
cout<<endl;
cout<<"hapus tail : "<<endl<<endl;
praktikum.hapus_ekor();
praktikum.printLL();
cout<<" ukuran berkurang :
"<<praktikum.getSize()<<endl;
cout<<endl;
cout<<endl;
cout<<"hapus semua : "<<endl<<endl;
praktikum.hapus_semua();
praktikum.printLL();
cout<<"ukuran kosong : "<<praktikum.getSize()<<endl;
getch();
return 0;
}

int main merupkan sebuah fungsi main. Dimana fungsi ini harus ada

pada saat membuat program. Didalam fungsi main, terdapat :


praktikum

LL_1D

(praktikum adalah sebuah variable dari class LL_1D).


(digunakan

praktikum.addFront()

untuk

menginputkan

data

menggunakan fungsi addfront.) praktikum.printLL(); (digunakan


untuk menampilkan data yang di inputkan). cout<<"ukuran adalah
(untuk

menampilkan

statement

<<praktikum.getSize()<<endl;

ukuran

(size)

adalah).

(untuk mengambil setiap perubahan

menggunakan

praktikum.insertnode(50);

ukuran

digunakan

method

Assesor(get)

).

untuk

menginputkan

data

menggunakan fungsi insertnode() ). praktikum.hapus_semua();


(digunakan

untuk

menghapus

semua

linked

list

yang

ada).

praktikum.hapus_ekor (); (digunakan untuk menghapus tail dari


linked list yang ada).

Praktikum Algoritma dan Struktur Data

Modul 1 Linked List dan Array

E.

KESIMPULAN
Berdasarkan praktikum yang telah dilaksanakan dapat disimpulkan
bahwa :
1. Array adalah struktur data yang menampung

satu data yang sejenis

(bertipe data sama) yang diwakili oleh satu nama variabel. Array dua
dimensi menyimpan data baik dalam bentuk baris maupun dalam bentuk
kolom. Karena akan menyimpan data ke dalam baris dan kolom, maka
dibutuhkan dua buah nilai indeks. Dalam membuat matriks array dua
dimensi kita dapat menggunakan perulangan yaitu for dimana telah
diinputkan nilainya.
2.

Single Linked List hanya memiliki satu penunjuk arah yaitu next,
didalam Single Linked List langkah yang pertama yang wajib dibuat yaitu,
nama class dimana sebagai nama konstruktor yang menampung suatu
bentuk tipe data baru dalam Linked list. Dimana terdiri dari private dan
public. Dimana private berfungsi mengakses source code yang ada di
dalam kelas itu saja, dan private membuat suatu node yang didalam node
memiliki atribut berupa next, dan public berfungsi mengakses seluruh
program yang ditampung dalam struct node. Di dalam linked list terdapat
operasi yaitu penyisipan dan penghapusan.

3.

Double Linked List sedikit berbeda dengan Single Linked List,


yaitu tinggal menambahkan pointer prev dan harus diawali dengan
pembuatan struct node. Kemudian, mendeklarasikan beberapa node yang
akan digunakan sebagai head, tail, node aktif (curr) dan node sementara
(node). Sama seperti pada pembuatan Single Linked List, dalam
pembuatan Double Linked List secara umum, kode yang dibuat hampir
sama dengan pembuatan Single Linked List. Hanya bedanya, pada Double
Linked List, pointer kiri dan kanan dihubungkan dengan suatu node.
Pertama-tama, tentunya perlu diuji apakah head bernilai NULL yang
artinya belum ada satu node pun yang tercipta. Apabila demikian, maka

Praktikum Algoritma dan Struktur Data

Modul 1 Linked List dan Array

node yang dibuat akan menjadi head. Node aktif (curr) pun diset sesuai
node yang dibuat. Dan sebagai konsekuensi dari Double Linked List, maka
diatur pointer prev pada head menunjuk ke NULL. Untuk membebaskan
memori teralokasi, dilakukan dengan pemanggilan fungsi free(). Operasi
pada linked list tidak hanya pembuatan dan pencetakan. Suatu saat,
mungkin perlu untuk menghapus node yang terletak di tengah-tengah list.
Atau bahkan mungkin perlu menyelipkan node di tengah-tengah node.
4.

Operasi linked list dibagi menjadi 2 yaitu, operasi penyisipan dan


penghapusan. Dimana dalam menambahkan node kita dapat menggunakan
penyisipan dimana kita dapat menyisipkan node melalui

Insert first,

Insert after, Insert last, Insert before. Sedangkan penghapusan kita dapat
melakukan penghapuasan node dari Delete after, Delete last, Delete first,
Dimana penghapusan simpul tertentu ada dua macam, yaitu Delete K
Node, Delete Node.

Praktikum Algoritma dan Struktur Data

Modul 1 Linked List dan Array

DAFTAR PUSTAKA
[1]

Surga.2006. Algoritma Pemrograman. Yogyakarta: Informatika.

[2]

Rachmat C, Antonius.2010. Algoritma Dan Pemrograman Dengan C.


Yogyakarta:Andi.

[3]

Kristanto,Andri.2013.

Algoritma

Dan

Pemrograman

Dengan

C++.

Yogyakarta: Graha Ilmu.


[4]

A. S, Rosa.2010.Modul Pembelajaran Struktur Data. Bandung: Modula.

[5]

Slamet.I.S, Sumantri.1990. Pengantar Struktur Data. Jakarta: Elex Media


Komputindo.

[6]

Haryanto Bambang.2003. Struktur Data Membuat Pengembangan Orientasi


Obyek. Bandung: Informatika.

Praktikum Algoritma dan Struktur Data

Modul 1 Linked List dan Array

Tugas 1
1. Membuat double linked list.
2. Membuat double linked list menggunakan array.
Penyelesaian :
1. Membuat double linked list.
1.1 source code
#include <iostream>
#include <conio.h>
#include <string>
using namespace std;
class DL {
private :
struct node {
string nama;
string nim;
node * next;
node * before;
};
node *head;
node *tail;
int size;
public :
DL () {
head=NULL;
tail=NULL;
size=0;
};
void addf (string nama, string nim);
void insertbefore (string nimx, string nama, string nim);
void tampil ();
void hapus (); //hapus belakang
};
void DL ::hapus () {
node * tmp;
tmp=tail;
if (size==0) {
cout<<"Mana Ada Linked List ";
}
else {
tail=tmp->before;
tmp->before=NULL;
tail->next=NULL;
delete (tmp);
}
}

Praktikum Algoritma dan Struktur Data

Modul 1 Linked List dan Array

void DL :: insertbefore (string nimx, string nama, string nim) {


node * tmp= new node;
node * tmp1;
tmp1=head;
tmp->nama=nama;
tmp->nim=nim;
tmp->next=NULL;
tmp->before=NULL;
while (tmp1->nim!=nimx) {
tmp1=tmp1->next;
}
if (tmp1==tail || tmp1==head) {
addf (nama, nim);
}
else {
tmp->next=tmp1;
tmp1->before->next=tmp;
tmp->before=tmp1->before;
tmp1->before=tmp;
size++;
}
}
void DL :: addf (string nama, string nim) {
node * tmp= new node;
tmp->nama=nama;
tmp->nim=nim;
tmp->next=NULL;
tmp->before=NULL;
if (head==NULL && tail==NULL) {
head=tmp;
tail=tmp;
size++;
}
else {
tmp->next=head;
head->before=tmp;
head=tmp;
size++;
}
}
void DL::tampil () {
node * tmp;
tmp=head;
if (size==0) {
cout<<"kosong";
}
else {
while (tmp!=tail->next) {
cout<<"Nama : "<<tmp->nama<<endl;
cout<<"NIM : "<<tmp->nim<<endl;
tmp=tmp->next;
}
}
}
void main () {

Praktikum Algoritma dan Struktur Data

Modul 1 Linked List dan Array

DL a;
a.addf("Zanul","F1D014099");
a.addf("Biyas","F1D014019");
a.addf("arya","F1D014056");
a.addf("rival","F1D014076");
a.tampil();
cout<<endl;
cout<<endl;
cout<<"Insert Before :\n\n";
a.insertbefore("F1D014056","Ridho","F1D014052");
a.tampil();
cout<<endl;
cout<<endl;
cout<<"Hapus Belakang : \n\n";
a.hapus();
a.tampil();
getch ();
}

1.2 hasil compile

Gambar 1.4 Hasil compile double linked list.

2. Membuat double linked list menggunakan array.


2.1 source code
#include <iostream>
#include <conio.h>
using namespace std;
//ADT LL
class LL
{
private:
struct node
{
int data[3];
node*next;

Praktikum Algoritma dan Struktur Data

Modul 1 Linked List dan Array

};

public:
LL()
{

node*head;
node*tail;
int size;

head = NULL;
tail = NULL;
size = 0;

};
void Addfront(int data[]);
void insertBefore(int data[], int x[]);
void printLL();
};
//:: menandakan kepemilikan fungsi LL
void LL::Addfront(int data[])
{
//pembentukan node baru
node *tmp = new node;
//menunjuk variabel struct di atas
for (int i = 0; i < 3; i++)
{
tmp->data[i] = data[i];
}
tmp->next = NULL;
//jika LL kosong
if (head == NULL && tail == NULL)
{
head = tmp;
tail = tmp;
size++;
}
else
//jika datanya ada, ditambahkan ke depan
{
tmp->next = head;
head = tmp;
size++;
}
}
void LL::insertBefore(int data[], int x[])
{
node * tmp = new node;
for (int i = 1; i < 3; i++)
{
tmp->data[i] = data[i];
}
tmp->next = NULL;
node * tmp1 = head;
while (tmp1->data[0] != x[0])
{
tmp1 = tmp1->next;
}
if (tmp1 == tail)
{
Addfront(data);
}
else

Praktikum Algoritma dan Struktur Data

Modul 1 Linked List dan Array

{
tmp->next = tmp1->next;
tmp1->next = tmp;
size++;

}
}
void LL::printLL()
{
node*tmp;
tmp = head;
if (size == 0)
{
cout<<"Linked List kosong";
}
else
{
while (tmp != tail->next)
{
for (int i = 0; i < 3; i++)
{
cout<<"data ["<<i<<"] = "<< tmp>data[i]<<" ";
}
cout<<endl;
tmp=tmp->next;
}
}
cout<<endl<<endl;
}
void main()
{
LL z;
int a[3] = { 1, 3, 5 }, b[3] = { 2, 4, 6 }, c[3] = { 7, 8, 9 };
z.Addfront(a);
z.Addfront(b);
z.insertBefore(c,a);
z.printLL();
system("pause");
}

2.2 hasil compile

Gambar 1.5 Hasil compile double linked list menggunakan arra


Praktikum Algoritma dan Struktur Data

Modul 1 Linked List dan Array

Praktikum Algoritma dan Struktur Data

Anda mungkin juga menyukai