Anda di halaman 1dari 41

MODUL STRUKTUR DATA

Disusun Oleh :
Dhea Putri Miradikna (4611417071)
Epafraditus Memoriano (4611417070)

UNIVERSITAS NEGERI SEMARANG

SEMARANG
2018
KATA PENGANTAR

Puji syukur penyusun panjatkan ke hadirat Allah Subhanahu wata’ala, karena


berkat rahmat-Nya kami bisa menyelesaikan modul ini. Modul ini diajukan
guna memenuhi tugas mata kuliah Struktur Data yang diampu oleh Aji
Purwinarko S.Si., M.Cs.

Kami mengucapkan terima kasih kepada semua pihak yang telah membantu
sehingga modul ini dapat diselesaikan tepat pada waktunya. Modul ini masih
jauh dari sempurna, oleh karena itu, kritik dan saran yang bersifat membangun
sangat kami harapkan demi sempurnanya modul ini.

Semoga modul ini memberikan informasi bagi mahasiswa Ilmu Komputer dan
bermanfaat untuk pengembangan wawasan dan peningkatan ilmu pengetahuan
bagi kita semua.

PENULIS

ii
DAFTAR ISI

KATA PENGANTAR ...................................................................................................... ii


DAFTAR ISI ................................................................................................................. iii
BAB I PENDAHULUAN
1.1 Tujuan Pembelajaran ........................................................................................ 1
1.2 Deskripsi Modul ................................................................................................ 1
BAB II PEMBAHASAN
2.1 Konsep Algoritma dan Struktur Data ................................................................ 2
2.1.1 Definisi Algoritma............................................................................... 2
2.1.2 Hubungan Algoritma dan Struktur Data ............................................ 4
2.2 Prosedur dan Fungsi ......................................................................................... 5
2.2.1 Definisi Prosedur ................................................................................ 5
2.2.2 Kegunaan Posedur ............................................................................. 6
2.2.3 Definisi Fungsi .................................................................................... 6
2.2.4 Kegunaan Fungsi ................................................................................ 6
2.3 Variable, Konstatanta, Parameter, Rekursif ..................................................... 7
2.3.1 Variable dan Konstanta Lokal ............................................................ 7
2.3.2 Parameter Formal dan Aktual ............................................................ 7
2.3.3 Transfer Parameter ............................................................................ 8
2.3.4 Nested Prosedur ................................................................................ 8
2.3.5 Rekursif .............................................................................................. 8
2.4 Variable Pointer ............................................................................................... 10
2.4.1 Variable Pointer ................................................................................. 10
2.4.2 Array vs Pointer.................................................................................. 10
2.5 Single Linked List, LIFO, FIFO ............................................................................. 12
2.5.1 Singled Linked List .............................................................................. 12
2.5.2 Last In First Out .................................................................................. 12
2.5.3 First In First Out ................................................................................. 13

iii
2.6 Double Linked List, Circullar Double Linked List ............................................... 17
2.6.1 Teori Double Linked List ..................................................................... 17
2.6.2 Operasi pada Double Linked List........................................................ 17
2.6.3 Teori Circullar Double Linked List ...................................................... 20
2.6.4 Operasi pada Circullar Double Linked List ......................................... 20
2.7 Stack .................................................................................................................. 22
2.7.1 Pengertian Stack ................................................................................ 22
2.7.2 Jenis Stack .......................................................................................... 22
2.7.3 Stack dengan Array ............................................................................ 23
2.8 Stack dengan Linked List ................................................................................... 25
2.9 Queue ................................................................................................................ 26
2.9.1 Pengertian .......................................................................................... 26
2.9.2 Fungsi ................................................................................................. 26
2.10 Queue dengan Double Linked List .................................................................. 26
2.11 Bubble Sort dan Selection Sort ....................................................................... 27
2.11.1 Bubble atau Exchange Sort .............................................................. 27
2.11.2 Selection Sort ................................................................................... 28
2.12 Quick Sort ........................................................................................................ 30
2.13 Tree ................................................................................................................. 31
2.13.1 Pengertian ........................................................................................ 31
2.13.2 Istilah – Itilah .................................................................................... 31
2.14 Binary Search Tree dan AVL Tree .................................................................... 33
2.14.1 Binary Search Tree ........................................................................... 33
2.14.2 AVL Tree ........................................................................................... 34
BAB III PENUTUP
3.1 Kesimpulan ........................................................................................................ 36
DAFTAR PUSTAKA....................................................................................................... 37

iv
BAB I
PENDAHULUAN

1.1 Tujuan Pembelajaran


Mata kuliah Struktur Data ini memberikan pemahaman dan penguasaan kepada
mahasiswa mengenai penyusunan data pada memori komputer atau pada media
penyimpan seperti Hard Disk. Dengan penyusunan data baik, maka problem yang
kompleks, yang mempunyai operasi-operasi penting untuk memanipulasi data
(pemasukan, pencarian, pengurutan, dan penghapusan data) dapat dieksekusi dengan
sumber daya yang lebih kecil, memori lebih kecil, dan waktu eksekusi yang lebih cepat.
Mata kuliah ini meliputi analisis algoritma (big-Oh), metode-metode dalam searching
dan sorting serta berbagai macam Struktur Data seperti arrays, queue, stacks, linked lists,
binary trees, danhash tables, ataupun kombinasi diantaranya.

1.2 Deskripsi Modul


Modul ini merupakan modul pembelajaran mata kuliah Struktur Data bila digunakan
dengan tepat akan mempermudah dalam proses perkuliahan. Di dalam modul ini terdapat
materi dan praktik Struktur Data yang menggunakan bahasa pemograman Java.

1
BAB II
PEMBAHASAN

2.1 KONSEP ALGORITMA DAN STRUKTUR DATA


2.11 Definisi Algoritma
Algoritma adalah urutan langkah-langkah logis sistematis yang digunakan untuk
memecahkan suatu permasalahan.
Secara umum dapat juga diartikan sebagai sejumlah langkah komputasi yang
mengubah masukan, menjadi keluaran yang benar.

Algoritma dapat disajikan dengan dua teknik yaitu teknik tulisan dan teknik gambar.
a. Teknik tulisan biasanya menggunakan metode structure english atau bahasa
natural dan pseudocode
b. Teknik gambar biasanya menggunakan diagram (flow chart).
 Syarat Algoritma
