Anda di halaman 1dari 74

MODUL PEMBELARAN

FITO ARYOGA
NPM : 2270111010
Kelas : S1-SI-2

INSTITUT TEKNOLOGI BISNIS DAN BAHASA


i
DIAN CIPTA CENDIKIA PRINGSEWU
KATA PENGANTAR

Bismilllahirrohmanirrohim

Segala puji bagi Allah SWT. Tuhan semesta alam yang telah memberikan

begitu banyak nikmat yang dilimpahkan kepada kita. Terutama nikmat yang hanya

diberikan kepada manusia, yakni nikmat berakal Untuk menyelam lebih dalam

ilmu pengetahuan.

Sholawat serta salam tidak lupa kita curah limpahkan pada junjungan kita, satu-

satunya masnusia pilihan-Nya untuk memberi petunjuk bagi seluruh manusia di

muka bumi, yaitu Rosulullah SAW. Yang telah memberikan tauladan terbaik dalam

berukhuwah dan berkasih sayang yang saya nantikan syafa’atnya di yaumul

qiyamah nanti.

Tidak lupa saya ucapkan terimakasih banya kepada dosen pengampu mata kuliah

Struktur Data Dewi Triyanti, S.Kom, M.T.I. yang telah memberikan kami

kesempatan untuk menyusun Modul Pembelajaran ini.

Saya sadar Modul ini jauh dari kesempurnaan. Oleh karena itu, kritik dan saran

yang bersifat mendukung dan membangun sangat kita Harapkan untuk

Kesempurnaan Makallah selanjutnya. Semoga Modul ini dapat memberikan

manfaat bagi kita semua Amin.

Jaya Sakti, 30 Mei 2023

Fito Aryoga

ii
DAFTAR ISI

COVER ................................................................................................................ i

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

DAFTAR ISI ........................................................................................................ iii

BAB 1 PENGANTAR STRUKTUR DATA

A. Pengertian Struktur Data ........................................................................... 3

B. Tipe Data ................................................................................................... 4

C. Tipe Struktur Data ..................................................................................... 8

D. Variabel ..................................................................................................... 9

E. Jenis – Jenis Struktur Data ................................................. 10

BAB II ARRAY

A. Pengertian Array ....................................................................................... 15


B. Karakteristik Array.................................................................................... 17
C. Dimensi Array ........................................................................................... 18
D. Fungsi dan Kegunaan Array...................................................................... 21
E. Fungsi dan Kegunaan Array...................................................................... 22

BAB III STACK

A. Pengertian Stack ........................................................................................ 24


B. Jenis Jenis Stack ........................................................................................ 26

C. Karakteristik Stack .................................................................................... 27

D. Oprasi-Oprasi Dasar Pada Stack ............................................................... 27

E. Oprasi-Oprasi Dasar Pada Stack ............................................................... 28

iii
F. Kelebihan dan kekurangan Stack .............................................................. 29

BAB IV LINKED LIST

A. Pengertian Linked List .............................................................................. 31

B. Jenis-Jenis Linked List .............................................................................. 32

C. Proses Dasar Linked List .......................................................................... 34

D. Karakteristik dan Oprasi Pada Linked List ............................................... 37

E. Karakteristik dan Oprasi Pada Linked List ............................................... 38

F. Kelebihan Dan Kekurangan Linked List................................................... 39

BAB V QUEUE

A. Pengertian Queue ...................................................................................... 41

B. Jenis – Jenis Queue ................................................................................... 43

C. Kaakteristik dan Oprasi Pada Queue......................................................... 45

D. Fungsi dan Kegunaan Queue .................................................................... 48

BAB VI BINARY TREE

A. Pengertian Binary Tree ............................................................................. 50

B. Fungsi-Fungsi Pada Binary Tree ............................................................... 51

C. Jenis-Jenis Binary Tree dan Aplikasinya .................................................. 53

D. Jenis-Jenis Binary Tree dan Aplikasinya .................................................. 54

BAB VII SORTING

A. Pegertian Sorting ........................................................................................ 57

B. Jenis Jenis Sorting ...................................................................................... 58

iv
BAB VIII SEARCHING

A. Jenis Jenis Sorting ..................................................................................... 64

DAFTAR PUSTAKA .......................................................................................... 69

v
BAB I
Pengantar Struktur Data

Apa itu Struktur Data.? Struktur data adalah suatu penyusunan, hierarki, atau

mudahnya bagaimana kita mengemas dan menyimpan suatu data yang dibutuhkan

untuk diolah oleh suatu algoritma pemrograman. Mengapa kita membutuhkan

struktur data? Tentunya untuk menyederhanakan dan mengklasifikasikannya agar

lebih mudah diatur dan gunakan sesuai dengan kebutuhan algoritma yang akan kita

buat dalam suatu kode program atau aplikasi.

Fondasi setiap program komputer adalah data dan algoritma. Dengan

algoritma, program komputer bisa menggunakan data secara efektif. Sementara

struktur data ibarat kontainer yang menyimpan banyak data dengan layout tertentu.

Tiap jenis struktur data memiliki layout masing-masing.

Dikarenakan memori computer terbatas, layout (tata letak) dan harus diatur dengan

baik. Oleh sebab itu, penyimpanan data membutuhkan “formasi” khusus agar data

lebih rapih dan tidak menghabiskan banyak memori.

Berikut analogi yang sangat sederhana untuk struktur data.

Minimarket memiliki rak dan tata letak tertentu untuk menempatkan barang-

barang. Mereka meletakkan minuman,makanan ringan seperti roti, abun, dan

keperluan rumahh tangga lain sesuai jenis dan kategori barangnya. Ketika

pelanggan mencari minuman, ia bis langsung menuju rak khusus untuk minuman

dan tidak perlu berkeliling swalayan untuk mencarinya.

1
Misalnya, struktur data dapat sesederhana variabel. Variabel adalah suatu

placeholder atau tempat untuk menampung suatu data. Saat kita membuat aplikasi

pendaftaran mahasiswa online, maka kita dapat menampung nama mahasiswa

bukan? Kita dapat membuat variabel nama_mahasiswa untuk menampung nama

mahasiswa tersebut. Jadi, terdapat struktur data berupa variabel yang bernama

nama_mahasiswa untuk menampung nama mahasiswa yang harus diinput pada

aplikasi, misalnya:

nama_mahasiswa = “Gamal Thabroni”;

Lalu bagaimana jika data yang ditampung bukan hanyalah nama saja? Kita dapat

membuat struktur data lain yang lebih kompleks, misalnya membuat himpuan,

larik, atau array. Berbeda dengan variabel yang hanya menampung satu jenis data,

array dapat menampung beberapa data sekaligus. Misalnya, kita dapat membuat

array:

data_mahasiswa[

“nama_mahasiswa” => “Gamal Thabroni”,

“nik_mahasiswa” => “18210572”

];

Tentunya dalam praktiknya, format penulisan dan pendefinisian variabel, array,

atau struktur data yang lainnya amatlah bergantung pada jenis Bahasa

pemrograman yang kita gunakan. Namun demikian, biasanya format tersebut

2
tidaklah memiliki perbedaan yang signifikan. Terdapat pula beberapa jenis struktur

data lainnya yang dapat digunakan untuk menampung dan menyusun suatu data

untuk kemudian diolah atau digunakan oleh algoritma pemrograman.

Oleh karena itu, berikut adalah berbagai uraian mengenai dasar-dasar struktur data

sebagai pengantar awal yang dapat digunakan untuk memahami lebih lanjut

mengenai struktur data.

Berikut ini adalah contoh gambar dari klasifikasi Struktur data :

Gambar 1.1 klasifikasi Struktur Data

A. Pengertian Struktur Data

Struktur data adalah cara penyimpanan, pengorganisasian, dan pengaturan

data di dalam media penyimpanan komputer sehingga data tersebut dapat

digunakan secara efisien (Sjukani, 2012). Sementara itu data sendiri merupakan

representasi dari fakta dunia nyata yang disimpan, direkam atau direpresentasikan

dalam bentuk tulisan, suara, gambar, sinyal atau symbol dan lain-lain. Contoh data

3
ini sendiri dapat sesederhana nama seseorang, nomor telepon, hingga pendapatnya

mengenai suatu pernyataan atau pertanyaan dari survei.

Sementara itu, menurut Hidayati (2016, hlm. 1) struktur data ialah suatu koleksi

atau kelompok data yang dapat dikarakteristikan oleh sebuah organisasi serta

operasi yang didefinisikan terhadapnya. Artinya, struktur data adalah suatu koleksi

data yang diorganisasikan sedemikian rupa agar dapat dapat digunakan

(dioperasikan) berdasarkan definisi yang diberikan pada struktru tersebut.

Misalnya, kita dapat mendefinisikan struktur data bernama “informasi_mahasiswa”

yang berisi kumpulan data-data personal mahasiswa meliputi nama, NPM,

tanggallahir, alamat, dsb.

Dapat disimpulkan bahwa struktur data adalah cara penyimpanan,

pengorganisasian, serta pengaturan data atau representasi dari fakta dunia nyata

dimana data yang terakhir kali dimasukkan adalah data yang pertama diambil agar

