0% menganggap dokumen ini bermanfaat (0 suara)
162 tayangan44 halaman

Modul Struktur Data

Lembar pengesahan modul Struktur Data mencantumkan koordinator, dosen penanggung jawab, dan tim pengajar mata kuliah Struktur Data pada Program Studi Sistem Informasi/Sistem Komputer STMIK Royal Kisaran. Modul ini membahas tentang pengertian, tujuan, dan contoh-contoh permasalahan yang memerlukan penggunaan struktur data dalam pemrograman.

Diunggah oleh

arsyandadinda
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai DOCX, PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
162 tayangan44 halaman

Modul Struktur Data

Lembar pengesahan modul Struktur Data mencantumkan koordinator, dosen penanggung jawab, dan tim pengajar mata kuliah Struktur Data pada Program Studi Sistem Informasi/Sistem Komputer STMIK Royal Kisaran. Modul ini membahas tentang pengertian, tujuan, dan contoh-contoh permasalahan yang memerlukan penggunaan struktur data dalam pemrograman.

Diunggah oleh

arsyandadinda
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai DOCX, PDF, TXT atau baca online di Scribd
Anda di halaman 1/ 44

LEMBAR PENGESAHAN

Modul (STRUKTUR DATA)

Koordinator : Muhammad Iqbal, M.Kom


Dosen Penanggungjawab : Muhammad Iqbal, M.Kom
Tim Pengajar : 1. Guntur Maha Putra, M.Kom
2. Arridha Zikra Syah, M.Kom
3. Parini, M.Kom

Kisaran, Agustus 2021

Penyusun Menyetujui
Ketua Program Studi
Sistem Informasi

Muhammad Iqbal, M.Kom William Ramdhan, M.Kom


NIDN. 0117109101 NIDN. 0130048702

Mengetahui
Wakil Ketua 1 Bidang Akademik

Rizky Fauziah, M.IKom., M.Kom.


NIDN. 0112039501
MODUL MATA KULIAH
PROGRAM STUDI SISTEM INFORMASI/SISTEM
KOMPUTER
SEKOLAH TINGGI MANAJEMEN INFORMATIKA DAN
KOMPUTER (STMIK) ROYAL KISARAN

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.

B. Tujuan Pembelajaran Struktur Data


Struktur data bertujuan agar cara merepresentasikan data dalam membuat
program dapat dilakukan secara efisien dalam pengolahan di memori dan pengolahan
penyimpanan dari program ke storage juga lebih mudah dilakukan. Struktur data juga
meliputi larik (array) dan record (rekaman) pada berkas beruntun (sequential file)
yang dipelajari dalam algoritma dan pemrograman, yang sebenarnya juga merupakan
bagian dari struktur data untuk penyimpanan data di memori sebagai larik atau di
dalam file sebagai record. Penyimpanan record di dalam file adalah cikal bakal
adanya aplikasi basis data, karena sebenarnya aplikasi basis data berbasis pada
konsep penyimpanan record di dalam file.

C. Contoh-contoh Permasalahan yang memerlukan Struktur Data


Struktur data perlu untuk dipelajari untuk membuat program komputer dengan
contoh spesifikasi sebagai berikut:
1. Program yang memproses banyak data dengan jumlah yang dapat berubah-ubah
sehingga penyimpanan di memori tidak dapat menggunakan larik atau array yang
bersifat statis, maka dapat dipilih menggunakan struktur data list dengan
representasi dinamis. List dapat digunakan untuk berbagai kebutuhan seperti
halnya array dua dimensi, tiga dimensi dan seterusnya. Berikut adalah contoh
ilustrasi struktur data list.
2. Program yang memproses tentang antrean (queue), seperti misalnya antrean
perparkiran, antrean pelanggan restoran, dan lain sebagainya.
3. Program yang memproses segala kemungkinan pilihan seperti misalnya membuat
bot game atau sistem pendukung keputusan yang menggunakan struktur data pohon
(tree). struktur data pohon (tree) ini banyak digunakan dalam pembuatan program
game di industri game.
4. Program yang memproses jalur-jalur peta atau denah yang menggunakan struktur
data graf. Misalnya, program yang memproses jalan terpendek (short path) atau
untuk menyelesaikan permasalahan jalan pak pos (postman traveling problem) agar
dapat memilih rute perjalanan yang tidak mengunjungi kota yang sama dua kali
dalam mengantar surat.

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.