a. Finite, algoritma harus berakhir (terminate) setelah sejumlah langkah.
b. Definite, setiap langkah algoritma harus didefinisikan dengan tepat dan tidak
menimbulkan makna ganda (ambiguous).
c. Input, setiap algoritma memerlukan data sebagai masukan untuk diolah.
d. Output, setiap algoritma memberikan satu atau beberapa hasil keluaran.
e. Effective,langkah-langkah algoritma dikerjakan dalam waktu yang wajar.
 Ciri Algoritma yang Baik
a. Algoritma memiliki logika atau metode yang tepat dalam menyelesaikan
masalah.
b. Menghasilkan output yang tepat dan benar dalam waktu yang singkat.
c. Algortima ditulis dengan format yang mudah dipahami dan mudah
diimplementasikan ke dalam bahasa pemrograman
d. Tidak menimbulkan arti ganda (ambiguous).
e. Mudah dimengerti. Siapapun yang melihat, dia akan bisa memahami
algoritma tersebut.
f. Portabilitas yang tinggi (portability). Bisa dengan mudah diimplementasikan
diberbagai platform komputer.

2
 Struktur Algoritma
1. Struktur Sekuensial (Runtunan)
Pada struktur sekuensial instruksi dikerjakan secara berurutan baris perbaris
mulai dari baris pertama hingga baris terakhir, tanpa ada loncatan atau
perulangan

2. Struktur Seleksi (Pemilihan)


Struktur seleksi adalah instruksi yang dipakai untuk memilih satu aksi dari
beberapa kemungkinan aksi berdasarkan suatu syarat.

3. Struktur Repetition (Pengulangan)


Perulangan adalah instruksi yang dapat mengulang sederetan Instruksi secara
berulang-ulang sesuai persyaratan yang ditetapkan

3
2.1.2 Hubungan Algoritma dan Struktur Data
 Pengertian
a. Cara menyimpan atau merepresentasikan data di dalam komputer agar dapat
hubungan dipakai secara efesien.
b. Cara tertentu untuk mengatur dan menyimpan data di computer sehingga
bisa diakses dan dimodifikasi secara efisien.
c. Pengaturan atau data di dalam suatu system
d. Kumpulan nilai data, hubungan antar mereka, dan fungsi atau operasi yang
bisa diterapkan pada data

 Konsep Dasar Struktur Data


1. Pemakaian struktur data yang tepat di dalam proses pemrograman akan
menghasilkan algoritma yang lebih jelas dan tepat, sehingga menjadikan
program secara keseluruhan lebih efesien dan sederhana.
2. Struktur data yang efisien : kunci untuk merancang algoritma yang efisien.
3. Beberapa metode perancangan dan bahasa pemrograman formal
menekankan struktur data, bukan algoritme, sebagai faktor pengorganisasian
kunci dalam perancangan perangkat lunak
4. Struktur data bertujuan agar cara merepresentasikan data dalam membuat
program dapat dilakukan secara efisien dalam pengolahan di memori dan
pengolahan penyimpanan dari program ke storage juga lebih mudah
dilakukan.
5. Struktur data dapat digunakan untuk mengatur penyimpanan dan
pengambilan informasi yang tersimpan di memori utama dan memori
sekunder

4
i. Numerik, terdiri dari :
a. Numerik integer (bilangan bulat)
b. Numerik real (bilangan riil)
ii. Karakter, terdiri dari :
a. Alfabet : a .. z, A .. Z
b. Angka : 0 .. 9
c. Simbol khusus : + ? ‘ ! [ ] { } … dll
iii. Boolean (logika), terdiri dari :
a. True
b. False

2.2 Prosedur dan Fungsi


2.2.1 Definisi Prosedur
Prosedur adalah suatu program terpisah dalam blok sendiri yang berfungsi sebagai
subprogram (program bagian). Prosedur biasanya bersifat suatu aktifitas seperti
meghitung faktorial sebuah bilangan, mencari bilangan genap dari sekumpulan
bilangan ,dsb. Prosedur banyak digunakan pada program yang terstruktur karena:
a) Merupakan penerapan konsep program modular, yaitu memecah-mecah
program yang rumit menjadi program-program bagian yang lebih sederhana
dalam bentuk prosedur-prosedur.
b) Untuk hal-hal yang sering dilakukan berulang-ulang, cukup dituliskan sekali
saja dalam prosedur dan dapat dipanggil atau dipergunakan sewaktu-waktu
bila diperlukan.
c) Membuat kode program lebih mudah dibaca.
d) Dapat digunakan untuk menyembunyikan detil program

 Penggunaan Prosedur pada Java


a) Struktur dasar prosedur static TypeDataKembalian namaFungsi(){
// statemen atau kode fungsi
}
b) Kata kunci static, artinya kita membuat fungsi yang dapat dipanggil tanpa
harus membuat instansiasi objek.
c) TypeDataKembalian adalah tipe data dari nilai yang dikembalikan setelah
fungsi dieksekusi.
d) namaFungsi() adalah nama fungsinya. Biasanya ditulis dengan huruf kecil di
awalnya. Lalu, kalau terdapat lebih dari satu suku kata, huruf awal di kata
kedua ditulis kapital.
e) Contoh Prosedur
public void tampilAngka(){
System.out.println("Angka = 10");
}

5
2.2.3 Definisi Fungsi
Fungsi sama seperti halnya dengan prosedur, namun tetap ada perbedaannya yaitu
fungsi mempunyai output dengan tipe variabel yang kita tentukan. Berbeda dengan
procedure yang bisa tidak menggunakan parameter, fungsi harus menggunakan
parameter dalam penggunaannya.
 Contoh Fungsi
a) Pada contoh tersebut, kita membuat sebuah parameter bernama sisi.
Kemudian fungsi akan mengembalikan nilai dengan tipe int (integer) dari
variabel luas.
b) Pengembalian nilai pada fungsi menggunakan kata kunci return

static int luasPersegi(int sisi){


int luas = sisi * sisi;
return luas;
}

 Perbedaan Fungsi dan Prosedur