dapat digunakan atau dioperasikan secara efisien dan mudah diambil. Selain

strukturnya, kita juga perlu mengetahui tipe dan mekanisme untuk memanipulasi

data tersebut dalam rangka mengefisiensikannya.

B. Tipe Data

Sebelum membahas seperti apa saja struktur data yang ada, kita harus

mengetahui tipe data itu sendiri. Data memiliki tipe atau jenis yang berbeda satu

sama lain. Jenis atau tipe data dalam bahasa pemrograman adalah sekumpulan data

dengan nilai suatu jenis yang telah ditetapkan. Misalnya, tipe data tersebut adalah

4
bilangan bulat (tidak menerima desimal), bilangan desimal (menerima koma), atau

karakter/string (tidak menerima angka, hanya menerima huruf), dsb.

Sejatinya, memori komputer hanya dapat diisi dengan 0 dan 1. Jika kita memiliki

masalah dan kita ingin kode itu, sangat sulit untuk memberikan solusi dalam hal 0

dan 1. Untuk membantu pengguna, bahasa pemrograman dan kompiler memberikan

jenis data. Sebagai contoh, integer mengambil 2 byte , Float mengambil 4 byte, dll.

Ini menyatakan bahwa dalam memori kita menggabungkan 2 byte (16 bit) dan

menyebutnya integer. Demikian pula, menggabungkan 4 byte (32 bit) dan

menyebutnya Float. Jenis data mengurangi upaya pengkodean.

Secara umum, ada tiga tipe data, yakni data yang ditetapkan sistem, data turunan,

dan data yang ditetapkan pengguna.

1. Tipe Data Utama

Tipe data utama merupakan tipe data yang didefinisikan oleh sistem. Tipe data

utama yang disediakan oleh banyak bahasa pemrograman yaitu: int (bilangan

bulat), float, karakter (char), boolean, dll. Jumlah bit yang dialokasikan untuk

setiap jenis data dasar tergantung pada bahasa pemrograman, kompilator dan

sistem operasi. Untuk jenis data dasar yang sama, bahasa yang berbeda.

Tergantung pada ukuran jenis data, total nilai yang tersedia (domain) juga akan

berubah. Sebagai contoh, “int” mungkin mengambil 2 byte atau 4 byte. Jika

dibutuhkan 2 byte (16 bit), maka total nilai yang mungkin adalah minus 32.768

5
untuk Plus 32.767 (-215 ke 215-1). Jika dibutuhkan 4 byte (32 bit), maka nilai

yang mungkin adalah antara-2.147.483.648 dan + 2.147.483.647 (-231 untuk

231-1). Hal yang sama terjadi dengan jenis data lainnya.

Di dalam tipe data Utama ini ada 6 tipe Data :

a. Bilangan Bulat(Int)

Tipe data bilangan bulat atau int adalah tipe data yang dapat menampung

bilangan bulat (tidak menerima bilangan desimal). Kata kunci yang

digunakan untuk jenis data bilangan bulat biasanya adalah int. Tipe data

bilangan bulat biasanya memerlukan 4 byte ruang memori dan berkisar

dari -2147483648 hingga 2147483647

b. Karakter

Tipe data karakter merupakan jenis tipe data yang digunakan untuk

menyimpan karakter. Kata kunci yang digunakan untuk menentukan jenis

tipe data karakter ini biasanya adalah char. Karakter biasanya

membutuhkan 1 byte ruang memori dan berkisar dari -128 ke 127 atau 0

hingga 255.

c. Boleean

Jenis data boolean digunakan untuk menyimpan nilai boolean atau nilai

logis, misalnya variabel boolean dapat menyimpan nilai true atau false (1

6
dan 0). Intinya, tipe data Boolean ini hanya dapat menampung 2 nilai

utama, yakni true atau false (1 atau 0).

d. Floating Point

Tipe data floating point digunakan untuk menyimpan nilai floating point

presisi tunggal atau nilai desimal. Berbeda dengan bilangan bulat (int)

yang tidak menerima koma, tentunya float ini mampu menampungnya,

karena memang diperuntukan untuk menerima bilangan desimal. Kata

kunci pada jenis data floating point yatu float. Variabel float biasanya

membutuhkan 4 byte ruang memori.

e. Double floating Point

Tipe data Floating Point Ganda digunakan untuk menyimpan nilai floating

point presisi ganda atau nilai desimal. Kata kunci yang digunakan untuk

tipe data floating point ganda adalah dua kali lipat. Variabel ganda

biasanya memerlukan 8 byte ruang memori.

f. Void

Void berarti tanpa nilai apa pun. Artinya, void mewakili entitas yang tidak

bernilai. Jenis data void digunakan untuk fungsi tersebut yang tidak

mengembalikan nilai.

Wide character

Tipe data karakter lebar juga merupakan tipe data karakter tetapi jenis data

ini memiliki ukuran yang lebih besar daripada tipe data 8-bit normal.

7
Diwakili oleh wchar_t. Wide character umumnya dapat menampung 2 atau

4 byte data.

2. Tipe Data Turunan

Tipe data turunan adalah tipe data yang berasal dari tipe data utama. Tipe data

ini dibagi menjadi empat jenis yaitu: a) Fungsi b) Array c) Pointer d) Referensi.

3. Tipe Data Abstrak

Tipe data abstrak adalah tipe data yang ditentukan oleh pengguna. Contohnya,

Pengguna (coder/programmer) dapat mendefinisikan kelas di C++ atau

struktur. Biasanya C++ menyediakan tipe data ini yaitu: kelas, struktur, union,

enumerasi, dan typedef.

C. Tipe Struktur Data

Sebelumnya telah kita ketahui bahwa struktur data merupakan suatu cara tertentu

untuk mengatur dan menyimpan data di dalam komputer untuk memproses data

lebih efisien. Struktur data mempunyai format khusus dalam mengatur dan

menyimpan data. Jenis struktur data umum meliputi array, file, liked list, stack,

queue, trees, graph dan sebagainya. Tergantung pada organisasi elemen, struktur

data diklasifikasikan ke dalam dua jenis, yakni:

 Struktur data linear: elemen diakses dalam urutan berurutan tetapi tidak wajib

untuk menyimpan semua elemen secara berurutan. Contoh: Linked list, Stack,

dan Queue.

8
 Struktur data non-linear: elemen struktur data ini disimpan/diakses dalam

urutan non-linear. Contoh: Trees dan Graph.

D. Variabel

Dalam pemrograman, variabel merupakan lokasi atau tempat di dalam memori yang

mampu menyimpan data sementara pada suatu program, data tersebut dapat diubah,

disimpan atau ditampilkan kapan pun pada saat dibutuhkan.

Oleh karena itu, variabel haruslah memiliki nama, di mana nama variabel tidak

boleh sama dengan variable lainnya. Hal tersebut karena setiap variabel memiliki

alamat sendiri pada memori komputer, kita hanya perlu meyebutkan nama variabel

dimana data di simpan, maka komputer akan mampu menemukan alamat variabel

tersebut tersimpan pada memori komputer.

Ada beberapa syarat yang diperlukan dalam pemberian nama variabel yang

ditentukan oleh pembuat program seperti berikut ini.

 Penulisan nama variabel tidak boleh sama dengan nama keyword dan function.

 Penulisan nama variabel maksimum 32 karakter.

 Penulisan nama variabel harus diawali dengan huruf atau garis bawah

(underscore _), karakter berikutnya boleh angka, huruf atau garis bawah.

 Penulisan nama variabel tidak boleh menggunakan spasi.

Perlu diketahui bahwa sebagian ahli informatika menolak variabel dikategorikan

sebagai struktur data. Mengapa? Karena variabel hanya menampung data tunggal,

9
sementara itu sesuatu yang disebut “struktru” seharusnya lebih dari satu bukan?

Namun demikian variabel ini tetaplah penting untuk diketahui, karena merupakan

dasar dari penampungan atau penyimpanan data dalam suatu pemrograman.

E. Jenis – Jenis Struktur Data

1. Array

Array adalah kumpulan item data yang disimpan di lokasi memori yang

berdekatan. Tujuannya adalah untuk menyimpan beberapa item dari jenis

yang sama secara bersama-sama.

Hal ini memudahkan untuk menghitung posisi setiap elemen hanya dengan

menambahkan offset ke nilai dasar, yaitu lokasi memori elemen pertama

array.

2. Linked List

Seperti array, linked list merupakan struktur data jenis linier. Yang

membedakan dengan array adalah elemen linked list tidak disimpan di

lokasi yang berdekatan melainkan dihubungkan menggunakan pointer.

10
3. Stack

Stack adalah struktur data linier yang mengikuti urutan tertentu di mana

operasi dilakukan. Urutannya bisa berupa

 LIFO (Last In First Out) atau data yang masuk terakhir adalah

yang akan keluar lebih dulu

 FILO (First In Last Out) atau data yang pertama masuk akan

keluar paling terakhir.

Dua urutan operasi tersebut sebenarnya memiliki makna yang sama. Pada

struktur stack, semua penyisipan dan penghapusan hanya diperbolehkan

pada salah satu ujung dari sebuah list.

4. Queue