B. Array Satu Dimensi

Bentuk umum :
tipe_array nama_array [jumlah data]

Ilustrasi array satu dimensi

Array di atas mempunyai enam element.

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]

Ilustrasi array multidimensi

Array di atas mempunyai delapan belas element.


1: #include <stdio.h>
2:
3: void main()
4: {
5: int a[3][3] = {{10,20,30},{40,50,60},{70,80,90}};
6: int i,j;
7:
8: for(i=0;i<3;i++)
9: {
10: for(j=0;j<3;j++)
11: {
12: printf(“%d ”,a[i][j]);
13: }
14: printf(“\n”);
15: }
16: }

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)

Adapun bentuk sederhananya pada pemrograman C++ dapat menggunakan


sintak berikut ini:
#include <iostream>
using namespace std;
int main()
{
int a = 5;
*varA = &a;
cout << “nilai a = “ << a << endl;
cout << “alamat variabel a = “ << varA << endl;
*varA = 10;
cout << “Ubah nilai variabel a << varA;
}

//nilai a adalah 5
//*varA adalah variabel pointer
//&a adalah referensi atau alamat yang dimiliki oleh variabel a;

Pada bahasa pemrograman Pascal, C, dan C++ penghapusan sebuah alamat


memori yang sudah tidak dibutuhkan lagi sangat perlu dilakukan karena bahasa
pemrograman tersebut tidak ada mekanisme menghapus alokasi memori sehingga jika
tidak dihapus maka akan banyak alokasi memori yang sebenarnya sudah tidak dipakai
lagi, tapi tidak dapat digunakan lagi. Apabila sebuah compiler dilengkapi dengan
garbage collector (penghapus alokasi memori jika sudah tidak digunakan maka
penghapusan alokasi tidak dibutuhkan lagi (seperti halnya pada bahasa pemrograman
Java).

Deklarasi penghapusan alamat di memori dengan bahasa algoritmik adalah


sebagai berikut:
delAllocMem(elmt)
Tugas:

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

Susun program (pengalaman program) untuk mengisi array tersebut dengan


menggunakan Pointer sehingga isinya menjadi sebagai gambar berikut:
a.
0 1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6

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

TIPE DATA STRUCT

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:

string nama_siswa01 = "Andi Permana Nugroho";


string nama_sekolah_siswa01 = "SMA 1 Lumut Ijo";
unsigned int uang_saku_siswa01 = 10000;

Untuk siswa kedua, tinggal membuat penamaan yang sama, yakni


nama_siswa02, nama_sekolah_siswa02 dan uang_saku_siswa02.
Cara ini tidak salah, namun setiap variabel seolah-olah terpisah satu sama lain.
Satu-satunya yang menghubungkan ketiga variabel hanya dari penamaan saja. Kita
tidak bisa menggunakan array karena 3 data di atas memiliki tipe data yang berbeda.
Dalam kasus seperti inilah tipe data struct cocok digunakan.

C. Cara Implementasi Tipe data Struct

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.

Kita akan bahas dengan contoh kode program berikut ini:

#include <iostream>
using namespace std;

struct Siswa {
string nama;
string sekolah;
unsigned int uangSaku;
};

int main()
{
struct Siswa siswa01;

siswa01.nama = "Andi Permana Nugroho";


siswa01.sekolah = "SMA 1 Lumut Ijo";
siswa01.uangSaku = 10000;

cout << siswa01.nama <<" bersekolah di " << siswa01.sekolah <<


endl;
cout << "dengan uang saku " << siswa01.uangSaku << " per hari"
<< endl;

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.

Masuk kode kode program utama (main), saya mendefinisikan variabel


siswa01 sebagai struct Siswa di baris 13. Sekarang, variabel siswa01 adalah tipe data
bentukan yang terdiri dari 3 element, yakni:

 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>

using namespace std;

struct Siswa {
string nama;
string sekolah;
unsigned int uangSaku;
};

int main()
{
struct Siswa siswa01,siswa02, siswa03;

siswa01.nama = "Andi Permana";


siswa01.sekolah = "SMA 1 Lumut Ijo";
siswa01.uangSaku = 10000;

siswa02.nama = "Lisa Permata Sari";


siswa02.sekolah = "SMA 1 Biru Langit";
siswa02.uangSaku = 30000;

siswa03.nama = "Jessica Stephany";


siswa03.sekolah = "SMA 1 Merah Jambu";
siswa03.uangSaku = 75000;

cout << siswa01.nama <<" bersekolah di " << siswa01.sekolah;


cout << " dengan uang saku " << siswa01.uangSaku << " per hari" <<
endl;

cout << siswa02.nama <<" bersekolah di " << siswa02.sekolah;


cout << " dengan uang saku " << siswa02.uangSaku << " per hari" <<
endl;

cout << siswa03.nama <<" bersekolah di " << siswa03.sekolah;


cout << " dengan uang saku " << siswa03.uangSaku << " per hari" <<
endl;

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

A. Pengantar Senarai ( Linked List )


List atau senarai adalah sebuah pemikiran / konsep struktur data yang sangat
dasar pada pemrograman agar lebih fleksibel, dimana setiap elemen akan
ditambahkan saat dibutuhkan, tidak dialokasikan dengan tempat tertentu dari awal.
List merupakan kumpulan elemen dengan struktur tertentu. Struktur dasar dari list
dapat dilihat pada gambar berikut yang merupakan list dengan tiga buah elemen.

Gambar 1. Senarai dengan tiga buah elemen

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 :

Gambar 2. Representasi lain senarai dengan tiga elemen


Namun, tidak perlu dipikirkan kerumitan pada sebuah list. Sebaiknya, dipikirkan
list dengan representasi yang lebih simpel dimana pada intinya sebuah list akan terdiri
dari penunjuk elemen pertama yang disebut dengan kepala atau first serta beberapa
elemen atau bahkan tanpa elemen yang biasa disebut sebagai list kosong. List dapat
digambarkan dalam logika pemikiran manusia dapat dianalogikan sebagai
sekumpulan kantong/bungkusan yang saling terkait satu dengan lainnya atau bisa juga
dianalogikan sebagai kumpulan gerbang kereta.
Secara logika kepala atau first adalah pengait awal dari sebuah list. Sedangkan
elemen bisa dianalogikan sebagai kantong atau bungkusan yang memiliki pengait
yang berfungsi untuk mengait pada bungkusan atau kantong berikutnya. Dapat
dilogikakan, jika tidak ada pengait ini maka bungkusan berikutnya akan terjatuh ke
tanah sehingga antar kantong/bungkusan tidak saling terkait. Elemen list memiliki
bagian berupa kontainer (wadah) dan pengait (next) seperti dapat dilihat pada gambar
berikut.

Gambar 3. Struktur Elemen List

B. Senarai (list) Kosong


List kosong hanya terdiri dari sebuah penunjuk elemen yang berisi NULL
(kosong). List kosong tidak memiliki satu buah elemen pun sehingga hanya berupa
penunjuk awal elemen yang berisi NULL (kosong) yang diilustrasikan pada gambar
di bawah ini :

Gambar 4. List Kosong


C. Senarai (List) Tunggal
List tunggal adalah sebuah list yang elemennya hanya menyimpan informasi
elemen setelahnya (next) (hanya memiliki pengait ke elemen berikutnya, 1 pengait)
sehingga jalannya pengaksesan list hanya dapat dilakukan secara satu arah ke depan
saja atau mau (karena tidak ada penunjuk atau pengait ke elemen
(kantong/bungkusan) sebelumnya maka hanya dapat mengakses elemen berikutnya).
List tunggal memiliki beberapa jenis list seperti list tunggal dengan kepala ( first) dan
list tunggal berputar.
Representasi list tunggal dengan Kepala dapat dilihat pada gambar 5. list
tunggal dengan kepala, pada awal pengaksesan hanya dapat diakses elemen
pertamanya saja karena penunjuk hanya berupa elemen awal (first).

Gambar 5. Senarai tunggal dengan kepala (first)

Sedangkan representasi list tunggal berputar dapat dilihat pada gambar 6.

Gambar 6. Senarai tunggal berputar

Operasi-operasi pada List tunggal


List merupakan struktur data yang terstruktur sehingga operasi-operasi yang
dikenakan di dalamnya tidak dapat dilakukan sembarangan. Operasi-operasi yang
dapat dilakukan pada list adalah penambahan elemen dan penghapusan elemen.
Misalkan pada penghapusan elemen, jika langkah yang dilakukan salah maka
keterkaitan elemen dalam list dapat terputus.
Penambahan Elemen di Awal List Tunggal
Proses penambahan elemen di awal list atau sering disebut dengan AddFirst
adalah menambahkan elemen pada posisi paling depan dari list. Dalam penambahan
ini terdapat dua kondisi yang harus ditangani yaitu jika list kosong maka elemen baru
langsung saja dimasukkan sebagai elemen pertama list namun jika list telah memiliki
elemen maka yang perlu diperhatikan adalah urutan memasukkan elemen baru
sebagai elemen pertama agar elemen-elemen yang lain tetap tersambung di dalam list
tidak terpisah.

Penambahan Elemen setelah Elemen Lain di dalam List Tunggal


Proses penambahan elemen setelah elemen lain di dalam list atau AddAfter
dilakukan dengan acuan pointer pada elemen sebelumnya yang pada subbab ini
diberikan nama prev dari previous atau sebelumnya. Dalam proses ini ada dua kondisi
yang perlu diperhatikan yaitu jika setelah elemen prev ada elemen yang berarti bawah
elemen prev ada di tengah list dan jika tidak ada elemen lagi setelah elemen prev
yang berarti bahwa elemen prev adalah elem terakhir dari list.

Penambahan Elemen di Akhir List Tunggal


Proses penambahan elemen di akhir list atau sering disebut dengan AddLast
adalah proses menambahkan elemen baru menjadi elemen terakhir dari list. Hal
terpenting dari proses ini adalah mencari elemen terakhir dari list untuk menjadi
elemen sebelumnya (prev/previous) dan disambungkan dengan elemen baru. Terdapat
dua kondisi yang perlu diperhatikan pada proses ini yaitu jika list kosong maka
elemen baru akan menjadi elemen pertama atau dapat juga dengan mengakses
AddFirst dan jika list tidak kosong maka dapat mengakses AddAfter dimana prev
adalah elemen terakhir dari list.

Penghapusan Elemen di Awal List Tunggal


Proses penghapusan elemen di awal list sering disebut dengan DelFirst. Dalam
penghapusan elemen di awal ini ada dua kondisi yang perlu ditangani, yaitu jika list
hanya terdiri dari satu elemen yang artinya jika elemen dihapus maka list akan
menjadi list kosong, kondisi kedua adala jika lis memliki lebih dari satu elemen maka
yang perlu diperhatikan adalah tahapan penghapusan agar elemen seteleh elemen
awal tidak terputus dari list.

Penghapusan Elemen setelah Elemen Lain di dalam List Tunggal


Proses penghapusan elemen setelah elemen lain di dalam list sering disebut
dengan proses DelAfter. Elemen yang dihapus adalah elemen setelah elemen lain
yang ditunjuk oleh pointer prev sebagai elemen sebelum elemen yang dihapus. Dalam
penghapusan ini ada dua kondisi yang perlu diperhatikan yaitu jika yang dihapus
adalah elemen terakhir dan jika yang dihapus adalah elemen di tengah list. Jika yang
dihapus adalah elemen terakhir maka elemen sebelumnya adalah elemen sebelum
elemen terakhir.

Penghapusan Elemen di Akhir List Tunggal


Proses penghapusan elemen terakhir pada list sering disebut dengan DelLast.
Ada dua kondisi yang perlu diperhatikan dari proses penghapusan elemen akhir ini
yaitu proses penghapusan elemen jika list hanya terdiri dari satu elemen (seperti
halnya salah satu kondisi di DelFirst) dan jika list terdiri dari banyak elemen
sehingga yang dihapus adalah elemen terakhir dari list (sepert halnya salah satu
kondisi di DelAfter).

List Tunggal Representasi Statis


List dapat direpresentasikan secara statis (sudah diaolkasikan dengan batasan
banyak elemen yang dapat dibuat). List dengan repseentasi statsi biasanya
diimplementasikan dengan menggunakan array (larik). Araay dianggap merupakan
representasi statis karena jumlah elemen yang ada pada sebuah array ketika
dialokasikan tidak dapat ditambah secara dinamis, shingga pada saat semua elemen
array digunakan sebagai element list maka elemen list di anggap tidak dapat ditambah
lagi.

D. Senarai (List) Ganda


List ganda memiliki perbedaan dengan list tunggal dari pointer atau penunjuk
yang ada pada elemennya. List ganda juga memiliki pointer tail yang ada di bagian
belakang list mengacu pada elemen terakhir dari list sehingga list ganda dapta diakses
dari depan (melalui first) dan diakses dari belakang (melalui tail). Elemen list ganda
dapat dilihat pada gambar 35. Elemen list ganda memiliki dua buah pointer/penunjuk
yaitu prev sebagai penunjuk elemen sebelumnya dan next sebagai penunjuk elemen
selanjutnya.

Penunjuk ke elemen Penunjuk ke elemen


sebelumnya berikutnya

Gambar 7. Elemen List Ganda


KEGIATAN BELAJAR
7

UJIAN TENGAH SEMESTER

PILIHAN SOAL!

1. Buatlah program untuk mengurutkan isi elemen list mahasiswa berdasarkan


nilai.
2. Buatlah list dengan representasi dinamis atau statis yang memiliki isi elemen
berupa integer. Buatlah prosedur memasukkan elemen ke dalam list dengan
mekanisme mengurutkan nilai isi elemen (mencari tempat yang tepat untuk
nilai elemen baru) beserta operasi yang dibutuhkan.
KEGIATAN BELAJAR
8

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

A. Pengertian Tumpukan (Stack)


Tumpukan atau stackadalah salah satu konsep struktur data yang memiliki
sistem kerja yang terkahir masuk adalah yang pertama keluar (LIFO = Last in First
Out). Seperti halnya jika kita mempunyai sebuah tumpukan buku, agar tumpukan buku
itu tidak ambruk ketika kita mengambil sebuah buku di dalam tumpukan itu maka harus
diambil satu per satu dari buku yang paling atas dari tumpukan. Sebuah stact hanya
dapat ditambahkan dan dikurangi elemennya hanya dari sebuah sisi. Elemen paling atas
dari sisi tersebut disebut dengan elemen atas atau top of stack. Semua operasi pada
sebuah stack diawali dari elemen atau diawali dari elemen atas. Jika ingin menambah
elemen stack maka penunjuk elemen atas diganti menjadi elemen yang ditambahkan
pada bagian atas stack. Seperti halnya list, sebuah stack adalah sebuah representasi
pemikiran struktur data, dalam implementasinya dapat digunakan representasi statis
dengan menggunakan array atau representasi dinamis menggunakan pointer. Elemen
pada stack juga dapat diisi dengan data sesuai dengan kebutuhan seperti pada list.

B. Operasi pada Tumpukan (Stack)

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.

C. Stack Representasi Statis


Stack dengan representasi statis biasanya diimplementasinya dengan
menggunakan array. Sebuah array memiliki tempat yang dialokasikan di awal
sehingga sebuah elemen yang dimasukkan dalam sebuah array terbatas pada tempat
yang ada pada array. Karena menggunakan array maka stack dengan representasi
statis dapat mengalami kondisi elemen penuh.

D. Stack Representasi Dinamis


Stack dengan representasi dinamis biasanya diimplementasikan dengan
menggunakan pointer yang menunjuk pada elemen-elemen yang dialokasikan pada
memori. Ilustrasi sebuah stack dengan representasi dinamis dapat dilihat pada gambar
8.

top

Gambar 8. Representasi Tumpukan Dinamis

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.

Gambar 9. Representasi Antrian

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.

B. Operasi pada Antrian (queue)


Operasi yang dapat dilakukan pada antrian atau queue adalah memasukkan
elemen dari sisi bagian belakang queue dan mengeluarkan elemen dari sisi depan
queue.

C. Antrian Representasi Statis


Queue dengan representasi statis biasanya diimplementasinya dengan
menggunakan array. Sebuah array memiliki tempat yang dialokasikan di awal
sehingga sebuah elemen yang dimasukkan dalam sebuah array terbatas pada tempat
yang ada pada array. Karena menggunakan array maka queue dengan representasi
statis dapat mengalami kondisi elemen penuh.
Menggunakan array yang tidak dapat diubah struktunya secara dinamis maka
operasi mengeluarkan elemen dari queue dengan representasi statis perlu penanganan
secara khusus yaitu menggeser semua elemen ke depan begitu ada elemen yang
dikeluarkan dari queue.

D. Antrian Representasi Dinamis


Queue dengan representasi dinamis biasanya diimplementasikan dengan
menggunakan pointer yang menunjuk pada elemen-elemen yang dialokasikan peda
memori. Ilustrasi sebuah queue dengan representasi dinamis dapat dilihat pada
gambar 10.

last

Gambar 10. Representasi Antrian Dinamis


Karena semua operasi penambahan elemen pada sebuah queue ditambahkan
pada akhir queue maka jika menggunakan representasi elemen ditambahkan
menggunakan penambahan elemen pada akhir queue (addlast) dan saat pengambilan
atau penghapusan elemen menggunakan penghapusan di awal queue (delfirst).

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)

B. Metode Pencarian Beruntun


Konsep yang digunakan dalam metode ini adalah membandingkan data-data
yang ada dalam kumpulan tersebut, mulai dari elemen pertama sampai elemen
ditemukan, atau sampai elemen terakhir. Perhatikan alur di bawah ini :
Data yang akan dicari adalah X, misal X = 10, maka elemen yang diperiksa
adalah elemen yang bernilai 10.

C. Metode Pencarian Bagi Dua (Binary Search Tree)

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.

Langkah-langkah untuk metode pencarian bagi dua :


1) Asumsikan data terurut secara horizontal dari indeks 0 sampai n-1, untuk
menggunakan istilah kanan dan kiri.
2) Misalkan kumpulan data yang berjumlah n adalah larik L, dan data yang
akan dicari adalah X.
3) Tentukan nilai indeks awal i=0 dan indeks akhir j = n-1.
4) Tentukan apakah data terurut menurun atau menaik dengan menggunakan
membandingkan apakah elemen paling kiri L[0] lebih dari atau kurang dari
elemen paling kanan L [n-1].
 Jika data di elemen paling kiri L[0] > data di elemen paling kanan L[n-1],