a) Nama Prosedur tidak dapat digunakan langsung tidak seperti pada Nama
Fungsi, yang dapat langsung digunakan dari sebuah prosedur adalah
parameternya yang mengandung nilai balik.
b) Pada dasarnya tidak ada perbedaan yang signifikan antara prosedur dan
fungsi, hanya dibedakan dari return value. Jika suatu sub program
tersebut memiliki nilai balik (return value) maka sub program tersebut
disebut Function (Fungsi) jika tidak memiliki nilai balik maka sub program
tersebut merupakan prosedure (Procedure).
c) Pada fungsi, nilai yang dikirimkan balik terdapat pada nama fungsinya
(kalau pada prosedur pada parameter yang dikirimkan secara acuan).
d) Karena nilai balik berada di nama fungsi tersebut, maka fungsi tersebut
dapat langsung digunakan untuk dicetak hasilnya. Atau nilai fungsi
tersebut dapat juga langsung dipindahkan ke pengenal variable yang
lainnya.

6
2.3 VARIABLE, KONSTANTA, PARAMETER REKURSIF

2.31 Variable dan Konstatnta lokal


 Variable adalah tempat di memori yang digunakan untuk menyimpan
informasi atau data dari sebuah program untuk selanjutnya dapat diproses.
 Variabel adalah tempat menyimpan nilai sementara.

 Tipe Data
Berikut ini macam-macam tipe data pada Java:
 char: Tipe data karakter, contoh Z
 int: angka atau bilangan bulat, contoh 29
 float: bilangan desimal, contoh 2.1
 double: bilangan desimal juga, tapi lebih besar kapasistanya, contoh 2.1
 String: kumpulan dari karakter yang membentuk teks, contoh Hello
World!
 boolean: tipe data yang hanya bernilai true dan false

 Format Variabel
i. Format penulisan variabel pada java
<tipe data> namaVariabel;
ii. Contoh variabel dan tipe data
int sisiPersegi = 9;

 Cara Penulisan Variabel


i.Nama variabel tidak boleh menggunakan kata kunci dari Java (reserved
word) seperti if, for, switch, dll. (nama yang sudah di pesan oleh java)
ii.Nama variabel harus diawali dengan huruf kecil, karena Java menggunakan
gaya CamelCase.
iii.Apabila nama variabel lebih dari 1 suku kata, maka kata ke-2 dituliskan
dengan diawali dengan huruf besar dan seterusnya, contoh namaVariabel.

 Ciri Variabel Lokal


a. Variabel lokal dideklarasikan didalam method, konstruktor atau blok.
b. Variabel lokal dibuat saat method, kontruktor atau blok mulai dijalankan
dan akan dihapus saat selesai dijakankan.
c. Variable lokal tidak dapat menggunakan Modifier seperti public,
protected, private, dll.
d. Variabel lokal hanya dapat digunakan didalam method, konstruktor, atau
blok tempat pendeklarasiannya.
e. Tidak ada nilai default untuk variabel lokal sehingga variabel lokal harus
dideklarasikan dan diinisialisasikan sebelum digunakan.

7
 Contoh
public class VariableLokal {
//Membuat sebuah method yang bernama game
//didalam class VariableLokal
public void game(){
String GameFavorit = “Minecraft ";
int seri = 12;
System.out.println(GameFavorit + seri);
}

public static void main(String[] args){


//Membuat sebuah Objek dari class variableLokal
//dan memanggil method game pada method main
VariableLokal latihan = new VariableLokal();
latihan.game();
}
}

 Pegertian Konstanta
Konstanta adalah adalah sebuah variabel yang nilainya tetap dan tidak bisa
dirubah lagi. Konstanta digunakan untuk menyimpan data yang tidak akan
kita ubah
Dalam bahasa Java, pendeklarasian konstanta dituliskan dengan keyword
(final) didepan tipe variabel. Sekali konstanta diberi nilai, maka nilai tersebut
tidak dapat diubah.

2.3.2 Parameter Formal dan Aktual

1. Parameter formal adalah parameter yang tertulis dalam definisi method


2. Parameter aktual adalah parameter yang berada pada inputan langsung
pada saat penggunaan method tersebut.

2.3.5 Rekursif
 Pengertian
Rekrusif adalah sebuah method di dalamnya memanggil method dirinya
sendiri, melakukan proses berulang-ulang. Program ini akan berhenti jika
syaratnya sudah di penuhi
final int Int =10;
final char dataChar = ‘\u103’; final float x = 12.67; final byte y = 2;

8
 Contoh
public class Main {
public static void main(String[] args) {
cetakAngka(1);
}
static void cetakAngka(int angka) {
if (angka <= 10) {
System.out.print(angka + " ");
cetakAngka(++angka);
}
}
}

9
2.4 VARIABLE POINTER

2.4.1 Variable Pointer


 Pengertian
Variabel pointer adalah variable yang menunjuk ke objek lain. Variabel ini
berisi alamat dari suatu objek lain

2.4.2 Array vs Pointer


 Pengertian
i. Sebuah array akan menyimpan beberapa item data yang memiliki tipe data
sama didalam sebuah blok memori yang berdekatan yang kemudian
dibagai menjadi beberapa ruang. Array adalah sebuah variabel/sebuah
lokasi tertentu yang memiliki satu nama sebagai identifier, namun
identifier ini dapat menyimpan lebih dari sebuah nilai
ii. Array harus dideklarasikan seperti layaknya sebuah variabel. Pada saat
mendeklarasikan array, anda harus membuat sebuah daftar dari tipe data,
yang diikuti oleh sepasang tanda kurung [], lalu diikuti oleh nama
identifier-nya atau dapat ditempatkan sepasangtandakurung [] sesudah
nama identifier. Sebagai contoh :
// cara pertama
String[] nama;
// cara kedua
String nama[];
// cara ketiga dengan kata kunci new
String[] nama = new String[5];

 Contoh
package pertemuan1;
public class Array {
public static void main(String[] args){
String[] teman = {"Daffa", "Hilmi", "Yayan", "Ghifari",
"Zakki", "Bima"};
for(int i=0; i<teman.length; i++){
System.out.println("Nama ke-"+i+" :
"+teman[i]);
}
}
}

10
 Array Multi Dimensi
a. Array multi dimensi artinya array yang memiliki lebih dari satu dimensi. Atau
kita bisa sebut, array di dalam array.
b. Jumlah dimensinya tidak terbatas, tergantung kita mampunya sampai
berapa