Seperti stack, queue adalah struktur data linier yang mengikuti urutan

operasi First In First Out (FIFO) atau elemen data yang lebih dulu

11
ditambahkan juga akan keluar lebih dulu. Dalam struktur queue, item

dimasukkan di satu ujung dan dihapus dari ujung lainnya.

Perbedaan antara stack dan queue adalah pada proses penghapusan data.

Pada struktur stack kita menghapus item yang baru ditambahkan, sedangkan

dalam queue kita menghapus item yang paling lama ditambahkan.

5. Tree

Tidak seperti array, linked list, stack dan queue, yang merupakan struktur

data linier, tree adalah struktur data hierarkis. Binary tree adalah jenis

struktur tree di mana setiap node memiliki paling banyak dua child, yang

disebut sebagai left child dan right child. Binary tree seringkali

diimplementasikan menggunakan link.

12
6. Grabh

Graph adalah struktur data yang terdiri dari kumpulan simpul berhingga

untuk menyimpan data dan antara dua buah simpul terdapat hubungan

saling keterkaitan. Graph merepresentasikan kumpulan object dimana

pasangan dari objek terhubung oleh sebuah link.

Objek yang saling terkoneksi diwakili oleh sebuah titik yang disebut sebagai

verteks, sedangkan link yang menghubungkan verteks disebut edge.

7. Hash Table

Hash Table adalah struktur data yang dirancang menggunakan fungsi

khusus yang disebut fungsi hash. Fungsi hash digunakan untuk memetakan

nilai yang diberikan dengan kunci tertentu untuk akses elemen yang lebih

cepat. Efisiensi pemetaan tergantung pada efisiensi fungsi hash yang

digunakan.

Misalkan fungsi hash H(x) memetakan nilai x pada indeks x%10 dalam

array. Contohnya, jika daftar nilai adalah [11, 12, 13, 14, 15] maka akan

disimpan di posisi {1, 2, 3, 4, 5} dalam array atau Hash Table masing-

masing.

13
14
BAB II
Array

Dalam dunia data, istilah array sering digunakan untuk menyatakan bagaimana

sebuah data disimpan. Array sebagai penyimpanan data memiliki kelebihan dan

kekurangan, serta kapan waktu yang baik untuk menggunakannya. Selain itu, ada

pula array pada Python yang memiliki kinerja tersendiri dibandingkan dengan

konsep array pada dasarnya. Untuk mengetahui lebih lanjut mengenai apa

itu array, simak penjelasan sederhana terkait array berikut ini.

A. Pengertian Array
Array adalah larik yang berisi kumpulan data dengan tipe serupa. Teknologi

ini dapat digunakan untuk mempermudah penghitungan data karena

mengelompokkan data-data berdasarkan kesamaannya. Untuk mempermudah

pemahaman Anda mengenai hal ini, simak analogi berikut.

Misalnya, sebuah kereta terdiri dari beberapa gerbong yang menyimpan barang

bawaan di dalamnya. Barang bawaan tersebut sama artinya dengan sekelompok

data dengan tipe yang sama, sedangkan kereta tersebut adalah apa yang disebut

dengan array itu sendiri. Kereta menampung barang-barang yang memiliki

kesamaan nilai, sama seperti array yang memuat data-data dengan kemiripan

tertentu.

Menggunakan array sama saja dengan mempersingkat kinerja Anda saat

mengelompokkan data-data. Dengan data set yang berskala besar, tentu lebih rumit

apabila harus mengetikkannya satu per satu seperti contoh pertama di atas. Namun,

15
dengan bantuan array, kerja Anda akan lebih mudah karena dapat menjadikannya

satu larik, seperti pada contoh kedua.

Array atau larik merupakan bagian dasar pembentukan suatu struktur data yang

lebih kompleks dari variabel. Hampir setiap jenis struktur data kompleks dapat

disajikan secara logic oleh array. Array dapat didefinsikan sebagai suatu himpunan

yang terurut dan homogen (Hidayati, 2016, hlm. 9). Terurut artinya elemen tersebut

dapat diidentifikasi sebagai elemen pertama, kedua, dan seterusnya hingga elemen

terakhir. Sementara itu homogen berarti setiap elemen dari suatu array haruslah

memiliki tipe data yang sama.

Oleh karena itu, sebuah array dapat memiliki elemen yang seluruhnya berupa tipe

data bilangan bulat (int), atau karakter, dan string. Bahkan, suatu array juga dapat

memiliki elemen berupa array lainnya (multidimensional array).

Kita dapat menggunakan variabel normal (v1, v2, v3, ..) ketika kita memiliki

sejumlah kecil objek, tetapi jika kita ingin menyimpan instance dalam jumlah besar,

akan sulit untuk mengelolanya dengan variabel normal. Oleh karena itu, dde dari

sebuah array adalah untuk merepresentasikan banyak nilai dalam satu “variabel”

yang tentunya disebut sebagai array.

1. Kelebihan Array

Kelebihan yang pertama dari array adalah kemampuannya menyimpan

beragam data serupa dengan satu variabel. Misalnya seperti varian rasa pada

minuman yang telah dijelaskan di atas. Untuk mencari varian rasa yang

16
disediakan, Anda tidak perlu membaca tiga baris data, melainkan cukup satu

larik array saja.

Kedua, elemen array dapat diakses dengan menggunakan indeksnya.

Sehingga, waktu yang diperlukan untuk membaca sebuah array cenderung

lebih singkat dibandingkan sebaliknya, tidak terkecuali pada data-data yang

berskala besar. Pekerjaan mengenai data pun menjadi lebih sederhana.

Terakhir, array memberikan lokalitas cache yang lebih baik.

Lokalitas cache adalah kecenderungan prosesor untuk mengakses memori

yang sama dalam waktu berulang secara lebih cepat.

Intinya, array mempermudah kinerja Anda yang berkaitan dengan

kumpulan data.

2. Kekurangan Array

Meskipun menyediakan kelebihan-kelebihan di atas, array tetap memiliki

kekurangan. Misalnya, array hanya bisa menyimpan data dengan tipe

serupa. Jadi, data-data yang tidak memiliki kesamaan nilai tidak bisa

disimpan dalam satu larik array.

Selain itu, apabila Anda menggunakan array untuk data berskala besar,

memori komputer yang sangat berharga nilainya akan sia-sia. Dalam kasus-

kasus tersebut, Anda perlu memilih beberapa metode lain dari array untuk

menyelesaikan permasalahan mengenai data-data yang Anda miliki.

B. Karakteristik Array
Array memiliki beberapa karakteristik berikut ini.

1. Mempunyai batasan dari pemesanan alokasi memory ( bersifat statis)

17
2. Mempunyai type data sama ( bersifat Homogen)

3. Dapat diakses secara acak.

4. Berurutan (terstruktur).

C. Dimensi Array
Sebelumnya telah disampaikan bahwa array dapat memiliki elemen berupa

array lainnya. Hal ini dapat terjadi karena array mempunyai dimensi, yakni: Array

Dimensi Satu (Vektor), Array Dimensi Banyak, Array Dimensi Dua

(Matriks/Tabel), dan Array Dimensi Tiga (Kubik).

1. Array Dimensi Satu


Array dimensi satu merupakan bentuk yang sangat sederhana dari array.

Setiap elemen array mempunyai subskrip/indeks. Fungsi indeks/subskrip ini

antara lain: a) menyatakan posisi elemen pada array tersebut; b)

membedakan dengan elemen lain.

Contoh :

Gambar 1.1 Array 1 Dimensi

18
Gambar 1.2 Contoh Program Java Array

2. Array Dimensi Dua


Array dimensi dua adalah array yang membutuhkan dua subskrip/indeks.

Indeks pertama untuk menyatakan posisi baris, Indeks kedua untuk

menyatakan posisi kolom.

Contoh :

Gambar 2.1 Contoh Program Java Array dimensi dua

19
3. Array Dimendi Tiga

Array dimensi tiga adalah array yang memerlukan tiga indeks. Pada

umumnya, suatu array berdimensi N memerlukan N indeks untuk setiap

elemennya.

Contoh ;

Gambar 3.1 Contoh Array Dimensitiga

20
4. Array Multi Dimensi

Array multi dimensi adalah array yang dapat menampung array lain yang

bisa jadi memiliki elemen array lainnya (berdimensi banyak).

Contoh.:

Gambar 4.1 Contoh Array MultiDimensi

D. Fungsi dan Kegunaan Array

Adapun Fugsi dan Kegunan Array adalah sebagai berikut :

 Digunakan Untuk menyelesaikan masalah matristic

 Membantu dan menerapkan Algoritma sorting

 Digunakan untuk mengimplementasikan struktur data lain seperti stack,

queue, heap, hash table dll.

 Array Juga Dapat digunakan untuk penjadwalan CPU(CPU Scheduling)

21
 Dapat diterapkan sebagai table pencarian di computer

 Array Juga Dapat digunakan dalam pemrosesan suara dimana setiap sinyal

suara adalah Array.

E. Oprasi-Oprasi Pada Array

Array memungkinkan kita mengakses elemen data secara acak. Cara ini membuat

akses ke elemen array berdasarkan posisi tertentu menjadi lebih cepat dan efisien.