maka data terurut menurun.
 Jika data elemen paling kiri L[0] < data di elemen paling kanan L[n-1],
maka data terurut menaik.
5) Asumsikan bahwa data terurut menaik (tergantung hasil nomor 3).
6) Misalkan variabel k adalah indeks paling tengah, diperoleh dengan rumus :
K = (I + j) div 2
7) Periksa, jika L[k] = x, maka data dicari langsung ketemu di elemen k.
8) Jika nomor 7 tidak terpenuhi, periksa jika L[k]<X, maka pencarian berikutnya
dilakukan di sisi kanan indeks k, lakukan proses seperti pada nomor 6, dimana
nilai indeks I sekarang sama dengan nilai indeks sebelumnya.
I=k
K=(i+j)div2
Dan seterusnya sampai nilai X dicari ketemu atau tidak sama sekali.
9) Jika nomor 8 tidak terpenuhi, maka tidak pasti nilai L[k]>X, maka pencarian
berikutnya dilakukan di sisi kiri indeks k, lakukan proses seperti pada nomor 6,
dimana nilai indeks j sekarang sama dengan nilai indeks k sebelumnya.

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.

Contoh pangkat Rekursif (x,n)


• Asumsikan : pangkat Rekursif(x,n-1) menghasilkan nilai yang benar.
• Nilai tersebut harus diapakan sehingga menghasilkan nilai pangkat Rekursif
(x,n) yang benar?
Jawabannya : dikalikan dengan x
Aturan penggabungan :
• hindari duplikasi pemanggilan rekursif untuk sub problem yang sama.

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.

