Modul Struktur Data
Modul Struktur Data
Penyusun Menyetujui
Ketua Program Studi
Sistem Informasi
Mengetahui
Wakil Ketua 1 Bidang Akademik
STRUKTUR DATA
PENDAHULUAN
A. Deskripsi Materi
Struktur data adalah sebuah bagian dari ilmu pemrograman dasar dimana
bertujuan untuk membuat sebuah struktur penyimpanan data yang digunakan saat
program dijalankan. Struktur data berbeda dengan basis data. Basis data merupakan
ilmu untuk mengakses dan memelihara data yang disimpan dalam penyimpanan
(storage) seperti hardisk dan diakses dari sebuah antarmuka seperti DBMS. Struktur
data berada pada level pemrograman, dimana merupakan tempat penyimpanan data
yang digunakan oleh program terkait dengan alokasinya di memori. Struktur alokasi
di memori untuk menyimpan data yang sedang digunakan oleh program inilah fokus
dari Struktur Data.
Pembuatan struktur data dimulai dari analisis perancangan data apa yang harus
dimanipulasi di memori agar program yang dibuat lebih efisien. Langkah yang kedua
adalah mengimplementasikan struktur data dalam bahasa pemrograman, dan
selanjutnya menggunakan struktur data yang sudah dibuat untuk memanipulasi data
di memori dalam sebuah program misalkan pada ilustrasi langkah-langkah berikut ini:
Ilustrasi Keterangan
Nama Alamat No_ktp No_telp Misalkan ada sebuah data manusia
? ? ? ? yang terdiri dari :
Nama
Alamat
No_ktp
No_telp
dan diperlukan untuk menyimpan data
manusia, maka dalam logika akan
dipersiapkan tempat untuk menyimpan
sebuah data manusia. Maka dibuat
sebuah tipe data bentukan untuk
menyimpan data manusia.
Nama Alamat No_ktp No_telp Misalkan dari data manusia yang ada
Auliya Jakarta 12345 +62878 diisi dengan data seorang manusia
Nama Alamat No_ktp No_telp
Misalkan dari data manusia yang ada
Auliya Jakarta 12345 +62878
digunakan untuk menampung beberapa
Aira Bandung 23456 +62812
data manusia.
Ayu Kisaran 34567 +62858
Dari ilustrasi di atas dapat dilihat bahwa sebuah struktur data adalah cara
menyimpan tempat yang baik dan tersusun secara terstruktur agar data yang disimpan
dapat dibaca dengan lebih mudah.
D. Petunjuk Belajar
(uraikan cara/kegiatan belajar yang harus dilakukan oleh siswa untuk mempelajari
materi ini)
1. Bacalah pendahuluan modul ini sehingga benar-benar memahami isi,
kegunaan, kompetensi / kemampuan yang akan dicapai, dan cara mempelajari
materi ini
2. Amatilah kejadian nyata yang terjadi dalam masyarakat di sekitar kalian, ter-
utama hal-hal yang terkait dengan masalah produksi, distribusi, dan konsum-si
masyarakat tersebut.
3. Apabila mengalami kesulitan memahami konsep yang harus dipahami dari
modul ini, cobalah berdiskusi dan bertanya dengan teman atau kelompok
belajar yang dianggap tahu
KEGIATAN BELAJAR
1-2
ARRAY (LARIK)
Tujuan:
Setelah mempelajari materi ini diharapkan mahasiswa memiliki kemampuan untuk:
1. Memahami konsep array dalam pemrograman
2. Menggunakan array untuk menyelesaikan berbagai kasus sederhana
A. Pengertian Array/Larik
Larik adalah tipe terstruktur yang terdiri dari sejumlah elemen-elemen yang
bertipe sama. Banyaknya elemen dalam suatu larik ditunjukkan oleh suatu indeks yang
harus merupakan tipe data yang menyatakan keterurutan, misalnya integer atau karakter
(karena ia menyatakan posisi data).
Tiap-tiap elemen di larik dapat diakses langsung melalui indeksnya. Suatu larik
memiliki jumlah elemen yang jumlahnya tetap, sehingga jumlah elemen larik tidak
dapat diubah selama pelaksanaan program.
Bentuk umum :
tipe_array nama_array [jumlah data]
Contoh Program :
1: #include <stdio.h>
2:
3: void main()
4: {
5: int a[5] = {10,25,30,45,50};
String nama [5] =
{“Sekolah”,”Tinggi”,”Manajemen”,”Informatika”,
“Komputer”};
6: int i;
7:
8: for(i=0;i<5;i++)
9: {
10: printf(“%d = %d\n”,i,a[i]);
11: }
12: }
C. Array Multidimensi
Array multidimensi adalah array yang mempunyai lebih dari satu dimensi.
Misalnya : A[3][5] artinya array tersebut mempunyai 3 baris 5 kolom.
Bentuk umum :
tipe_array nama_array [jumlah data][jumlah data]
Tugas:
Sudah ada array Satu Dimensi yang dibuat dengan int A[30], sudah ada isinya berupa
nilai ujian mahasiswa. Susun program (penggalan program) untuk:
a. Mencetak nilai yang terbesar, dan mencetak jumlah mahasiswa yang mendapat
nilai tersebut.
b. Mencetak nilai yang terbesar, dan mencetak berada di lokasi mana saja nilai
terbesar tersebut berada dalam array.
c. Mencetak nilai yang terbesar, dan nilai yang terkecil, serta mencetak jumlah
mahasiswa yang mendapat nilai terbesar dan terkecil tersebut.
KEGIATAN BELAJAR
3
POINTER
Tujuan:
Setelah mempelajari materi ini diharapkan mahasiswa memiliki kemampuan untuk:
1. Memahami tentang pointer.
2. Mendeskripsikan cara kerja pointer
3. Perbedaan Variabel dengan pointer
A. Pengertian Pointer
Pointer adalah sebuah penunjuk alamat pada memori komputer yang
menyimpan data sehingga sebuah pointer dapat disebut pointer kosong ketika sebuah
pointer tidak menunjukkan alamat memori mana pun atau disebut dengan NULL
(kosong).
Sebuah pointer kosong jika diakses nilai isinya maka akan memunculkan pesan
error pada saat eksekusi karena sebuah pointer kosong sebenarnya tidak memiliki isi
atau nilai untuk diproses. Sedangkan sebuah pointer disebut sebagai pointer yang
mengacu kesebuah alamat jika pointer itu menunjuk pada sebuah alamat di memori
yang dapat digunakan untuk menyimpan data.
Pointer yang belum ditunjukkan ke sebuah alamat memori yang sesungguhnya
atau logikanya ke kotak tempat menyimpan nilai data tidak dapat diproses karena
sebenarnya pointer tidak memiliki nilai tapi hanya menunjukkan nilai milik yang lain.
Oleh karena itu, saat nilai yang diacu pointer diubah nilainya maka sebenarnya nilai di
dalam kota atau alamat memori yang diaculah yang diubah nilainya. Pointer memiliki
keuntungan karena pointer dapat dialokasikan di memori secara dinamis dimana baru
dialokasikan ketika dibutuhkan, sebelum dialokasikan maka sebuah pointer merupakan
pointer kosong.
B. Deklarasi Pointer
Misalkan tipe data yang akan dialokasikan sebagai pointer adalah sebuah
elemen list maka deklarasinya dalam bahasa algoritmik adalah sebagai berikut:
elmt : elemen;
pada deklarasi di atas, pointer yang dideklarasikan masih merupakan pointer
kosong belum dialokasikan pada sebuah alamat di memori, untuk mengalokasikan
alamat sebuah elemen di memori harus dideklasarikan kode sebagai berikut:
allocMem(elmt)
//nilai a adalah 5
//*varA adalah variabel pointer
//&a adalah referensi atau alamat yang dimiliki oleh variabel a;
Tersedia array A (satu dimensi) yang dibuat dengan int A[11]. Belum ada
isinya dengan ilustrasi sebagai berikut:
0 1 2 3 4 5 6 7 8 9 10
b.
0 1 2 3 4 5 6 7 8 9 10
1 3 5 7 9 11
c.
0 1 2 3 4 5 6 7 8 9 10
0 1 3 6 10
KEGIATAN BELAJAR
4
Tujuan:
Setelah mempelajari materi ini diharapkan mahasiswa memliki kemampuan untuk:
1. Memahami tipe data bentukan Struct.
2. Mampu mengimplementasikan konsep Struct pada C++.
A. Pengertian Structure
Bentukan class merupakan generalisasi bentukan struct di C. Bentukan struct
mengizinkan anggota data public. Tidak terdapat access modifier seperti protected
atau pun private untuk mengendalikan akses anggota struct. Bentukan struct tidak
menyembunyikan informasi.
Bentukan class di C++ memungkinkan data dan fungsi anggota. Juga dapat
diberikan access modifier sedangkan bentukan struct berebda dengan bentukan class
hanya dalam spesifikasi pengaksesan yang default yatu public. Bentukan struct telah
jarang digunakan di C++ karena bentukan class dengan spesifikasi akses default
adalah private lebih baik dalam mendukung penyembunyian informasi.
Struct mirip seperti array, tapi struct bisa menampung lebih dari 1 jenis tipe
data. Struct dalam bahasa C++ sangat mirip seperti tipe data record di Pascal. Tipe
data struct cocok dipakai untuk menampung data berkelompok. Misalnya kita ingin
membuat biodata siswa, dimana setiap siswa memiliki data nama, nama sekolah
serta jumlah uang saku.
Menggunakan cara biasa, ketiga data bisa ditampung ke dalam 3 variabel berikut:
Tipe data struct adalah tipe data bentukan, dimana kita harus buat dulu seperti
apa isi komponen dari struct, baru kemudian diakses dari kode program utama.
#include <iostream>
using namespace std;
struct Siswa {
string nama;
string sekolah;
unsigned int uangSaku;
};
int main()
{
struct Siswa siswa01;
return 0;
}
Proses pembuatan tipe data struct ditulis sebelum main(), yang dalam contoh
ada di baris 5 – 9.
Setelah keyword struct, diikuti dengan nama identitas atau nama tipe data yang
kita inginkan. Dalam contoh ini saya membuat tipe data Siswa. Tentu saja anda bisa
menggunakan nama lain.
Sebuah struct terdiri dari berbagai variabel yang ditulis di antara tanda kurung
kurawal. Untuk tipe data struct Siswa, saya membuat variabel nama, sekolah dan
uangSaku. Setiap variabel tetap ditulis tipe data asalnya.
Perintah di baris 5 – 9 dipakai untuk membuat struktur dasar struct. Agar bisa
digunakan, kita harus membuat variabel baru dengan tipe data Siswa, yakni tipe data
bentukan dari struct.
siswa01.nama
siswa01.sekolah
siswa01.uangSaku
Tanda titik dipakai untuk mengakses sub struktur dari siswa01. Semua ini
sesuai dengan pendefinisian struct Siswa. Proses pengisian data ke dalam variabel
siswa01 dilakukan pada baris 15 – 17. Di bagian akhir kode program, saya
menampilkan ketiga data siswa01. Caranya sama seperti variabel biasa, hanya saja
sekarang kita menggunakan struct Siswa sehingga cara aksesnya adalah siswa01.nama,
siswa01.sekolah, dan siswa01.uangSaku.
Bagaimana jika ada 3 siswa? Tidak masalah, cukup buat variabel siswa01,
siswa02, dan siswa03 sebagai struct Siswa:
#include <iostream>
struct Siswa {
string nama;
string sekolah;
unsigned int uangSaku;
};
int main()
{
struct Siswa siswa01,siswa02, siswa03;
return 0;
}
Kode program di atas memang cukup panjang karena ada 3 data siswa yang
harus diisi.. Namun, ini hanya pengembangan dari kode program kita sebelumnya.
KEGIATAN BELAJAR
5-6
LINKED LIST
Tujuan:
Setelah mempelajari materi ini diharapkan mahasiswa memiliki kemampuan untuk:
1. Mendeskripsikan definisi List.
2. Memahami cara kerja Single Linked List.
3. Memahami cara kerja Double Linked List
Agar lebih mudah biasanya list direpresentasikan dengan teratur seperti gambar
di atas, namun pada kenyataannya struktur data list bisa tidak sesimpel itu.
Representasi dari sebuah list dapat seperti gambar berikut :
PILIHAN SOAL!
STACK
Tujuan:
Setelah mempelajari materi ini diharapkan mahasiswa memliki kemampuan untuk:
1. Mendeskripsikan pengertian Tumpukan (stack).
2. Operasi pada Tumpukan (stack).
3. Stack Representasi Statis
4. Stack Representasi Dinamis
Operasi Push
Operasi Push merupakan operasi menambahkan elemen baru pada sebuah stack.
Operasi Pop
Operasi Pop merupakan operasi yang mengambil sebuah elemen dari sebuah stack.
top
Karena semua operasi pada sebuah stack diawali dengan selemen yang paling
atas maka jika menggunakan representasi dinamis saat elemen ditambahkan akan
menggunakan penambahan elemen pada awal stack (addfirst) dan saat pengambilan
atau penghapusan elemen menggunakan penghapusan di awal stack (delfirst).
Tugas:
1. Buatlah stack yang memiliki isi elemen berupa angka integer, lalu buat
program utamanya beserta prosedur dan fungsi yang dibutuhkan.
KEGIATAN BELAJAR
9
QUEUE
Tujuan:
Setelah mempelajari materi ini diharapkan mahasiswa memliki kemampuan untuk:
1. Mendeskripsikan pengertian Antrian (queue).
2. Operasi pada Antrian (queue).
3. Antrian Representasi Statis
4. Antrian Representasi Dinamis
5. Antrian Berprioritas
A. Pengertian Antrian
Antrian atau queue adalah salah satu konsep struktur data yang memiliki
sistem kerja pertama masuk maka akan menjadi yang pertama keluar (FIFO = First In
First Out) seperti halnya antrian yang ada pada dunia nyata. Namun, hal ini tidak
berlaku pada antrian berprioritas, karena pada antrian berprioritas urutan keluar dari
sebuah antrian ditentukan dengan prioritas masing-masing elemen dalam antrian
untuk diproses terlebih dahulu. Adapun ilustrasi antrian dapat di lihat pada gambar 9.
Pada sebuah antrian elemen hanya dapat ditambahkan melalui sisi belakang
queue dan elemen hanya dapat diambil dari sisi bagian depan queue. Oleh karena itu,
ada dua buah penunjuk elemen pada sebuah queue yaitu belakang atau las sebagai
penunjuk elemen paling belakang dan depan atau first sebagai penunjuk elemen
bagian depan. Seperti halnya stact dan list, queue juga sebuah pemikiran struktur data
yagn dapat direpresentasikan secara statis dengan menggunakan array atau secara
dinamis dengan menggunakan pointer. Begitu juga dengan elemen sebuah queue juga
dapat diisi dengan data sesuai dengan kebutuhan.
last
E. Antrian Berprioritas
Antrian berprioritas atau priority queue mengeluarkan elemen dari queue
berdasarkan prioritas pada elemen tersebut. Oleh karena itu, elemen pada antrian
berprioritas harus menyimpan nilai prioritas pada setiap elemen. Untuk memasukkan
elemen pada sebuah antrian berprioritas tidak harus melalui sisi belakang antrian
tetap disisipkan dan diurutkan berdasarkan prioritas elemen, sedangkan mengeluarkan
elemen dari antrian berdasarkan prioritas elemen.
Hal yang perlu diperhatikan saat memasukkan elemen ke antrian berprioritas
adalah sebagai berikut:
1. Elemen yang memiliki prioritas lebih tinggi akan lebih dahulu keluar dari
queue.
2. Jika ada dua elemen yang memiliki prioritas sama maka yang akan keluar
terlebih dahulu dari antrian adalah yang terlebih dahulu masuk ke dalam
antrian.
Tugas:
KEGIATAN BELAJAR
10
SEARCHING
Tujuan:
Setelah mempelajari materi ini diharapkan mahasiswa memliki kemampuan untuk:
1. Memahami konsep-konsep pencarian yang telah dibakukan.
2. Menerapkan Pencarian dalam berbagai kasus sederhana
A. Pengertian Searching
Fungsi pencarian itu sendiri adalah memvalidasi (mencocokkan) data. Sebagai
contoh, untuk menghapus atau mengubah sebuah data di dalam sekumpulan nilai,
langkah pertama yang harus ditempuh adalah mencari data tersebut, lalu menghapus
atau mengubahnya. Ada sebuah kasus sederhana, misalkan terdapat 10 data yang
bertipe integer, terangkum di dalam variabel larik L. Terdapat data X di dalam larik L
tersebut. Bagaimana proses pencarian data X tersebut? Jika ketemu maka akan
mengeluarkan pesan teks “Data ditemukan !” atau jika tidak ditemukan akan
mengeluarkan pesan teks “Data tidak ditemukan”. Serta menampilkan di elemen ke
beberapa elemen tersebut ditemukan, dan berapa jumlah data X di larik L
Ada beberapa metode mencari data di dalam sekumpulan data yang bertipe sama y
aitu :
1. Metode Pencarian Beruntun (Sequential Search)
2. Metode Pencarian Bagi Dua (Binary Search)
Metode ini diterapkan pada sekumpulan data yang sudah terurut (menaik atau
menurun). Metode ini lebih cepat dibandingkan metode pencarian beruntun. Data yang
sudah terurut menjadi syarat mutlak untuk menggunakan metode ini. Konsep dasar
metode ini adalah membagi 2 jumlah elemennya, dan menentukan apakah data yang
berada pada elemen paling tengah bernilai sama, maka langsung data tengah dicari
ditemukan. Jika data di elemen terurut naik, maka jika data yang berada di tengah
kurang dari data yang dicari, maka pencarian selanjutnya berkisar di elemen tengah ke
kanan, dan begitu seterusnya sampai ketemu atau tidak sama sekali.Dan sebaliknya
untuk nilai data yang berada di tengah lebih dari data yang dicari, maka pencarian
selanjutnya berkisar di elemen tengah ke kiri, dan begitu seterusnya sampai ketemu atau
tidak sama sekali. Dan demikian sebaliknya untuk data yang terurut menurun. Dalam hal
ini tentukan indeks paling awal dan indeks paling akhir, untuk membagi 2 elemen
tersebut.
Indeks awal = i, dimana nilai i, pada awalnya bernilai 0;
Indeks akhir =j, dimana nilai j, pada awalnya bernilai sama dengan jumlah elem
en.
J=k
K=(i+j)div2
Dan seterusnya sampai nilai X dicari ketemu atu tidak sama sekali.
10) Jika data terurut menurun, maka tukar kondisi yang ada di nomor 8 dan 9.
Contoh :
Diberikan 10 data terurut L[10] = {12,14,15,17,23,25,45,67,68,70}.
Cari nilai X = 14di elemen tersebut.
Solusi :
1. Menentukan apakah data terurut menaik atau menurun.
L[0] = 12
L[9] = 70
Karena L[0] < L[9], maka data tersebut terurut menaik.
2. Misal indeks paling kiri adalah I = 0 dan indeks paling kanan adalah j = 9,
maka indeks tengahnya adalah :
K = (i+j) div 2
= (0+9) div 2
= 4.
Elemen tengah sekarang adalah 4 dengan L[4] = 23.
3. Karena data di indeks tengah lebih dari nilai data yang dicari (L[4]>X), maka
pencarian berikutnya dilakukan pada sisi kiri indeks k, maka nilai j sekarang
sama dengan k, lalu lakukan proses sama seperti nomor 2.
J = k
= 4
K = (i+j) div 2
= (0 +4) div 2
= 2
Elemen tengah sekarang adalah 2 dengan L[2] = 15.
4. Karena data di indeks tengah lebih dari nilai data yang dicari (L[2]>X), maka
pencarian berikutnya dilakukan pada sisi kiri indeks k, maka nilai j sekarang
sama dengan k, lalu lakukan proses sama seperti nomor 2.
J = k
= 2
K = (i+j) div 2
= (0 +2) dic 2
= 1
Elemen tengah sekarang adlah 1 dengan L[1} = 14
Karena nilai data di elemen tengah sama dengan nilai data yang dicari X, maka
pencarian berakhir. Data X ditemukan di indeks ke-1
KEGIATAN BELAJAR
11
SORTING
Tujuan:
Setelah mempelajari materi ini diharapkan mahasiswa memliki kemampuan untuk:
1. Memahami konsep pengurutan.
2. Menerapkan pengurutan dalam berbagai kasus sederhana
A. Pengertian Informasi
Pengurutan (sorting) adalah proses mengatur sekumpulan obyek menurut
urutan atau susunantertentu. Urutan tersebut dapat menaik (ascending) atau menurun (d
escending). Jika diberikann buah elemen disimpan di dalam larik L, maka :
Pengurutan menaik adalah L[0] < L[1] < L[2] < … < L[n-1]
Pengurutan menaik adalah L[0] > L[1] > L[2] > … > L[n-1]
Bermacam-macam metode yang dipakai untuk melakukan pengurutan, antara lain :
o Bubble Sort
o Selection Sort
o Insertion Sort
o Heap Sort
o Shell Sort
o Quick Sort
o Merge Sort
o Radix Sort
o Tree Sort
Pada bagian ini hanya akan dibahas mengenai tiga buah metode sederhana yang me
ndasar, yaitu :
1. Metode Pengurutan Gelembung (Bubble Sort)
2. Metode Pengurutan Pilih (Selection Sort)
3. Metode Quick Sort
4. Metode Merge Sort
B. Metode Pengurutan Gelembung
Metode ini diinspirasi oleh gelembung sabun yang berada di permukaan air.
Karena berat jenis gelembung sabun lebih ringan dibandingkan dengan berat jenis air,
sehingga gelembung sabun selalu terapung di permukaan air.Prinsip pengapungan
inilah yang diterapkan ke metode ini, dimana nilai yang paling rendah berada di posisi
paling atas, melalui proses pertukaran.
Konsep dasar dari metode ini adalah setiap data yang ada di kumpulan,
dibandingkan dengan data-data lainnya, artinya jika jumlah data sebanyak 5, maka akan
terjadi perbandingan sebanyak (5-1)2 = 16 kali.
Atau secara umum dapat ditarik rumus, untuk jumlah data sebanyak n buah,
maka :
Jumlah iterasi pembandingan = (n-1)2
Jika data-data tersebut disimpan di dalam larik L, maka :
1. Untuk pengurutan menaik, pembandingnya sebagai berikut :
L[n] < L{n-1]
2. Untuk pengurutan menurun, pembandingnya sebagai berikut :
L[n] > L[n-1]
Jika kondisi di atas terpenuhi, maka nilai data yang ada di indeks n-1 akan ditukar
dengan nilai data yang ada di indeks n.
Metode ini memiliki konsep memilih data yang maksimum/minimum dari suatu
kumpulan data larik L, lalu menempatkan data tersebut ke elemen paling akhir atau
paling awal sesuai pengurutan yang diinginkan. Data maksimum/minimum yang
diperoleh, diasingkan ke tempat lain, dan tidak diikutsertakan pada proses pencarian
data maksimum/minimum berikutnya. Perhatikan ilustrasi berikut :
Misalkan ada sekumpulan data acak berjumlah n elemen yang disimpan di
dalam larik L, akan diurut menaik, maka langkah-langkah yang harus dilakukan adalah:
1. Menentukan jumlah iterasi, yaitu pass = n-2
2. Untuk setiap pass ke-I = 0,1,2, … , pass, lakukan
a. Cari elemen terbesar (maks) dari elemen ke-i sampai ke-(n-1)
b. Pertukaran maks dengan elemen ke-i
c. Kurangin n sayu (n = n -1)
Rincian tiap-tiap pas adalah sebagai berikut :
- pass 0
Cari elemen maksimum di dalam L[0 … (n-1)
Pertukarkan elemen maksimum dengan elemen L[n-1]
- pass 1
Cari elemen maksimum di dalam L[0 .. (n-2)]
Pertukarkan elemen maksimum dengan elemen L[n-2]
- pass 2
Cari elemen maksimum di dalam L[0 .. (n-3)]
Pertukarkan elemen maksimum dengan elemen L[n-3]
- pass 3
Cari elemen maksimum di dalam L[0 .. 1]
Pertukarkan elemen maksimum dengan elemen L[1]1
Cari elemen maksimum di dalam L[0 .. (n-2)]
Pertukarkan elemen maksimum dengan elemen L[n-2]
KEGIATAN BELAJAR
12
REKURSIF FUNCTION
Tujuan:
Setelah mempelajari materi ini diharapkan mahasiswa memliki kemampuan untuk:
1. Memahami konsep rekursif
2. Mengimplementasikannya ke dalam bahasa C++.
A. Pengertian Rekursif
Method yang memanggil dirinya sendiri baik secara langsung maupun secara
tidak langsung. Fungsi yang memanggil dirinya, secara langsung atau lewat fungsi
lain, disebut fungsi rekursif. Proses pemanggilan diri itu disebut rekursi (recursion).
Rekursif sangat memudahkan untuk memecahkan permasalahan yang kompleks. Ciri
masalah yang dapat diselesaikan secara rekursif adalah masalah itu dapat di-reduksi
menjadi satu atau lebih masalah-masalah serupa yang lebih kecil.
Sifat-sifat rekursif
• Dapat digunakan ketika inti dari masalah terjadi berulang kali
• Sedikit lebih efisien dari iterasi tapi lebih elegan
• Method-methodnya dimungkinkan untuk memanggil dirinya sendiri
• Data yang berada dalam method tersebut seperti argument disimpan sementara
kedalam stack sampai method pemanggilnya diselesaikan
Secara umum, algoritma rekursif selalu mengandung dua macam kasus:
• kasus induksi: satu atau lebih kasus yang pemecahan masalahnya dilakukan
dengan menyelesaikan masalah serupa yang lebih sederhana (yaitu
menggunakan recursive calls)
• kasus dasar atau kasus penyetop (base case): satu atau lebih kasus yang sudah
sederhana sehingga pemecahan masalahnya tidak perlu lagi menggunakan
recursive-calls
Supaya tidak terjadi rekursi yang tak terhingga, setiap langkah rekursif haruslah
mengarah ke kasus penyetop (base case).
• Punya kasus dasar
Kasus yang sangat sederhana yang dapat memproses input tanpa perlu
melakukan rekursif(memanggil method) lagi
o Rekursif mengarah ke kasus dasar
• Pada proses pemanggilan rekursif, asumsikan bahwa pemanggilan rekursif(untuk
problem yang lebih kecil) adalah benar.
Method rekursif adalah method yang memanggil dirinya sendiri baik secara langsung maupun
secara tidak langsung.
C. Aturan Rekursif
• Definisikan base case: yang dapat memproses input tanpa perlu recursive lagi
• Pada bagian rekursif pastikan akan bergerak menuju base case.
• Asumsikan bahwa pemanggilan rekursif terhadap sub problem berjalan benar.
• Hindari duplikasi proses untuk nilai input yang sama dalam recursive call yang
terpisah.
• Bila memungkinkan lakukan tail recursive.
TREE
Tujuan:
Setelah mempelajari materi ini diharapkan mahasiswa memliki kemampuan untuk:
1. Mendeskripsikan pengertian struktur data tree.
2. Memahami konsep dasar Binary Tree.
Ketua Umum
Pada gambar 11 di atas sebuah kotak dianggap sebagai simpul (node atau
vertex) sedangkan simpul yang paling atas yang berisi ”Ketua Umum” dianggap
sebagai akar (root). Bagian simpul ”Wakil Ketua 1” ke bawah disebut sebagai
subpohon (subtree) begitu juga dengan simpul ”Wakil Ketua 2” ke bawah. Sebuah
subpohon juga memiliki akarnya masing-masing tergantung darimana suatu subpohon
dimulai.
Sebuah struktur pohon juga memiliki apa yang disebut dengan tingkat atau
level, Tingkat dimulai dari akar yang dianggap sebagai tingkat 1 dan simpul-simpul
di bawahnya mempunyai tingkat ditambah dengan satu. Namun, ada beberapa
pendapat yang menganggap akar sebagai tingkat 0.
Selain istilah tingkat juga ada yang disebut dengan derajat (degree). Derajat
merupakan banyaknya simpul turunan dari suatu simpul tertentu, misalkan simpul
”Ketua Umum: memiliki derajat 3, simpul ”Wakil Ketua I” memiliki derajat 2, dan
seterusnya. Semua simpul yang memiliki derajat 0 disebut dengan daun (leaf). Pada
struktur data pohon juga dikenal istilah yang disebut kedalaman (depth) yang
merupakan hasil dari tingkat simpul maksimum dikurangi dengan satu sehingga pada
pohon contoh di atas memiliki kedalaman 3 sedangkan sebuah simpul yang ada di
atas sebuah simpul lain disebut sebagai ancestor. Kumpulan pohon disebut dengan
hutan (forest)
B. Pohon Biner
Pohon biner atau binary tree adalah pohon yang setiap simpulnya memiliki
simple turunan atau subpohon maksimal dua yang disebut sebagai subpohon kiri (left
subtree) dan subpohon kanan (right subtree).
Penelusuran preOrder
Kunjungan preorder merupakan kunjngan pada pohon biner yang dimulai dari akar
kemudian ke subpohon kiri, setelah subpohon kiri dikunjungi baru subpohon kanan
dikunjungi, misalkan terdapat sebuah pohon biner seperti gambar 12.
A
B C
B B B B
Penelusuran InOrder
Kunjungan inorder merupakan kunjungan pada pohon biner yang dimulai dari
simpul-simpul turunan subpohon kiri, akar, baru kemudian simpul-simpul turunan
pada subpohon kanan.
Penelurusan PostOrder
Kunjungan postorder merupakan kunjungan pada pohon biner yang dimulai dari
simpul-simpul turunan subpohon kiri, baru kemudian simpul-simpul turunan pada
subpohon kanan, kemudian akar.
Jika diimplementasikan sebagai pohon, simpul-simpul itu akan menjadi seperti pada
gambar 14.
root
B C
NULL
D E F
Tujuan:
Setelah mempelajari materi ini diharapkan mahasiswa memliki kemampuan untuk:
1. Mendeskripsikan pengertian Graph.
2. Memahami implementasi Graph.
3. Graph Representasi Statis
4. Graph Representasi Dinamis
A. Pengertian Graph
Graph adalah sebuah konsep struktur data yang terdiri dari kumpulan simpul
(node) dan garis (arc). Sebuah garis harus diawali dan diakhiri dengan sebuah simpul.
Ilustrasi sebuah graph dapat dilihat pada gambar 15.
B e
a
c E
A j
D g
G
b h
d i
C f F
Karena sebuah garis diawali dan diakhir sebuah simpul maka sebuah garis
misalnya untuk garis a dinyatakan dengan a = [A,B] di mana diartikan bahwa garis a
diawali dengan simpul A dan diakhir dengan simpul B sedangkan simpul yang
terhubung dengan sebuah garis disebut dengan simpul tetangga sehingga dapat
dikatakan simpul A bertetangga dengan simpul B.
Pada sebuah graph juga terdapat istilah yang disebut dengan jalur (path)
dimana jalur adalah kumpulan garis dan simpul yang berawal dari suatu simpul
menuju simpul tertentu, misalnya P adalah sebuah jalur dari simpul A ke simpul G
maka dapat dinyatakan bahwa P = (A,B,E,G). Sebuah jalur yang memiliki simpul
akhir sama dengan simpul awal disebut dengan jalur tertutup ( closed path) sedangkan
jalur yang terbentuk dari simpul-simpul yang berbeda disebut dengan jalur sederhana
(simple path) seperti halnya jalur dari simpul A ke simpul G.
B. Implementasi Graph
Matriks Tetangga
Matrik tetangga (adjacent matrix) merupakan salah satu cara untuk
merepresentasikan graph berarah dengan menggunakan array. Berikut adalah
representasi graph pada gambar 16 dengan menggunakan matrik tetangga berikut:
Simpul tujuan
A B C D E F
A 0 1 0 0 0 0
B 0 0 0 1 1 0
C 1 0 0 0 0 0
Simpul
awal D 1 0 1 0 0 0
E 0 0 0 1 0 1
F 0 0 0 1 0 0
Dimana angka 1 (satu) menyatakan bahwa simpul awal memiliki jalur ke simpul
tujuan, dan angka 0 (nol) menyatakan bahwa simpul awal tidak memiliki jalur ke
simpul tujuan. Dari representasi di atas dapat dilihat bahwa simpul-simpul yang
memiliki jalur adalah sebagai berikut:
Simpul A memiliki jalur dan bertetangga dengan simpul B
Simpul B memiliki jalur dan bertetangga dengan simpul D dan E
Simpul C memiliki jalur dan bertetangga dengan simpul A
Simpul D memiliki jalur dan bertetangga dengan simpul A dan C
Simpul E memiliki jalur dan bertetangga dengan simpul D dan F
Simpul F memiliki jalur dan bertetangga dengan simpul D
Matriks Jalur
Matrik jalur merupakan salah satu cara untuk merepresentasikan graph berarah
dengan menggunakan array. Berikut adalah representasi graph pada gambar 17.
dengan menggunakan matrik jalur berikut:
Simpul tujuan
A B C D E F
A 1 1 1 1 1 1
B 1 1 1 1 1 1
C 1 1 1 1 1 1
Simpul
awal
D 1 1 1 1 1 1
E 1 1 1 1 1 1
F 1 1 1 1 1 1
SOAL PILIHAN!
1. Buatlah graph yang memiliki isi elemen berupa data tempat kuliner, lalu buat
program utamanya beserta prosedur dan fungsi yang dibutuhkan, buat simulasi
ketika ada tempat kuliner baru yang masuk ke dalam graph jalur perjalanan
kuliner.
2. Buatlah graph yang memiliki isi elemen berupa tempat-tempat penting di
suatu kota (misalnya : kantor polisi, rumah sakit, atm dan lain sebagainya),
lalu buat fungsi dan prosedur yang dibutuhkan untuk membuat program
simulasi jalur tempat-tempat penting ini.
3. Buatlah graph dan hitunglah ada berapa simpul yang saling terhubung secara
langsung dan secara tidak langsung.
DAFTAR PUSTAKA