Operasi-operasi yang dapat dilakukan pada array, diantaranya menyisipkan data

(insertion), mengakses data (access), dan mencari data (searching).

Operasi-operasi yang dapat dilakukan pada array, diantaranya menyisipkan data

(insertion), mengakses data (access), dan mencari data (searching).

1. Oprasi Penyisipan (Insetation)

Operasi penyisipan ialah upaya memasukkan data ke dalam elemen array.

Kita dapat dengan mudah menyisipkan sebuah nilai pada posisi tertentu

dengan menggunakan operator assignment (umumnya berupa simbol =).

Cara ini juga berlaku untuk operasi penggantian.

Contoh Code :

2. Oprasi Pengaksesan (access)

Operasi pengaksesan yaitu upaya mengambil nilai dari elemen dengan

posisi indeks tertentu pada array.

22
Contoh kode :

3. Oprasi Pencarian (Searching)

Operasi pencarian ialah upaya menemukan nilai tertentu dalam array. Untuk

melakukan operasi ini kita perlu mengakses semua elemen array dan

membandingkannya dengan nilai yang hendak dicari.

Contoh Code :

23
BAB III
Stack

A. Pengertian Stack

Stack atau dalam Bahasa Indonesia diartikan tumpukan, adalah struktur data linier

yang mengikuti prinsip Last In First Out (LIFO). Artinya elemen yang terakhir

disisipkan akan menjadi elemen pertama yang keluar.

Cara struktur data stack dalam menyimpan sebuah nilai dapat kita bayangkan

seperti piring yang disusun rapi secara bertumpuk ke atas. Apabila kita ingin

mengambil piring bagian bawah, kita harus terlebih dahulu menyisihkan semua

piring yang ada di atas.

Gambar 1.1 Tumpukan Stack

Dalam istilah pemrograman, upaya menambahkan elemen pada struktur data stack

disebut dengan push. Sedangkan proses menghapus atau menghilangkan elemen

data dari stack disebut pop.

24
Gambar 1.2 Contoh Stack

Dari gambar di atas, dapat terlihat bahwa meskipun elemen ke-3 adalah yang paling

terakhir ditambahkan, namun elemen tersebut justru yang pertama dihapus. Operasi

inilah yang kemudian disebut sebagai prinsip operasi LIFO (Last In First Out).

Kita dapat mengimplementasikan stack dengan bahasa pemrograman contohnya

seperti C, C++, Java, Python, dan C#.

Contoh stack pada program Java :

Gambar 1.3 Stack Java

25
Perlu diketahui, dalam struktur data stack ada dua kondisi yang perlu dihindari,

yaitu underflow dan overflow.

 Stack underflow, yaitu keadaan dimana kita mencoba mengakses atau

menghapus elemen data pada stack yang kosong

 Stack overflow, yaitu keadaan di mana ruang memori yang dialokasikan

untuk struktur data stack sudah penuh namun masih dilakukan operasi

penyisipan elemen

B. Jenis Jenis Stack

Berdasarkan kemampuan penyimpanan data, struktur data stack dapat dibagi

menjadi 2 jenis, yaitu : Register Stack dan Memory Stack.

1. Register Stack

Register stack merupakan stack yang hanya mampu menampung

data dalam jumlah yang kecil. Kedalaman maksimum pada register

stack cenderung dibatasi karena ukuran unit memorinya sangat kecil

dibandingkan dengan memory stack.

2. Memory Stack

Pada stack jenis ini, kedalaman dari stack cukup fleksibel dan

mampu menangani dalam dalam skala yang lebih besar

dibandingkan jenis sebelumnya.

26
C. Karakteristik Stack

Struktur Data Stack Memiliki Karakteristik sebagai berikut :

 Stack digunakan pada banyak algoritma yang berbeda seperti Tower of

Hanoi, Tree traversal, rekursi dll.

 Stack diimplementasikan dengan struktur data array atau linked list.

 Mengikuti prinsip operasi Last In First Out, yaitu elemen yang dimasukkan

pertama akan muncul terakhir dan sebaliknya.

 Penyisipan dan penghapusan terjadi di satu ujung yaitu dari atas tumpukan.

 Apabila ruang memori yang dialokasikan untuk struktur data stack sudah

penuh namun masih dilakukan operasi penyisipan elemen maka akan terjadi

stack overflow.

 Apabila struktur data tidak memiliki elemen data atau kosong, namun tetap

dilakukan operasi penghapusan maka akan terjadi stack underflow

D. Oprasi-Oprasi Dasar Pada Stack

Ada beberapa operasi dasar yang bisa kita untuk lakukan terhadap struktur data

stack. Operasi-operasi tersebut meliputi

 Push: Menyisipkan elemen ke bagian atas stack

 Pop: Menghapus elemen atas dari stack

 IsEmpty: Memeriksa apakah stack kosong

 IsFull: Memerika apakah stack sudah penuh

 Peek: Mendapatkan nilai elemen teratas tanpa menghapusnya

27
1. Push

Merupakan Operan yang berfungsi untuk menambah satu elemen pada stack

dan tidak dapat dilakukan jika stack dalam kedaan penuh.

2. Pop

Merupakan Operan yang berfungsi untuk mengeluarkan satu elemen teratas

dari dalam stack dengan syarat stack tidak dalam kondisi kosong.

3. IsEmpty

Yaitu operan yang berfungsi untuk menentukan apakah suatu stack apakah

stack kosong. Tanda bawah sebuah stack kosong adalah Top bernilai kurang

dari 0 (-1).

4. IsFull

Merupakan oprator yang digunakan untuk memeriksa apakah stack yang ada

sudah penuh.

E. Fungsi dan Kegunaan Stack

Adapun fungsi dan kegunaan struktur data stack adalah sebagai berikut:

 Struktur data stack digunakan dalam evaluasi dan konversi ekspresi

aritmatika. Proses ini banyak dipakai untuk program kompiler.

 Stack digunakan dalam pemrograman rekursi.

 Digunakan untuk pemeriksaan tanda kurung.

 Stack digunakan dalam manajemen memori.

 Dipakai untuk memproses pemanggilan sebuah fungsi.

28
Salah satu contoh penerapan struktur data stack adalah fitur tombol back pada

browser. Dimana browser akan menyimpan semua URL yang telah kita kunjungi

sebelumnya dalam stack.

Setiap kali kita mengunjungi halaman baru, halaman itu ditambahkan di atas stack.

Saat kita menekan tombol kembali, URL saat ini dihapus dari tumpukan, dan URL

sebelumnya diakses.

F. Kelebihan dan kekurangan Stack

a. Kelebihan

 Manajemen data yang efisien: Stack membantu

mengelola data berdasarkan prinsip operasi LIFO yang

tidak bisa dilakukan dengan linked list dan array.

 Manajemen fungsi yang efisien: Ketika suatu fungsi

dipanggil, variabel lokal disimpan dalam stack, dan secara

otomatis dihancurkan setelah dikembalikan.

 Kontrol atas memori: Stack memungkinkan kita untuk

mengontrol bagaimana memori dialokasikan dan tidak

dialokasikan.

 Manajemen memori cerdas: Stack secara otomatis

membersihkan objek.

 Tidak mudah rusak: Stack tidak mudah rusak, oleh

karena itu stack cenderung lebih aman dan dapat

diandalkan.

29
 Tidak mengizinkan pengubahan ukuran variabel:

Variabel pada stack tidak dapat diubah ukurannya.

b. Kekurangan

 Ukuran memori terbatas: Memori pada stack cukup

terbatas.

 Kemungkinan stack overflow: Terlalu banyak membuat

objek di stack dapat meningkatkan risiko stack overflow.

 Akses acak tidak dimungkinkan: Dalam stack, akses data

secara acak tidak bisa dilakukan. Data yang dapat diakses

adalah data yang berada pada elemen atas.

 Dapat menyebabkan fungsi tidak tedefinisi: Ketika

penyimpanan variabel akan ditimpa, kadang-kadang akan

menyebabkan perilaku fungsi atau program yang tidak

terdefinisi.

 Penghentian yang tidak diinginkan: Jika stack berada di

luar memori maka dapat menyebabkan penghentian yang

tidak normal.

30
BAB IV
Linked List

A. Pengertian Linked List

Linked List adalah suatu cara untuk menyimpan data dengan struktur

sehingga programmer dapat secara otomatis menciptakan suatu tempat baru untuk

menyimpan data kapan saja diperlukan. Linked list dikenal juga dengan sebutan

senarai berantai adalah stuktur data yang terdiri dari urutan record data dimana

setiap record memiliki field yang menyimpan alamat/referensi dari record

selanjutnya (dalam urutan). Elemen data yang dihubungkan dengan link pada linked

list disebut Node. Biasanya dalam suatu linked list, terdapat istilah head dan tail .

1. Head adalah elemen yang berada pada posisi pertama dalam suatu linked list

2. Tail adalah elemen yang berada pada posisi terakhir dalam suatu linked list.

Linked list merupakan strukur data linier berbentuk rantai simpul di mana setiap

simpul menyimpan 2 item, yaitu nilai data dan pointer ke simpul elemen