int factorial( int x){


if(x==1)
return(1);
else
return(x*factorial(x-1));
}
KEGIATAN BELAJAR
13

TREE

Tujuan:
Setelah mempelajari materi ini diharapkan mahasiswa memliki kemampuan untuk:
1. Mendeskripsikan pengertian struktur data tree.
2. Memahami konsep dasar Binary Tree.

A. Pengertian Struktur Data Tree


Pohon atau tree adalah salah satu bentuk konsep struktur data yang terdiri dari
akar dan simpul-simpul yang berada di bawah akar. Dalam kehidupan nyata biasanya
sebuah struktur data pohon digunakan untuk menggambarkan struktur suatu
organisasi atau struktur silsilah sebuah keluarga. Ilustrasi struktur data phon sebagai
gambaran struktur suatu organisasi dapat dilihat pada gambar 11.

Ketua Umum

Wakil Ketua I Wakil Ketua II

Kepala Divisi Kepala Divisi Wakil


KepalaKetua
DivisiI Kepala Divisi
Keuangan Kekeluargaan Produksi Pemasaran

Bendahara II Bendahara I Staf Administrasi Pengembang Staf Pemasaran

Gambar 11. Contoh penggunaan pohon

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).

C. Operasi pada Pohon Biner


Operasi yang dapat dilakukan pada pohon biner antara lain kunjungannya
terhadap simpul-simpulnya. Jenis-jenis kunjungan pada pohon biner antara lain
preOrder, inOrder, postOrder, dan levelOrder.

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