 Keuntungan dan Kerugian


a. Keuntungan
i. Sebuah elemen tertentu dalam kelompok besar elemen dapat diakses
dengan mudah dengan nama array dan indeks elemen
ii. Array berguna ketika menjalankan perhitungan dalam satu lingkaran

b. Kerugian
i. Batas Ukuran : kita dapat menyimpan hanya ukuran tetap elemen
dalam array. Ukuran ini tidak tumbuh ukurannya saat runtime.

11
2.5 SINGLE LINKED LIST, LIFO DAN FIFO
2..5.1 Single Linked List
 Pengertian
 Sekumpulan elemen bertipe sama, yang mempunyai keterurutan tertentu,
yang setiap elemennya terdiri dari dua bagian
 Struktur berupa rangkaian elemen saling berkait dimana setiap elemen
dihubungkan elemen lain melalui pointer. Pointer adalah alamat elemen.
Penggunaan pointer untuk mengacu elemen berakibat elemen-elemen
bersebelahan secara logik walau tidak bersebelahan secara fisik di memori.
Link list adalah desain tempat penyimpanan data yang terdiri dari node-
node (simpul-simpul) yangsaling terhubung.
Link list dapat diilustrasikan seperti kereta api, dimana kereta api terdiri dari
gerbong-gerbong yang saling terhubung yang dapat mengangkut penumpang.
Gerbong disini setara dengan node dalam link list yang berfungsi untuk
menyimpan data.

Single Linked List :


 Setiap node pada linked list mempunyai field yang berisi pointer ke node
berikutnya dan juga memiliki field yang berisi data.
 Akhir linked list ditandai dengan node terakhir akan menunjuk ke null yang
akan digunakan sebagai kondisi berhenti saat pembacaan linked list.

2.5.2 LIFO (Last In First Out)


 Pengertian
LIFO adalah suatu metoda pembuatan Linked List dimana data yang
masuk paling akhir
adalah data yang keluar paling awal. Hal ini dapat dianalogikan den
gan menumpukan barang pada kehidupan sehari-
hari. Pembuatan simpul pada suatu linked list disebut
dengan istilah INSERT. Jika linked list dibuat dengan Metoda LIFO
maka
penambahan/insert simpul dilakukan di BELAKANG.
Procedure Insert
Istilah INSERT berarti menambahkan sebuah simpul baru ke dalam suatu
linked
list. Berikut adalah deklarasi tipe data dan variabel yang dapat digunaka
sebagai deklarasi awal dan penggalan procedure insert.

12
Type
Point = ^RecPoint;
RecPoint = Record
Isi : TipeData;
Next : Point;
End;
Var
Head, Tail, Now : Point;

Type
Point = ^RecPoint;
RecPoint = Record
Isi : TipeData;
Next : Point;
End;
Var
Head, Tail, Now : Point;

2.5.3 FIFO (First In First Out)