berikutnya. Berbeda dengan array, elemen linked list tidak ditempatkan dalam

alamat memori yang berdekatan melainkan elemen ditautkan menggunakan pointer.

Ga
Gambar 1.1 Linked List

Simpul pertama dari linked list disebut sebagai head atau simpul kepala. Apabila

linked list berisi elemen kosong, maka nilai pointer dari head menunjuk ke NULL.

31
Begitu juga untuk pointer berikutnya dari simpul terakhir atau simpul ekor akan

menunjuk ke NULL.

Ukuran elemen dari linked list dapat bertambah secara dinamis dan mudah untuk

menyisipkan dan menghapus elemen karena tidak seperti array, kita hanya perlu

mengubah pointer elemen sebelumnya dan elemen berikutnya untuk menyisipkan

atau menghapus elemen.

Linked list biasanya digunakan untuk membuat file system, adjacency list, dan hash

table.

B. Jenis-Jenis Linked List

Secara umum, linked list dapat dibagi ke dalam 4 jenis, yakni: Singly linked

list, Doubly linked list, Circular linked list, dan Circular doubly linked list.

1. Singly Linked List

Singly linked list adalah linked list unidirectional. Jadi, kita hanya

dapat melintasinya dalam satu arah, yaitu dari simpul kepala ke simpul ekor.

Contoh :

2. Doubly Linked List

Doubly linked list adalah linked list bidirectional. Jadi, kita bisa

melintasinya secara dua arah. Tidak seperti singly linked list, simpul doubly

32
linked list berisi satu pointer tambahan yang disebut previous pointer.

Pointer ini menunjuk ke simpul sebelumnya.

Contoh ;

3. Circular Linked List

Circular linked list adalah linked list unidirectional. Kita hanya dapat

melintasinya dalam satu arah. Tetapi jenis linked list ini memiliki simpul

terakhir yang menunjuk ke simpul kepala. Jadi saat melintas, kita harus

berhati-hati dan berhenti saat mengunjungi kembali simpul kepala.

Contoh :

4. Circular doubly linked list.

Circular doubly linked list adalah gabungan dari Doubly linked list

dan Circular linked list. Seperti Doubly linked list, linked list ini memiliki

pointer tambahan yang disebut previous pointer, dan mirip dengan Circular

linked list, simpul terakhirnya menunjuk pada simpul kepala. Jenis linked

list ini adalah bidirectional. Jadi, kita bisa melintasinya dua arah .

33
Contoh :

C. Proses Dasar Linked List

Ada 5 Dasar dalam Pemrosesan Linked List yaitu :

 Poses Inisialisasi

 Membuat Simpul Baru

 Membuat Simpul Awal

 Menambahkan SimpulBaru Ke Dalam Linked List(INSERT)

 Menghapus Sebuah Simpul Dari Lingked List

1. Proses Inisialisasi

 Proses Awal Menyatakan Linked List belom ada

 Algoritma :

Firs = Null;
Last = Null;

 Ilustrasi proses :

\0 \0
First Last

34
2. Membuat Simpul Baru
 Intruksi :
P = (simpul*) malloc(sizeof(simpul));
 Algoritma :
Void buat simpul(int*)
{
P = (simpul*) malloc(sizeof(simpul));
If (P1=NULL)
{ P- >Info=X;}
Else
Ooul<<”SimpulGagal Dibuat”;
}

3. Membuat Simpul Awal


 Algoritma :
Void Awal()
{ Syarat :
1. Linked List Belom ada
Firs = P
2. Sudah ada sampul yang akan
Last = P;
dijadikan simpul awal
P ->Link = NULL;
}
4. Menambahkan SimpulBaru Ke Dalam Linked List(INSERT)
Syarat :
1. Linked List Sudah Ada
2. Sudah Ada simpul Yang akan ditambahkan ke dalamLinked List

a. Insert Kanan/Akhir
Algoritma :
Void Ins Akhir()
{
Last-> Link =P;
Last = P;
P ->Link = NULL;
}

35
b. Insert KiriAwal
Algoritma :
Void Ins Awal()
{
P -> Link = Q - >Link;
Q - > Link =P;
}

c. Insert Tengah
Algoritma :
Void Ins Tengah()
{
P -> Link = Q - >Link;
Q - > Link =P;
}

5. Menghapus Sebuah Simpul Dari Lingked List


Syarat :
1. Linked List Sudah Ada.
a. Delete Kanan Akhir
Algoritma :
Void Del Akhir()
{
Free(Last);
Last = Q;
Last - > Link = NULL;
}

b. Delete Kiri Awal


Algoritma :
Void Del Awal()
{
Q = First ;
Firs = Q - > Link
Free(Q)
}

c. Delete Tengah

36
Algoritma :
Void Del Tengah()
{
R = Q - >Link ;
Q- >Link = R - >Link;
Free(R);
}

D. Karakteristik dan Oprasi Pada Linked List

Ada beberapa operasi dan karakteristik yang bisa kita lakukan pada struktur data

linked list. Misalnya, operasi insertion yaitu tindakan menambahkan elemen baru

ke linked list.

1. Karekteristik

Sebuah linked list memiliki beberapa karakteristik sebagai berikut:

 Linked list menggunakan memori tambahan untuk menyimpan link

(tautan)

 Untuk inisialiasi awal linked list, kita tidak perlu tahu ukuran dari

elemen.

 Linked list umumnya dapat digunakan untuk mengimplementasikan

struktur data lain seperti stack, queue, ataupun graf

 Simpul pertama dari linked list disebut sebagai Head.

 Pointer setelah simpul terakhir selalu bernilai NULL

 Dalam struktur data linked list, operasi penyisipan dan penghapusan

dapat dilakukan dengan mudah

 Tiap-tiap simpul dari linked list berisi pointer atau tautan yang menjadi

alamat dari simpul berikutnya

37
 Linked list bisa menyusut atau bertambah kapan saja dengan mudah.

2. Oprasi Pada Link List

Berikut adalah daftar operasi dasar pada linked list:

 Traversal - mengakses setiap elemen dari linked list

 Insertion - menambahkan elemen baru ke linked list

 Deletion - menghapus elemen yang ada

 Searching - menemukan simpul pada linked list

 Sorting - mengurutkan simpul dari struktur linked list

E. Fungsi Dan Kegunaan Linked List

Adapun fungsi dan kegunaan linked list adalah sebagai berikut:

 Linked list dapat digunakan untuk mengimplementasikan struktur data lain

seperti stack, queue, graf, dll.

 Digunakan untuk melakukan operasi aritmatika pada bilangan long integer

 Dipakai untuk representasi matriks rongga.

 Digunakan dalam alokasi file yang ditautkan.

 Membantu dalam manajemen memori.

Penerapan linked list banyak ditemui dalam beberapa kasus berikut:

 Linked list digunakan dalam penjadwalan Round-Robin untuk melacak

giliran dalam permainan multi-pemain.

38
 Digunakan dalam aplikasi penampil gambar. Gambar sebelumnya dan

berikutnya ditautkan, sehingga dapat diakses oleh tombol prev dan next.

 Dalam playlist musik, lagu yang sedang diputar ditautkan ke lagu

sebelumnya dan berikutnya.

F. Kelebihan Dan Kekurangan Linked List

1. Kelebihan

 Struktur data dinamis: Linked list adalah himpunan dinamis sehingga

dapat bertambah dan menyusut saat runtime dengan mengalokasikan dan

membatalkan alokasi memori. Jadi kita tidak perlu memberikan ukuran

awal dari linked list.

 Tidak boros memori: Dalam linked list, pemanfaatan memori yang

efisien dapat dicapai karena ukuran linked list bertambah atau berkurang

pada runtime sehingga tidak ada pemborosan memori dan tidak perlu

mengalokasikan memori sebelumnya.

 Implementasi: Struktur data linier seperti stack dan queue seringkali

mudah diimplementasikan menggunakan linked list.

 Operasi penyisipan dan penghapusan: Operasi penyisipan dan

penghapusan cukup mudah dalam linked list. Kita tidak perlu menggeser

elemen setelah operasi penyisipan atau penghapusan elemen, hanya alamat

yang ada di pointer berikutnya saja yang perlu diperbarui.

2 Kekurangan

 Penggunaan memori: Linked list memerlukan lebih banyak memori

dibandingkan dengan array. Karena dalam linked list, pointer juga perlu

39
menyimpan alamat elemen berikutnya dan membutuhkan memori

tambahan untuk dirinya sendiri.

 Traversal: Dalam traversal, linked list lebih banyak memakan waktu

dibandingkan dengan array. Akses langsung ke elemen tidak bisa

dilakukan pada linked list seperti array yang dapat akses elemen

berdasarkan indeks. Untuk mengakses sebuah simpul pada posisi n dari

linked list, kita harus melintasi semua simpul sebelumnya.

 Reverse Traversing: Dalam single linked list, reverse traversing tidak

dimungkinkan, tetapi dalam kasus double-linked list, ini dapat

dimungkinkan karena berisi pointer ke node yang terhubung sebelumnya

dengan setiap node. Untuk melakukannya, diperlukan memori tambahan