Gambar 12. Contoh Pohon Biner


Maka dengan kunjungan preorder akan menghasilkan urutan simpul yang dikunjungi
A – B – D – E – C – F – G – H. Kunjungan preorder dapat diimplementasikan secara
rekursif maupun tidak menggunakan cara rekursif.

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.

Penelusuran Level Order


Kunjungan levelorder merupakan kunjungan pada pohon biner yang dimulai
dari simpul pada tingkat 1 kemudian simpul-simpul pada tingkat 2 dan seterusnya
dimulai dari simpul paling kiri ke kanan.

Menyalin dan Membandingkan Pohon Biner


Menyalin pohon biner ke pohon biner lainnya dapat dilakukan dengan
menggunakan salah satu operasi kunjungan sambil membuat simpul baru yang sama
dengan simpul yang disalin sebagai simpul pohon biner hasil dari penyalinan pohon
biner yang disalin. Begitu juga dengan membandingkan dua buah pohon biner, jika
semua simpul yang dikunjungi sama maka dapat dikatakan bahwa dua buah pohon
biner merupakan pohon biner yang sama.

D. Impelentasi Pohon Biner


Pada implementasinya sebuah pohon biner biasanya menggunakan pointer dan
mengalokasikan simpul di memori. Sebuah simpul pada pohon biner biasanya terdiri
dari pointer ke subpohon kiri, pointer ke subpohon kanan, dan data yang disimpan
pada simpul seperti pada gambar 13.