 Pengertian
FIFO adalah suatu metoda pembuatan Linked List dimana data yang
masuk paling awal adalah data yang keluar paling awal juga. Jika linked
list dibuat dengan menggunakan FIFO, maka terjadi penambahan/Insert
simpul di depan.

Procedure INSERT(elemen:TipeData);

Var Now : Point;


Begin
New(Now);
If Head = Nil Then
Head := Now;
Else
Tail^.Next := now;
Tail := Now;
Tail^.Next := Nil;
Now^.Isi := Elemen;
End;

13
Procedure dan function Linked List lainnya

Selain procedure insert diatas, pada linked list juga masih terdapat p
rocedure
serta function lainnya. Dibawah ini diberikan procedureprocedure serta f
unction umum dalam linked list.

1. Create
Membuat sebuah linked list yang baru dan masih kosong.
Procedure ini wajib dipanggil untuk menggunakan linked list.

Procedure Create;
Begin
Head := Nil;
Tail := Nil;
End;

2. Empty
Function untuk menentukan apakah linked list kosong atau tidak.

Function Empty : Boolean;


Begin
If head = nil then
Empty := true
else
Empty := false;
End;

3. Find First
Mencari elemen pertama dari linked list

Procedure Find_First;
Begin
Now := Head;
End;

14
4. Find Next
Mencari elemen sesudah elemen yang ditunjuk Now
Procedure Find_Next;
Begin
If Now^.Next <> Nil th
en
Now := Now^.next;
End;

5. Retrieve
Mengambil elemen yang ditunjuk oleh now. Elemen tersebut lalu
ditampug pada suatu variabel, dalam potongan procedure ini ditampung
dalam variabel r.

Procedure Retrieve(var r :
TipeData);
Begin
R := Now^.Isi;
End;

6. Update
Mengubah elemen yang ditunjuk oleh now dengan isi dari suatu variabel
(dala contoh ini digunakan variabel u).

Procedure UpDate(u :TipeDa


ta);
Begin
Now^.Isi := U;
End;

7. Delete Now
Menghapus elemen yang ditunjuk oleh now. Jika yang dihapus adalah
elemenyang pertama dari linked list (head), maka head akan berpindah
ke elemen berikutnya.
Procedure DeleteNow;
Var x : point;
Begin
If Now <> Head then
Begin
X := head;
While x^.next <> now do
X := x^.next;
X^.next := now^.next;
End
Else head := head^.nex
t;
Dispose(now);
Now := head;
End;
15
8. Delete Head
Menghapus elemen yang ditunjuk oleh head. Head akan berpindah ke
elemen sesudahnya.

Procedure DeleteHead;
Begin
If head <> nil then
Begin
Now := Head;
Head := Head^.Next;
Dispose(Now);
Now := Head;
End;
End;

9. Clear
Untuk menghapus linked list yang sudah ada. Wajib dilakukan bila ingin
mengakhiri program yang menggunakan linked list. Jika tidak ada
data-data
yang dialokasikan ke memory pada program sebelumnya akan tetap
tertinggal di dalam memory.

Procedure Clear;
Begin
While head <> nil do
Begin
Now := head;
Head := head^.next;
Dispose(now);
End;
End;

16
2.6 DOUBLE LINKED LIST DAN CIRCULLAR DOUBLE LINKED LIST
2.6.1 Teori Double Linked List

o Linked list dengan menggunakan pointer, dimana setiap node memiliki 3


field, yaitu: 1 field pointer yang menunjuk ke pointer berikutnya, 1 field
pointer yang menunjuk ke pointer sebelumnya dan field yang berisi data
dari node tersebut.
o Pointer next dan prev-nya menunjuk ke null.

2.6.2 Operasi pada Double Linked List


1. Insert
i. Insert After
Procedure Insert After berguna untuk menambah simpul dibelakang
(sebelah kanan) pada sebuah double linked list.

Procedure InsertAfter(e:Elemen_Type);
Var Now : Point;
Begin
New(now);
Now^.Isi := e;
If Head=Nil then
Begin
Head := Now;
Tail := Now;
Now^.Next := Nil;
Now^.Prev := Nil;
End
Else
Begin
Tail^.next := now;
Now^.Prev := Tail;
Tail := Now;
Tail^.Next := Nil;
End;
End;

17
ii. Insert Before
Procedure Insert Before berguna untuk menambahkan simpul
di depan (sebelah kiri).

Procedure InsertBefore(e:Elemen_Type);

Var Now : Point;


Begin
New(now);
Now^.Isi := e;
If Head=Nil then
Begin
Head := Now;
Now^.Next := Nil;
Now^.Prev := Nil;
End
Else
Begin
Head^.prev := now;
Now^.next := head;
Head := Now;
Head^.Prev := Nil;
End;
End;

2. Delete
i. Delete After
Procedure Delete After berguna untuk menghapus simpul dari
belakang.

Procedure DeleteAfter;
Var Now : Point;
Begin
Now := Tail;
If Now <> Head then
Begin
Tail := Now^.Prev;
Tail^.Next := Nil;
End
Else
Begin
Tail := Nil;
Head := Nil;
End;
If Now <> Nil then
Dispose(now);
End;

18
ii. Delete Before
Procedure Delete Before merupakan kebalikan dari procedure
Delete After yang akan menghapus simpul dari depan (sebelah kiri).

Procedure DeleteBefore;
Var Now : Point;
Begin
Now := Head;
If Now <> Head then
Begin
Head := Now^.Next;
Head^.Prev := Nil;
End
Else
Begin
Tail := Nil;
Head := Nil;
End;
If Now <> Nil then
Dispose(now);
End;

iii. Deleteat Position


Procedure at Position, sesuai dengan namanya, berguna untuk
menghapus simpul pada posisi yang diinginkan.Untuk melakukannya
diperlukan bantuan 2 variabel pointer yang pada modul ini diberi
nama Bantu 1dan Bantu2. Nama tersebut boleh diganti.

Procedure DeleteAtPos;
Var Bantu1, Bantu2 : Point;
Begin
Bantu1 := Now^.Prev;
Bantu2 := Now^.Next;

If Bantu1 <> Nil then


Bantu1^.Next := Bantu2;
Else
Head := Bantu2;
If Bantu2 <> Nil Then
Bantu2^.Prev := Bantu1;
Else
Tail := Bantu1;
If Now <> Nil Then
Dispose(Now);
End;

19
2.6.3 Teori Cilcullar Double Linked List
 Merupakan double linkedmlistmyang simpul terakhirnya menunjuk ke
simpul awaldansimpul awalnya menunjuk ke simpul akhir sehingga mem
bentuk suatu lingkaran.
 Link list tidak mempunyai indeks seperti array. Kita hanya bisa memberi
nama node. Akan tetapi, tidak semua node dalam link list mempunyai nama.

2.6.4 Operasi Circullar Double Linked List


1. Insert
i. Insert After
Procedure Insert After berguna untuk menambah simpul di bel
akang (sebelah kanan) pada sebuah double linked list.

Procedure InsertAfter(e:Elemen_Type);
Var Now : Point;
Begin
New(now);
If Head=Nil then
Begin
Head := Now;
else
Now^.Prev := Tail;
Tail^.Next := Now;
End;
Now^.Isi := e;
Tail := Now;
Tail^.next := Head;
Head^.Prev := Tail;
End;

ii. Insert Before


Procedure Insert Before berguna untuk menambahkan simpul
di depan (sebelah kiri).

Procedure InsertBefore(e:Elemen_Type);

Begin
If Head=Nil then
Begin
Head := Now;
Tail := Now;
End else
Begin
Now^.Prev :=Head;
Head^.Next := Now;
End;
Now^.Isi := e;
Now^.Next := Tail;
Tail^.Prev := Now;
Tail := Now;
End;

20
2. Delete
i. Delete After
Procedure Delete After bergunauntuk menghapus simpul dari
belakang.

Procedure DeleteAfter;
Var Now : Point;
Begin
Now := Tail;
If Head=Nil then
Begin
Tail := Nil;
Head := Nil;
End else
Begin
Tail := Now^.Prev;
Tail^.Next := Head;
Head^.Prev := Tail;
End;
If Now <> nil then Dispose(Now);
End;

ii. Delete Before


Delete Before akan menghapus simpul dari depan(sebelah kiri)

Procedure DeleteBefore;
Var Now : Point;
Begin
Now := Tail;
If Head=Tail then
Begin
Tail := Nil;
Head := Nil;
End else
Begin
Head := Now^.Next;
Head^.Prev := Tail;
Tail^.Next := Head;
End;
If Now <> nil then Dispose(Now);
End;

3. Update
Procedure update berguna untuk mengganti isi suatu simpul dengan data ya
ng lain. Procedure update ini memanfaatkan suatu procedure cari untuk
mencari posisi simpul yang akan diganti isinya tersebut
Procedure Update(x,y : elemen_Type);
Begin
Cari(x);
Now^.isi := y;
End;

21
2.7 STACK

2.7.1 Pengertian
 Stack adalah sekumpulan data dimana pengisian atau penambahan data
dan penghapusan atau pengambilan data dilakukan di salah satu
ujung/top.
 Jika kamu perhatikan ketika kita menyimpan buku ke dalam kotak dan
pengambilan buku dalam konsep stack ini. Sehingga dapat di sebutkan
bahwa konsep stack tersebut LIFO (Last In First Out) yakni yang terakhir
kali disimpan pada tumpukan adalah yang pertama di ambil karena
berada pada urutan teratas dari tumpukan.

2.7.2 Jenis – Jenis Stack


a. push(), berfungsi untuk memasukkan data.

public void push(String value)


{
stack[++top] = value;
}

b. pop(), berfungsi untuk mengeluarkan data terakhir (atas).

public String pop() {


return stack[top — ];
}

c. peek(), berfungsi untuk melihat data yang berada pada tumpukan paling
atas (akan dikeluarkan).

public String peek() {


return stack[top];
}

d. clear, berfungsi untuk mengosongkan Stack


e. create, berfungsi untuk membuat tumpukan baru stack, dengan jumlah
elemen kosong.
f. MakeNull, berfungsi untuk mengosongkan tumpukan stack,jika ada
elemen maka semua elemen dihapus

22
g. isEmpty(), berfungsi untuk menguji apakah stack masih kosong.

public boolean isEmpty() {


return top == -1;
}

h. isFull(), berfungsi untuk menguji apakah stack telah penuh.

public boolean isFull() {


return top == max-1;
}

2.7.3 Stack dengan Array

a.

private String[] stack;


private int max;
private int top;

Kode diatas merupakan bagian dari pendeklarasian array dan


variabel. Arrayakan digunakan sebagai stack, variabel max sebagai batas
kapasitas array dan variabel top sebagai pointer data yang paling akhir.

b.

public Stack(int size) {


max = size;
stack = new String[max];
top = -1;
}

Selanjutnya, kode diatas merupakan sebuah konstruktor yang digunakan


untuk menginisialisasi variabel dan menjadi metode yang pertama
dijalankan ketika dilakukan instance object. Pemberian nilai -1 pada
variabel top adalah indikator bahwa array masih kosong. Seperti yang
diketahui bahwa arraymulai menyimpan data pertama pada indeks ke-nol.

23
c.

public void push(String value)


{
stack[++top] = value;
}

Lalu kode diatas menjelaskan mengenai proses memasukkan data ke


dalam array dengan indeks increment dari nilai variabel top. Apabila
sebelumnya nilai dari top adalah -1, maka (-1) + 1 = 0. Data pertama akan
disimpan pada indeks ke-0 dan seterusnya.

d.

public String pop() {


return stack[top — ];
}

Kode diatas digunakan mengeluarkan data dari urutan paling akhir dan
melakukan decrement nilai dari variabel top. Nilai data yang dikeluarkan
juga di-return dalam metode pop.

e.

public String peek() {


return stack[top];
}

Selanjutnya, kode diatas untuk mengembalikan data yang berada pada


indeks yang sama dengan nilai variabel top, dalam artian data yang paling
belakang. Program akan error apabila array masih kosong karena
dilakukan pengecekan terhadap indeks -1. Teman-teman boleh
melengkapi kode di atas untuk memberikan exception.

24
f.

public boolean isEmpty() {


return top == -1;
}

Selanjutnya untuk mengecek apakah array kosong atau tidak.


Mengembalikan nilai benar atau salah dari hasil pengujian top dengan nilai
-1. Jika sama, maka nilainya true

g. .

public boolean isFull() {


return top == max-1;
}

Jika pengujian benar, maka mengembalikan nilai true dan menyatakan


bahwa array telah penuh.

2.8 STACK DENGAN LINKED LIST