untuk pointer sebelumnya sehingga ada pemborosan memori.

 Akses Acak: Akses acak tidak bisa dilakukan dalam linked list karena

alokasi memorinya yang dinamis.

40
BAB V
Queue

A. Pengertian Queue

Queue adalah struktur data linier yang menerapkan prinsip operasi dimana elemen

data yang masuk pertama akan keluar lebih dulu. Prinsip ini dikenal dengan

istilah FIFO (First In, First Out).

Berbeda dengan struktur data stack yang menyimpan data secara bertumpuk

dimana hanya terdapat satu ujung yang terbuka untuk melakukan operasi data,

struktur data queue justru disusun secara horizontal dan terbuka di kedua ujungnya.

Ujung pertama (head) digunakan untuk menghapus data sedangkan ujung lainnya

(tail) digunakan untuk menyisipkan data.

Berbeda dengan struktur data stack yang menyimpan data secara bertumpuk

dimana hanya terdapat satu ujung yang terbuka untuk melakukan operasi data,

struktur data queue justru disusun secara horizontal dan terbuka di kedua ujungnya.

Ujung pertama (head) digunakan untuk menghapus data sedangkan ujung lainnya

(tail) digunakan untuk menyisipkan data.

Contoh nyata dalam kehidupan sehari-hari yang dapat menggambarkan struktur

data queue adalah barisan orang yang menunggu untuk membeli tiket di gedung

bioskop.

Orang yang baru datang akan bergabung dengan barisan dari ujung dan orang yang

berdiri di depan akan menjadi yang pertama mendapatkan tiket dan meninggalkan

barisan. Demikian pula dalam struktur data queue, data yang ditambahkan terlebih

dahulu akan meninggalkan antrian terlebih dahulu.

Contoh ilustrasi dari queue :

41
Gambar 1.1 Ilustrasi Queue

Pada gambar di atas, karena elemen 1 ditambahkan ke antrian lebih dulu daripada

2, maka 1 adalah elemen yang pertama dihapus dari antrian. Hal ini mengikuti

aturan operasi FIFO.

Dalam istilah pemrograman, menempatkan item dalam struktur data queue

disebut enqueue, sedangkan operasi menghapus item dari queue

disebut dequeue.

Kita dapat mengimplementasikan queue dalam bahasa pemrograman apa pun

seperti C, C++, Java, Python atau C#, dengan spesifikasi yang hampir sama.

Contoh Program Java :

Gambar 1..2 Program Java Queue

Struktur data queue umumnya digunakan untuk mengelola thread dalam

multithreading dan menerapkan sistem antrian prioritas pada program komputer.

42
B. Jenis – Jenis Queue

Secara umum ada 4jenis queue, yaitu :

 Simple Queue
 Circular Queue
 Priority Queue
 Double-Ended Queue(Dequeue)

1. Simple Queue

Simple queue adalah struktur data queue paling dasar di mana penyisipan item

dilakukan di simpul belakang (rear atau tail) dan penghapusan terjadi di

simpul depan (front atau head).

Contoh :

Gambar 2.1 Queue

2. Circular Queue

Pada circular queue, simpul terakhir terhubung ke simpul pertama. Queue jenis

ini juga dikenal sebagai Ring Buffer karena semua ujungnya terhubung ke

ujung yang lain. Penyisipan terjadi di akhir antrian dan penghapusan di depan

antrian.

43
Contoh :

Gambar 3.1 Circular Queue

3. Priority Queue

Priority Queue adalah strruktur data queue dimana simpul akan memiliki

beberapa prioritas yang telah ditentukan. Simpul dengan prioritas terbesar akan

menjadi yang pertama dihapus dari antrian. Sedangkan penyisipan item terjadi

sesuai urutan kedatangannya.

Contoh :

Gambae 4.1 priority Queue

Aplikasi priority queue antara lain algoritma jalur terpendek Dijkstra,

algoritma prim, dan teknik kompresi data seperti kode Huffman.

44
4. Double-Ended Queue(Dequeue)

Dalam double-ended queue (dequeue), operasi penyisipan dan penghapusan

dapat terjadi di ujung depan dan belakang dari queue.

Contoh :

Gambar 5.1 Dequeue

C. Kakteristik dan Oprasi Pada Queue

1. Karakteristik

karakteristik sebagai berikut:

 Queue adalah struktur FIFO (First In First Out).

 Untuk menghapus elemen terakhir dari Queue, semua elemen yang

dimasukkan sebelum elemen tersebut harus dihilangkan atau dihapus.

 Queue adalah daftar berurutan dari elemen-elemen dengan tipe data yang

serupa.

2. Oprasi Queue

Queue adalah struktur data abstrak (ADT) yang memungkinkan operasi

berikut:

 Enqueue: Menambahkan elemen ke akhir antrian

 Dequeue: Menghapus elemen dari depan antrian

45
 IsEmpty: Memeriksa apakah antrian kosong

 IsFull: Memeriksa apakah antrian sudah penuh

 Peek: Mendapatkan nilai bagian depan antrian tanpa menghapusnya

 Initialize: Membuat antrian baru tanpa elemen data (kosong)

1. Oprasi Engueue

Di bawah ini adalah langkah-langkah untuk enqueue (memasukkan) data

ke dalam antrian

 Periksa apakah antrian sudah penuh atau tidak.

 Jika antrian penuh – cetak kesalahan overflow dan keluar dari program.

 Jika antrian tidak penuh – naikkan pointer belakang untuk menunjuk ke

ruang kosong berikutnya.

 Tambahkan elemen pada posisi yang ditunjuk oleh pointer belakang.

 Kembalikan status bahwa penambahan telah berhasil

Pseudocode Untuk Oprasi Queue :

Gambar 5.2 Queue Dalam Bentuk Java

46
2. Oprasi Dequeue

Di bawah ini adalah langkah-langkah untuk melakukan operasi dequeue:

 Periksa apakah antrian sudah penuh atau tidak.

 Jika antrian kosong – cetak kesalahan underflow dan keluar dari

program.

 Jika antrian tidak kosong – akses elemen data yang ditunjuk oleh

pointer depan.

 Geser pointer depan untuk menunjuk ke elemen data berikutnya yang

tersedia.

 Kembalikan status bahwa operasi penghapusan telah berhasil

Pseudocode Untuk Oprasi Dequeue :

Gambar 5.3 Dequeue

47
D. Fungsi dan Kegunaan Queue

Berikut ini adalah beberapa fungsi queue yang paling umum dalam struktur data:

 Queue banyak digunakan untuk menangani lalu lintas (traffic) situs web.

 Membantu untuk mempertahankan playlist yang ada pada aplikasi media

player

 Queue digunakan dalam sistem operasi untuk menangani interupsi.

 Membantu dalam melayani permintaan pada satu sumber daya bersama, seperti

printer, penjadwalan tugas CPU, dll.

 Digunakan dalam transfer data asinkronus misal pipeline, IO file, dan socket.

1. Kelebihan dan kekurangan Queue

a. Kelebihan

 Data dalam jumlah besar dapat dikelola secara efisien.

 Operasi seperti penyisipan dan penghapusan dapat dilakukan

dengan mudah karena mengikuti aturan masuk pertama keluar

pertama.

 Queue berguna ketika layanan tertentu digunakan oleh banyak

konsumen.

 Queue cepat untuk komunikasi antar-proses data.

 Queue dapat digunakan dalam implementasi struktur data

lainnya.

a. Kekurangan

 Operasi seperti penyisipan dan penghapusan elemen dari tengah

cenderung banyak memakan waktu.

48
 Dalam queue konvensional, elemen baru hanya dapat

dimasukkan ketika elemen yang ada dihapus dari antrian.

 Mencari elemen data pada struktur queue membutuhkan time

complexity O(N).

 Ukuran maksimum antrian harus ditentukan sebelumnya.

49
BAB VI
Binary Tree

A. Pengertian Binary Tree

Binary Tree adalah struktur data yang mirip dengan Linked List. Bila

Linked List dianalogikan sebagai rantai yang linier maka Binary Tree dianalogikan

sebagai pohon. Binary Tree dikelompokkan menjadi tree yang tidak berurut

(unordered Binary Tree) dan tree yang terurut (ordered Binary Tree).

Tree merupakan struktur data yang biasanya tidak kontigu, dimana sebuah node bisa

memiliki beberapa "anak" (child node), dan berbeda dengan Graph, jalan menuju

sebuah child node hanya bisa dicapai melalui maksimal 1 node, dimana pada

Graph, dimungkinkan bahwa 1 node bisa dicapai dari banyak node lainnya.

Sebuah node yang tidak memiliki child node sama sekali dinamakan leaf node.

Binary tree adalah jenis tree yang simpulnya hanya dapat memiliki paling banyak

2 simpul anak (child node). Kedua simpul tersebut biasa disebut simpul kiri (left

node) dan simpul kanan (right node). Tree tipe ini lebih populer daripada jenis

lainnya.

Struktur data ini adalah metode khusus untuk mengatur dan menyimpan data di

komputer agar dapat digunakan secara lebih efektif.

Binary Tree dapat digambarkan berdasarkan kondisinya, yaitu:

50
Binary Tree Kosong