Pointer sub Pointer sub


Pohon kiri (left) Pohon kanan (right)

Gambar 13. Representasi Elemen Pohon Biner

Jika diimplementasikan sebagai pohon, simpul-simpul itu akan menjadi seperti pada
gambar 14.
root

B C

NULL
D E F

NULL NULL NULL NULL NULL NULL

Gambar 14. Representasi Pohon Biner


KEGIATAN BELAJAR
14
GRAPH

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

Gambar 15. Contoh graf

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

Graph Representasi Statis


Seperti halnya struktur data sebelumnya, sebuah graf dapat diimplementasikan
dengan representasi statis dengan menggunakan array. Ada beberapa cara
mengimplementasikan sebuah garf dengan menggunakan sebuah array, namun pada
intinya dengan menggunakan sebuah matrik (array dua dimensi).

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

Gambar 16. Matrik Tetangga

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

Gambar 17. Matrik Jalur

Di mana 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. Bedanya dengan matrik tetangga, angka 1 menyatakan jika simpul
awal bertetangga secara langsung dengan simpul tujuan, sedangkan pada matrik jalur,
simpul awal tidak harus bertetangga secara langsung dengan simpul tujuan, asalkan
ada jalur yang dari simpul awal ke simpul tujuan melewati simpul manapun maka
dianggap bernilai 1. dari representasi di atas dapat dilihat bahwa semua simpul dapat
ditempuh dari simpul manapun.
KEGIATAN BELAJAR
15
UJIAN AKHIR SEMESTER

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

Rosa A.S, 2018, “Struktur Data”, Bandung: Modula


Bambang Hariyanto, 2008, “Struktur Data (Pondasi Membuat Program yang Elegan
dan Efisien)”, Bandung: Penerbit Informatika.
Moh. Sjukani, 2009, “Algoritma (Algoritma & Struktur Data 1) dengan C, C++ dan
Java)”, Jakarta: Mitra Wacana Media.

Anda mungkin juga menyukai