 Contoh Program

public class LinkListStack {

LinkList li = new LinkList();

public void push(int data) {


li.insertFirst(data);
}

public void pop() {


while(!li.isEmpty()){
li.deleteFirst();
}
}

public void displayStack() {


System.out.println(" ");
li.displayList();
}
}

25
2.9 QUEUE

2.91 Pengertian
Queue adalah suatu bentuk khusus dari linear list, dengan operasi penyisipan
(insertion) hanya diperbolehkan pada salah satu sisi, yang disebut sisi
belakang (REAR), dan operasi penghapusan (deletion) hanya diperbolehkan
pada sisi lainnya, yang disebut sisi depan (FRONT), dari list

2.92 Fungsi
 Fungsi init : digunakan untuk membuat queue baru atau kosong, yaitu
dengan memberi nilai awal (head) dan nilai akhir (tail) dengan -1.
 Fungsi full: digunakan untuk mengetahui apakah queue sudah penuh
atau belum. Dilakukan dengan memeriksa nilai akhir (tail) apakah
sudah sama dengan maksimal queue.
 Fungsi empty: digunakan untuk mengetahui apakah queue masih
kosong atau tidak. Dilakukan dengan memeriksa nilai akhir (tail)
bernilai -1 atau tidak.
 Fungsi enqueue : digunakan untuk menambahkan elemen ke dalam
queue.
 Fungsi dequeue : digunakan untuk mengambil elemen dari queue,
dengan cara memindahkan semua elemen satu langkah ke posisi
depannya sehingga elemen yang paling depan tertimpa.
 Fungsi clear : digunakan untuk menghapus semua elemen dalam
queue. Ada dua cara yang bisa digunakan, yaitu menuliskan fungsi
seperti inisialisasi atau memanggil fungsi remove sampai queue kosong

2.10 QUEUE DENGAN DOUBLE LINKED LIST