Pointer ke Akar(root)dari tree

Binary Tree sebagai root sekaligus sebagai daun (leaf

Gambaran dari Binary Tree yang terdiri dari 3 (tiga) node:

Pointer ke root dari tree

Root dari tree

Leaf dari tree

B. Fungsi-Fungsi Pada Binary Tree

Fungsi-fungsi pada Binary Tree biasa diselesaikan dengan cara rekursif,

karena pada dasarnya, sebuah node memililiki anak-anak yang juga

merupakan node, begitu seterusnya. Sehingga, prosedur yang dilakukan pada

sebuah node root (paling awal) juga bisa dilakukan dengan cara yang mirip

kepada node lainnya.

Ketika melakukan print pada Binary Tree, ada 3 cara melakukan print,

yakni Inorder, Preorder, dan Postorder. Nama-nama ini merefleksikan

tempat root node ketika diprint. Inorder artinya print from left-root-

51
right, Preorder artinya root-left-right, Postorder artinya left-right-

root. Misalkan sebuah Binary Tree seperti berikut:

Contoh :

Print Preorder akan menghasilkan: 1 2 4 5 3

Print Inorder akan menghasilkan: 4 2 5 1 3

Print Postorder akan menghasilkan: 4 5 2 3 1

Lalu, ada juga fungsi insert dan delete. Meng-insert sebuah leaf dari

sebuah node relatif mudah, cukup cari node yang diinginkan, kemudian

set left atau right dari node tersebut menjadi elemen yang baru, sesuai kebutuhan.

Demikian pula delete sebuah leaf dari sebuah node, cukup cari node yang

diinginkan dan set left atau right dari node tersebut menjadi null. Tetapi bagaimana

jika node yang ingin di-delete memiliki child? Pada Binary Tree, cukup dengan

"menaikkan" elemen childnya ke node tersebut. Nah, apakah ada cara lain yang bisa

dilakukan untuk proses tersebut? Mari kita lihat pada bagian selanjutnya.

52
C. Jenis-Jenis Binary Tree dan Aplikasinya

Terdapat beberapa jenis Binary Tree lagi yang cukup berbeda, namun dapat

beririsan. Jenis yang pertama adalah Balanced Tree, dimana selisih dari tinggi

subpohon kiri dan subpohon kanan tidak lebih dari 1. Contoh Balanced Tree adalah

seperti demikian:

Jenis Binary Tree ini sering dimanfaatkan untuk

algoritma sorting maupun mapping, terutama jika digunakan bersamaan dengan

jenis Tree berikutnya. Mari kita lihat jenis Tree berikutnya.

Jenis Tree yang kedua adalah Binary Search Tree, dimana struktur data ini memiliki

aturan penyimpanan yang ketat. Semua elemen harus unik, dan semua elemen pada

node kiri pasti lebih kecil daripada elemen root/parentnya, dan sebaliknya berlaku

pada node kanan. Contohnya demikian.

53
enis Binary Tree ini, biasa disingkat sebagai BST, jika merupakan sebuah Balanced

Tree juga, akan memiliki Time Complexity yang sangat ringan, yakni O (log n).

Mengapa? Misalkan kita ingin mencari node dengan info 3. Kita periksa root node.

Apakah lebih besar atau kecil daripada 3? Lebih kecil. Maka kita bisa langsung

singkirkan node 21 dan anak-anaknya, dan hanya melihat node 2 dan anak-anaknya.

Lakukan kembali perbandingan. Ternyata 2 lebih kecil daripada 3. Mari

cek child kanan dari node 2. Ternyata nilai ini yang kita inginkan. Terlihat bahwa

meskipun ada 7 node, kita hanya perlu melakukan 3 perbandingan.

BST sering digunakan untuk searching maupun sorting karena kemampuannya

untuk memangkas waktu yang signifikan semakin banyaknya data yang ada,

karena time complexitynya yang bertumbuh secara logaritmik.

D. Mendalami BST(Binary Search Tree)

Binary Search Tree (BST) merupakan tree yang terurut (ordered Binary

Tree) yang memiliki kelebihan bila dibanding dengan struktur data lain.

Diantaranya adalah proses pengurutan (sorting) dan pencarian (searching) dapat

dilakukan bila data sudah tersusun dalam struktur data BST. Pengurutan dapat

dilakukan bila BST ditelusuri (traversed) menggunakan metode in-order. Detail

54
dari proses penelusuran ini akan dibahas pada pertemuan selanjutnya. Data yang

telah tersusun dalam.

struktur data BST juga dapat dicari dengan mudah dan memiliki rata-rata

kompleksitas sebesar O(log n), namun membutuhkan waktu sebesar O(n) pada

kondisi terjelek dimana BST tidak berimbang dan membentuk seperti linked list

seperti contoh berikut:

1. Aturan Membangun BST

Agar data benar-benar tersusun dalam struktur data BST, dua aturan yang

harus dipenuhi pada saat data diatur dalam BST adalah sebagai berikut:

1. Semua data dibagian kiri sub-tree dari node t selalu lebih kecil dari data

dalam node t itu sendiri.

2. Semua data dibagian kanan sub-tree dari node t selalu lebih besar atau

sama dengan data dalam node t.

BST berikut adalah sebuah BST berukuran 9 dengan kedalaman 3 dengan

node daun (leaf) adalah 1, 4, 7 dan 13.

55
3. Contoh Aplikasi BST

 Membangun daftar vocabulary yang merupakan bagian dari inverted

index (sebuah struktur data yang digunakan oleh banyak mesin

pencari seperti Google.com, Yahoo.com dan Ask.com)

 Banyak digunakan dalam bahasa pemrograman untuk mengelola

dan membangun dynamic sets.

56
BAB VII
Sorting

A. Pegertian Sorting
Sorting adalah sesuatu proses aplikasi dimana yang awalnya acak -acakkan lalu

diurutkan dalam sebuah sekumpulan objek menurut urutan atau susunan sesuai

dengan kebutuhan agar ketata rapi. Tujuan dari penggunaan sorting adalah

memudahkan seseorang dalam pencarian, menyusun data yang awalnya acak –

acakkan menjadi keurut, dan menyeselaikan masalah yang kompleks seperti

schedulling, pengolahan basis data dan lain – lain.

Penyusunan sorting ada 2 yaitu secara ascending dan descending. Ascending adalah

pengurutan dari kecil ke yang lebih besar sedangkan descending adalah pengurutan

dari besar ke yang lebih kecil. Contohnya diberikan angka acak yaitu : 10 , 34 ,

67, 2 , 8 , 54 , 114, 88 lalu di sorting secara ascending jadi hasilnya menjadi 2, 8,

10, 34, 54, 67, 88, 114 .

 Deklarasi Array Sorting


Mendeklarasikan array secara global:
int data[100]; int n;
//untuk jumlah data
Fungsi Tukar 2 Buah Data:
void tukar(int a,int
b){ int tmp; tmp =
data[a]; data[a] =
data[b]; data[b] =
tmp;
}

57
B. Jenis Jenis Sorting

1. Buble Sort

Adalah pengurutan yang dilakukan dengan cara mencari nilai maksimum

atau minimum yang dimulai dari data posisi 0 hingga ke posisi N-1. Ada 2

cara pengurutan di dalam selection sort yaitu seleksi maksimum dan

minimum .Seleksi maksimum adalah memilih elemen maksimum sebagai

pengurutan sedangkan seleksi minimum adalah memilih elemen minimum

sebagai pengurutan.

Proses pengurutan menggunakan Buble Sort

 Pertama membandingkan data ke – i dengan data ke (i+1).Jika tidak

sesuai dengan kententuan urutan apakah ascending atau descending

maka tukar.

 Terus bandingkan data sampai ke data yang terakhir .

 Proses akan terhenti bila membandingkan data sampai data yang

terakhir.

Contoh :

58
Penjlasan :

Mulai dari indeks pertama, bandingkan data pertama dan kedua

 Jika data pertama lebih besar dari data kedua, mereka ditukar. Karena

contoh tersebut mengurutkan data berdasarkan kecil ke besar

(ascending).

 Sekarang, bandingkan data kedua dan ketiga. Tukarkan jika tidak

berurutan

 Proses di atas berlangsung hingga elemen terakhir.

2. Selection Sort

Adalah pengurutan yang dilakukan dengan cara mencari nilai maksimum

atau minimum yang dimulai dari data posisi 0 hingga ke posisi N-1. Ada 2

cara pengurutan di dalam selection sort yaitu seleksi maksimum dan

minimum .Seleksi maksimum adalah memilih elemen maksimum sebagai

pengurutan sedangkan seleksi minimum adalah memilih elemen minimum

sebagai pengurutan.

Proses Pengurutan Menggunakan Selection Sort

 Mencari data terkecil dalam interval j=0 sampai j=N-1.

 Jika pada posisi posditemukan data yang terkecil, tukarkan data

diposisi pos dengan data di posisi i jika k. dan ulangi sampai data sudah

keurut.

59
Contoh :

3. Insertion Sort

Adalah pengurutan yang dilakukan dengan cara menyisipkan elemen pada

posisi yang sudah ditentukan atau tepat .

 Macam-macam Insertation Sort

 Langsung

Ilustrasi dari langkah-langkah pengurutan dengan algoritma

penyisipan langsung dapat dilihat pada tabel berikut :

60
 Dengan Binnar

Adalah pengurutan yang lebih cepat dengan cara data yang

dibagi 2 dari bagian data posisi 0 sampai dengan i – 1 .

Apabila data pada posisi ke i berada pada jangkauan kiri

maka proses perbandingan dilakukan hanya pada bagian kiri

dan menggeser posisi sampai i.

4. Radik Sort

Radix Sort merupakan salah satu algoritma Non-Comparasion Sort

(pengurutan tanpa pembandingan).

Proses yang dilakukan dalam metode ini adalah

mengklasifikasikan/menyelesaikan data sesuai dengan kategori terurut yang

tertentu, dan tiap kategori dilakukan pengklasifikasian lagi, dan seterusnya

61
sesuai kebutuhan, kemudian subkategori-kategori atau bagian-bagian

dari kategori tersebut digabungkan kembali.

Contoh penggunaan algoritma radix sort untuk pengurutan sebuah

kumpulan bilangan bulat positif, dengan jumlah digit maksimal 3 :

Pertama kali data dibagi-bagi sesuai dengan digit terkanan :

Sehingga dapat di bentuk tabel :

Catatan : perhatikan digit yang berwarna merah yaitu berupa tanda digit

yang sedang di proses atau berjalan.

Pada saat penentuan kategori lihat terlebih dahulu nilai digit yang terbesar

dicontoh ini yakni nilai digit yang terbesar 9 sehingga kategori sebanyak 9

baris dan diawali dari 0.

5. Shell Sort

Adalah perbaikan terhadap pengurutan sisip .

Proses Pengurutan dengan ShellShort :

62
Pertama-tama adalah menentukan jarak mula-mula dari data yang akan

dibandingkan, yaitu N / 2. Data pertama dibandingkan dengan data dengan

jarak N / 2. Apabila data pertama lebih besar dari data ke N / 2 tersebut maka

kedua data tersebut ditukar. Kemudian data kedua dibandingkan dengan

jarak yang sama yaitu N / 2. Demikian seterusnya sampai seluruh data

dibandingkan sehingga semua data ke-j selalu lebih kecil daripada data ke-

(j + N / 2).

Pada proses berikutnya, digunakan jarak (N / 2) / 2 atau N / 4. Data pertama

dibandingkan dengan data dengan jarak N / 4. Apabila data pertama lebih

besar dari data ke N / 4 tersebut maka kedua data tersebut ditukar. Kemudian

data kedua dibandingkan dengan jarak yang sama yaitu N / 4. Demikianlah

seterusnya hingga seluruh data dibandingkan sehingga semua data ke-j lebih

kecil daripada data ke-(j + N / 4).

Pada proses berikutnya, digunakan jarak (N / 4) / 2 atau N / 8. Demikian

seterusnya sampai jarak yang digunakan adalah 1.

63
BAB VIII
Searching

A. Pengertian Searching

Searching dalam Komputer merupakan Fitur yang sering kita gunakan dalam proses

mencari. Namun bagaiman metode Searching?. Disini akan membahas metode

searching dalam struktur Data. Sebelum itu anda harus mengetahui definisi

Searching.

Searching adalah mencari data yang dibutuhkan. Searching dalam pemrograman

bisa dilakukan untuk mencari data yang ada di dalam memory komputer. Dalam

kehidupan sehari-hari kita juga sering melakukan kegiatan searching seperti

mencari data/informasi yang ada dalam internet.

Pencarian di perlukan untuk mencari informasi khusus dari tabel pada saat lokasi

yang pasti dari informasi tersebut sebelumnya tidak diketahui. Pencarian selalu

dinyatakan dengan referensi pada adanya sekolompok data yang tersimpan secara

terorganisasi, kelompok data tersebut kita sebut tabel.

Array memungkinkan untuk menyimpan nilai yang bertipe sama. Operasi yang

umum dalam array adalah Sequential Search dan Binary search. Perbedaan dari

kedua teknik ini terletak pada keadaan data

1. Macam-Macam Searching

Terdapat dua macam searching yaitu Sequential Searching dan Binary

Searching. Di bawah ini kami akan menjelaskan tentang keduanya.

64
a. Sequential Searching

Sequential searching atau sequential search merupakan proses pencarian

secara linier dengan menggunakan prinsip seperti berikut. Data akan

dibandingkan secara satu per satu secara berurutan dengan data yang

dicari.

Sebenarnya, pencarian ini bekerja dengan hanya melakukan

pengulangan terhadap 1 sampai jumlah kata. Pada setiap

pengulangannya, data tersebut akan dibandingkan dengan data yang

dicari. Jika ternyata sama, maka data telah ditemukan. Sebaliknya,

meskipun dilakukan pengulangan namun belum ada data yang cocok,

maka data tersebut belum ditemukan.

Contoh :

1. i ← 0 2.

2. ketemu ← false 3.

3. Selama (tidak ketemu) dan (i <= N) kerjakan baris 4 4.

4. Jika (Data[i] = x) maka ketemu ← true, jika tidak i ← i + 1 5.

5. Jika (ketemu) maka i adalah indeks dari data yang dicari, jika tidak

data tidak ditemuka

65
Contoh Ilustrasi :

Gambar 8.1 ProgramJava

b. Binary Searching

Binary Searcing adalah metode dengan Prinsip dasarnya adalah

melakukan proses pembagian ruang pencarian secara berulang-ulang

sampai data ditemukan atau sampai ruang pencarian tidak dapat dibagi lagi

(berarti ada kemungkinan data tidak ditemukan). Metode ini Memperkecil

jumlah operasi pembandingan yang harus dilakukan antara data yang

dicari dengan data yang ada di dalam tabel, khususnya untuk jumlah data

yang sangat besar ukurannya. Syarat dalam metode ini adalah Data sudah

dalam keadaan terurut (naik) ascending

Adapun Cara Kerja Metode Binary Searching dalam Struktur data seperti

berikut :

1. kunci akan selalu dibandingkan dengan data yang berada di tengah

(middle)

66
2. bila sama berarti data ketemu, bila tidak, akan “dilihat” apakah data

ada di sebelah “kiri” (artinya data lebih kecil dari data di tengah) atau

di sebelah “kanan” (artinya data lebih besar dari data di tengah).

3. Bila data ada di sebelah kiri, dilakukan pencarian dengan cara yang

sama (sementara data yang berada di sebelah kanan akan diabaikan).

4. Jadi, setiap kali pencarian, data selalu “dibelah” menjadi dua bagian

(biner), sampai pada “titik tertentu”(bila sama dengan titik tengah,

pencarian tidak dilakukan lagi, bila tidak, lakukan pencarian lagi

sampai pada perbandingan terakhir data juga tidak sama, berarti data

tidak ditemukan pada array).

Contoh :

1. L ← 0 2.

2. R ← N - 1 3.

3. ketemu ← false 4.

4. Selama (L <= R) dan (tidak ketemu) kerjakan baris 5 sampai

dengan 8 5.

5. m ← (L + R) / 2 6. Jika (Data[m] = x) maka ketemu ← true 7.

6. Jika (x < Data[m]) maka R ← m – 1 8.

7. Jika (x > Data[m]) maka L ← m + 1 9.

67
8. Jika (ketemu) maka m adalah indeks dari data yang dicari,

jikatidak data tidak ditemukan

Contoh Ilustrasi :

68
DAFTAR PUSTAKA
 https://serupa.id/pengantar-struktur-data/
 https://serupa.id/pengantar-struktur-data/
 https://revou.co/kosakata/struktur-data

 Hidayati. 2016). Modul Struktur Data. Jakarta: BSI.


 Sjukani, M. (2012). Struktur Data. Jakarta: Mitra Wacana Media.
 https://www.trivusi.web.id/2022/07/struktur-data-array.html
 https://www.trivusi.web.id/2022/07/struktur-data-stack.html
 https://lms-
paralel.esaunggul.ac.id/pluginfile.php?file=/86227/mod_resource/co
ntent/1/Modul+Struktur+Data-Linked+List.pdf
 https://www.trivusi.web.id/2022/07/struktur-data-linked-list.html
 https://catatananalgo.wordpress.com/2016/10/02/algoritma-
sorting-pengurutan/
 https://www.trivusi.web.id/2022/06/mengenal-struktur-data.html
 https://www.trivusi.web.id/2022/06/mengenal-struktur-data.html
 Munir, Rinaldi. Algoritma dan Pemograman, Informatika, Bandung,
2008
 http://agusjembung.blogspot.co.id/2012/02/macam-macam-
sorting.html
 http://nurulkhamiliyah.blogspot.co.id/2011/12/metode-
pengurutan-shell-sort.html
 http://saniyatul.lecturer.pens.ac.id/ASD/10%20Algoritma%20Penc
arian%20v1.pdf
 http://onlyvista.blogspot.com/2017/07/pengertian-searching-
jenis-jenis.html
 http://onlyvista.blogspot.com/2017/07/pengertian-searching-
jenis-jenis.html

69

Anda mungkin juga menyukai