 Contoh Program
Class JavaLinkListTest{
public static void main(String[] args) {
LinkedList llist = new
LinkedList();
llist.add("A");
llist.addFirst("B");
llist.addFirst("C");
llist.addFirst("D");
llist.addFirst("E");
llist.addFirst("F");
llist.addFirst("G");
llist.addLast("I");
llist.add(3, "X");
llist.remove(0);
for(Object stackList : llist){ System.out.print(stackList+"-
>");
}

26
2.11 BUBBLE SORT DAN SELECTION SORT

2.11.1 Bubble Sort


 Pengertian
Bubble Sort merupakan salah satu metode sorting yang hanya
melakukan pemindahan value dari kiri ke kanan untuk Ascending dan
dari kanan ke kiri untuk Descending.

 Syarat Metode Bubble Sort


 Jumlah iterasi sama dengan banyaknya bilangan dikurang 1.
 Setiap iterasi, jumlah pertukaran bilangannya sama dengan
banyaknya bilangan.
 Dalam Bubble Sort, walaupun deretan bilangan tersebut sudah ter-
sorting maka, proses sorting akan tetap dilakukan.
 Tidak ada perbedaan cara untuk Bubble Sort Ascending dan
Descending.

 Contoh Program
import java.util.Arrays;
public class BubbleSortAsc {
public static void main(String[] args) {
int[] bilangan = {5, 12, 3, 19, 1, 47};
System.out.println("Bilangan sebelum di sorting
Bubble Sort : "+Arrays.toString(bilangan));
System.out.println("\nProses Bubble Sort secara
Ascending:");
for(int a = 0; a < bilangan.length; a++) {
System.out.println("Iterasi "+(a+1));
for(int b = 0; b < bilangan.length-1; b++) {
if(bilangan[b] > bilangan[b+1]) {
int temp = bilangan[b];
bilangan[b] = bilangan[b+1];
bilangan[b+1] = temp;
}
System.out.println(Arrays.toString(bilangan));
}
System.out.println();
}

27
System.out.println("Hasil akhir setelah di sorting:
"+Arrays.toString(bilangan));
}
}
2.11.2 Selection Sort
 Pengertian
Selection Sort merupakan salah satu metode pengurutan yang mencari
nilai yang paling kecil(Jika Ascending) atau nilai yang paling besar(Jika
Descending) di urutan Data berikutnya. Dibanding Bubble Sort, Selection
Sort jelas lebih baik dari segi kecepatan proses pengurutannya.

 Cara Kerja Selection Sort


 Tetapkan suatu indeks yang akan dijadikan awal dari sorting,
biasanya indeks pada awal array.
 Jika akan dilakukan sorting secara ascending maka cari elemen yang
paling kecil dengan membandingkan dengan nilai indeks yang
dijadikan patokan. Lakukan hal yang sebaliknya jika akan melakukan
sorting secara descending.
 Jika ada nilai yang memenuhi dari langkah b maka lakukan
pertukaran indeks yang dijadikan patokan.
 Hasil akhir dari langkah c adalah didapat nilai indeks yang
terkecil(jika ascending) kemudian tukarkan nilai indeks tersebut
dengan nilai indeks yang paling ujung dari elemen yang belum
terurut.
 Lakukan langkah-langkah di atas hingga didapatkan elemen array
yang telah terurut.

 Contoh Program
public class SelectionSort {
public static void selectionSort (int [] myList){
for (int i = 0; i < myList.length - 1; i++){
int nilaiMinimum = myList[i];
int indexNilaiMinimum = i;
for(int j = i + 1; j < myList.length; j++){
if(nilaiMinimum > myList[j]){
nilaiMinimum = myList[j];
indexNilaiMinimum = j;
}
}
if(indexNilaiMinimum != i){
myList[indexNilaiMinimum] = myList [i];
myList[i] = nilaiMinimum;
}
}
}

28
public static void main(String args []){
int myArray [] = {22, 34, 18, 10, 42, 56, 68, 29,
77, 56};
SelectionSort.selectionSort(myArray);
for (int i = 0; i < myArray.length; i++){
System.out.print(myArray[i] + " ");
}
}
}

29
2.12 QUICK SORT

2.12.1 Pengertian
Quicksort mengurutkan data dengan pendekatan divide-and-conquer,yaitu
membagi masalah semula menjadi beberapa submasalah sejenis yang lebih
kecil dan menyelesaikannya. Quicksort melakukan pengurutan dalam
putaran secara rekrusif. Pengulangan secara rekursi dilakukan jika jumlah
data yang akan diurutkan lebih dari satu buah.

2.12.2 Proses
 Devide
Memilah rangkaian data menjadi dua sub-rangkaian A[p…q-1] dan
A[q+1…r] dimana setiap elemen A[p…q-1] adalah kurang dari atau
sama dengan A[q] dan setiap elemen pada A[q+1…r] adalah lebih
besar atau sama dengan elemen pada A[q]. A[q] disebut sebagai
elemen pivot. Perhitungan pada elemen q merupakan salah satu
bagian dari prosedur pemisahan.
 Conquer
Mengurutkan elemen pada sub-rangkaian secara rekursif. Pada
algoritma quicksort, langkah ”kombinasi” tidak di lakukan karena
telah terjadi pengurutan elemen – elemen pada sub-array

2.12.3 Fungsi

static void quickSort (int a[], int lo, int hi){


// lo adalah index bawah, hi adalah index atas
// dari bagian array yang akan di urutkan
int i=lo, j=hi, h;
int pivot=a[lo];

// pembagian
do{
while (a[i]<pivot) i++;
while (a[j]>pivot) j--;
if (i<=j)
{
h=a[i]; a[i]=a[j]; a[j]=h;//tukar
i++; j--;
}
} while (i<=j);

// pengurutan
if (lo<j) quickSort(a, lo, j);
if (i<hi) quickSort(a, i, hi);
}

30
2.13 TREE

2.13.1 Pengertian
Kumpulan elemen yang salah satu elemennya disebut dengan root (akar)
dan sisa elemen yang lain disebut sebagai simpul (node/vertex) yang
terpecah menjadi sejumlah himpunan yang tidak saling berhubungan satu
sama lain, yang disebut subtree/cabang

2.13.2 Istilah – Istilah

 Prodecessor : node yang berada diatas node tertentu.


 Successor : node yang berada di bawah node tertentu.
 Ancestor : seluruh node yang terletak sebelum node tertentu dan
terletak pada jalur yang sama.
Contoh : node B adalah ancestor dari node E
 Descendant : seluruh node yang terletak sesudah node tertentu
dan terletak pada jalur yang sama.
Contoh : node E adalah descendant dari node A.
 Parent : predecssor satu level di atas suatu node.
 Child : successor satu level di bawah suatu node.
 Sibling : node-node yang memiliki parent yang sama dengan suatu
node.
Contoh : node D adalah sibling dari node A
 Subtree : bagian dari tree yang berupa suatu node beserta
descendantnya dan memiliki semua karakteristik dari tree
tersebut.
Contoh : tree C adalah right subtree dari A dan tree B merupakan
left subtree dari A
node G dan F merupakan child dari node C
node F merupakan parent dari node J dan K
 Size : banyaknya node dalam suatu tree.
 Height : banyaknya tingkatan/level dalam suatu tree.
Contoh : height dari tree A adalah 3 + 1 = 4
 Root : satu-satunya node khusus dalam tree yang tak punya
predecssor.
Contoh : node A adalah root

31
 Leaf : node-node dalam tree yang tak memiliki seccessor.
Contoh : node D, H, I, J, K, dan G adalah leaf
 Degree : banyaknya child yang dimiliki suatu node
Contoh : node E memiliki in degree 1 dan out degree 2

32
2.14 BINARY SEARCH TREE DAN AVL TREE

2.14.1 Binary Search


 Pengertian
Binary tree merupakan tree di mana tidak ada node pada tree tersebut
yang memiliki lebih dari 2 subtree atau setiap simpul paling banyak
mempunyai 2 anak yang terdiri dari left subtree atau right subtree

 Kelebihan
 Mudah dalam penyusunan algoritma sorting
 Searching data relatif cepat
 Fleksibel dalam penambahan dan penghapusan data
 Operasi – Operasi
 Create : Membentuk binary tree baru yang masih kosong.
 Clear : Mengosongkan binary tree yang sudah ada.
 Empty : Function untuk memeriksa apakah binary tree masih
kosong.
 Insert : Memasukkan sebuah node ke dalam tree. Ada tiga pilihan
insert: sebagai root, left child, atau right child. Khusus insert
sebagai root, tree harus dalam keadaan kosong.
 Find : Mencari root, parent, left child, atau right child dari suatu
node. (Tree tak boleh kosong)
 Update : Mengubah isi dari node yang ditunjuk oleh pointer
current. (Tree tidak boleh kosong)
 Retrieve : Mengetahui isi dari node yang ditunjuk pointer current.
(Tree tidak boleh kosong)
 DeleteSub : Menghapus sebuah subtree (node beserta seluruh
descendantnya) yang ditunjuk current. Tree tak boleh kosong.
Setelah itu pointer current akan berpindah ke parent dari node
yang dihapus.
 Characteristic : Mengetahui karakteristik dari suatu tree, yakni :
size, height, serta average lengthnya. Tree tidak boleh kosong.
(Average Length =
[jumlahNodeLvl1*1+jmlNodeLvl2*2+…+jmlNodeLvln*n]/Size)

33
 Traverse : Mengunjungi seluruh node-node pada tree, masing-
masing sekali. Hasilnya adalah urutan informasi secara linier
yang tersimpan dalam tree. Ada tiga cara traverse : Pre Order, In
Order, dan Post Order.

2.14.2 AVL Tree


 Pengertian
AVL Tree adalah Binary Search Tree yang memiliki perbedaan tinggi/
level maksimal 1 antara subtree kiri dan subtree kanan. AVL Tree muncul
untuk menyeimbangkan Binary Search Tree. Dengan AVL Tree, waktu
pencarian dan bentuk tree dapat dipersingkat dan disederhanakan.

 Ada 4 kasus yang biasanya terjadi saat operasi insert dilakukan, yaitu :
anggap T adalah node yang harus diseimbangkan kembali
1. Kasus 1 : node terdalam terletak pada subtree kiri dari anak kiri T
(left-left)

2. Kasus 2 : node terdalam terletak pada subtree kanan dari anak


kanan T (right-right)

3. Kasus 3 : node terdalam terletak pada subtree kanan dari anak kiri
T (right-left)

4. Kasus 4 : node terdalam terletak pada subtree kiri dari anak kanan
T (left-right)

Ke-4 kasus tersebut dapat diselesaikan dengan melakukan rotasi

 Kasus 1 dan 2 dengan single rotation

 Kasus 3 dan 4 dengan double rotation

34
Contoh – Single Rotation: Jika suatu Tree diinsert node baru
dengan nilai 12, maka akan terjadi ketidak seimbangan dan hal ini
terletak pada posisi root

Contoh – Double Rotation : Jika terdapat sebuah tree yang kemudian


dilakukan insert node 26. Maka akan terjadi ketidak seimbangan,
sehingga terlihat dari bentuknya dapat diselesaikan dengan kasus 4.

35
BAB III
PENUTUP

3.1 KESIMPULAN

Modul ini merupakan suatu alat atau sarana pembelajaran yang di dalamnya berupa
materi yang di buat secara sistematis dan terstruktur sebagai upaya untuk mencapai
tujuan kompetensi yang diharapkan.

Modul ini dirancang secara khusus dan jelas berdasarkan kecepatan pemahaman masing-
masing mahasiswa, sehingga mendorong mahasiswa untuk belajar sesuai dengan
kemampuannya.

36
DAFTAR PUSTAKA

 https://selviafk.wordpress.com/2017/09/12/materi-algoritma-dan-
struktur-data/
 https://gist.github.com/evanjam/67d8da9bfb0079daaa578f33705f2f
5f
 https://www.scribd.com/doc/185573330/Pertemuan-3-Variabel-
Konstanta-Parameter-Rekursif
 https://drive.google.com/file/d/0B7e504vYI8_qR2t1OTN5aFlKdDQ/vi
ew
 http://elib.unikom.ac.id/files/disk1/468/jbptunikompp-gdl-fitridiani-
23353-5-pertemua-5.pdf
 https://www.okedroid.com/2017/11/belajar-mengenal-linkedlist-
pada-program-java.html
 https://courses.cs.washington.edu/courses/cse373/13wi/lectures/01-
25/LinkedStack.java
 https://codereview.stackexchange.com/questions/62710/stack-
implementation-using-a-linked-list
 http://ankurm.com/implementation-of-stack-using-linked-list-in-
java/
 https://medium.com/easyread/memahami-konsep-stack-secara-
sederhana-bd4409ec560c
 https://furqonubd.wordpress.com/2013/05/20/stack-and-queue/
 http://onestringlab.com/quicksort-pada-java/
 https://www.scribd.com/document/341497037/Materi-Tree-Java-
Struktur-Data
 http://jagocoding.com/tutorial/246/Tutorial_Tree_Binary_Search_Tr
ee
 https://socs.binus.ac.id/2016/12/20/insertion-avl-tree/

37

Anda mungkin juga menyukai