2013 1
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
MODUL PERKULIAHAN
Algoritma Pemrograman dan Struktur Data
Modul Standar untuk digunakan dalam Perkuliahan di Universitas Mercu Buana
Fakultas Program Studi Tatap Muka Kode MK Disusun Oleh
Ilmu Komputer Sistem Informasi
01 87007 Team Dosen
Abstract Kompetensi
2013 2
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
Tipe-tipe data dan deklarasi data dalam bahasa pemrograman
Memahami jenis-jenis data yang digunakan dalam algoritma
2013 3
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
Pengenalan Algoritma Pemrograman
dan Struktur Data
1. Pendahuluan
Instruksi harus diberikan kepada komputer agar dapat memecahkan suatu masalah.
Langkah-langkah yang dilakukan untuk memberikan instruksi kepada komputer untuk
memecahkan masalah inilah yang dinamakan pemrograman komputer. Pemrograman komputer
bukanlah hal yang sederhana. Kegiatan ini memerlukan ketelitian dan kemauan untuk bekerja
dalam jangka waktu yang lama.
Dalam komunikasi sehari-hari seorang harus berbicara dalam bahasa yang sama
dengan orang tersebut. Hal ini berlaku juga untuk berkomunikasi dengan komputer. Kita harus
menggunakan bahasa yang dimengerti oleh komputer untuk memberikan suatu instruksi. Pada
dasarnya komputer adalah sebuah mesin digital, artinya komputer hanya mengenal kondisi
adanya arus (dilambangkan sebagai angka 1) atau tiadanya arus (dilambangkan sebagai angka
0). Dengan kata lain sandi 1 dan 0 harus digunakan untuk melakukan pemrograman. Sandi
tersebut dikenal sebagai bahasa mesin. Kita dapat membayangkan bagaimana sulitnya
menggunakan bahasa mesin sebagai bahasa pemrograman..
Karena bahasa mesin sangat sulit maka muncul ide untuk melambangkan untaian sandi
1 dan 0 dengan singkatan kata yang mudah dipahami manusia. Sebagai contoh dalam
prosesor Intel terdapat perintah 0011 1010 0000 1011. Perintah dalam bahasa mesin ini artinya
sama dengan perintah assembly CMP AL, 0D yang artinya bandingkan nilai register AL dengan
0D. CMP sebenarnya adalah singkatan dari compare. Dapat dilihat disini bahwa perintah
tersebut lebih mudah dipahami dibandingkan dengan urut-urutan bilangan biner seperti tersebut
diatas.
Pemrograman dengan bahasa assembly untuk banyak orang masih dirasakan terlalu
sulit. Karena hal tersebut akhirnya dikembangkan suatu bahasa pemrograman yang lebih yang
lebih mudah digunakan. Bahasa pemrograman ini menggunakan bahasa generasi ketiga atau
disingkat 3GL, biasa juga disebut sebagai high-level language. Contoh dari bahasa ini adalah
bahasa Basic, Pascal, C, C++, COBOL, dsb.
2013 4
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
Bahasa generasi ketiga biasanya menggunakan kata-kata dalam bahasa Inggris karena
bahasa Inggris merupakan bahasa internasional. Sebagai contoh anda dapat menuliskan
perintah berikut dalam bahasa Pascal . Sebagai contoh :
writeln (‘Hallo’); {Pascal}
printf (“Hallo”); // C++
cout << “Hallo” << endl; // C
2. Algoritma
Algoritma adalah urutan langkah berhingga untuk memecahkan masalah logika atau
matematika. Dalam kehidupan sehari-hari sebenarnya kita juga menggunakan algoritma untuk
melakukan sesuatu. Sebagai contoh untuk menulis surat diperlukan langkah-langkah sebagai
berikut :
1. Mempersiapkan kertas dan amplop
2. Mempersiapkan alat tulis
3. Mulai menulis.
4. Memasukkan kertas ke dalam amplop.
5. Pergi ke kantor pos untuk mengeposkan surat tersebut.
Langkah-langkah dari nomor 1 sampai dengan nomor 5 di atas itulah yang disebut dengan
algoritma. Jadi sebenarnya kita menggunakan algoritma baik dengan sadar maupun tanpa kita
sadar.
Dalam banyak kasus, algoritma yang dilakukan tidak selalu berutan seperti diatas.
Kadang-kadang harus memilih dua atau beberapa pilihan. Sebagai contoh jika kita ingin makan,
kita harus menentukan akan memasak sendiri atau dirumah makan. Jika kita memilih untuk
makan dirumah makan kita akan menjalankan algoritma yang berbeda jika kita ingin memasak
sendiri. Didalam pemrograman hal tersebut dikenal sebagai percabangan.
Dalam kasus lain lagi mungkin kita harus melakukan langkah-langkah tertentu beberapa
kali Sebagai contoh, saat kita menulis surat, sebelum memasukkan kertas ke dalam amplop,
mungkin kita harus memeriksa apakah surat tersebut sudah benar atau belum. Jika belum
benar berarti kita harus menyisihkan kertas baru untuk memperbaiki surat tersebut. Demikian
seterusnya sampai surat yang dibuat sesuai dengan yang diharapkan. Hal seperti ini disebut
sebagai pengulangan.
Misalkan kita ingin menghitung luas lingkaran dari masukan berupa jari-jari lingkaran
Rumus luas lingkaran adalah :
2013 5
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
Luas = πR2
Maka algoritma untuk menghitung luas lingkaran adalah :
1. Masukkan R
2. Pi = 3.14
3. Luas = Pi * R * R
4. Tulis Luas
Perhatikanlah bahwa tanda = berarti merupakan pemberian nilai kepada variabel-variable yang
berada disebelah kiri. Sebagai contoh untuk baris kedua, nilai 3.14 diberikan pada variable Pi.
Berikutnya nilai Pi * R * R diberikan kepada variabel Luas.
Baris pertama dari algoritma diatas meminta masukkan dari pengguna berupa jari-jari
disimpan pada variabel
2 atau yang
dituliskan Pi * R * R. Luas lingkaran ini disimpan pada variabel Luas. Baris terakhir menuliskan
luas lingkaran tersebut.
Urut-urutan atau sequence adalah rangkaian tindakan yang dilakukan secara berurut.
Contoh algoritma yang diperlihatkan diatas menunjukkan program yang berurut. Untuk
memudahkan memahami algoritma, diagram alur atau flow hart akan sangat membantu.
Contoh dari diagram dari proses pencarian nilai lingkaran tersebut terdapat pada gambar 1.
Mulai
Selesai
Masukkan r
π = 3.14
Luas = π * r * r
Tulis Luas
2013 6
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
Gambar 1. Algoritma Perhitungan Luas Lingkaran
Komponen-komponen pada Flow Chart
Oval melambangkan Terminal, untuk menyatakan awal
(Start) dan akhir (end,) hanya sebagai tanda, tidak melakukan
suatu pekerjaan khusus.
Persegi Panjang melambangkan Process,
untuk menyatakan assignment statement
Jajaran genjang melambangkan I/O, Input/Output operation.
untuk menyatakan proses baca (READ)dan proses tulis (WRITE)
Belah Ketupat mengambarkan Decision, untuk menyatakan pengambilan keputusan sesuai dengan suatu kondisi.
Digunakan untuk menggambarkan control statement.
Garis, untuk menyatakan urutan pelaksanaan, atau
alur proses.
Preparation, Pemberian nilai awal suatu variabel.
Biasa dipakai pada bahasa COBOL, juga bahasa C.
Call , Memanggil suatu subprogram (procedure, atau function)
Lingkaran melambangkan Titik connector atau sambungan
yang berada pada halaman yang sama
2013 7
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
Pseudocode adalah penulisan program dengan menggunakan bahasa yang kita pergunakan
sehari hari. Bahasa yang digunakan bisa saja bahasa Indonesia, Bahasa Inggris, C-like,
Pascal-like ataupun bentuk bentuk yang lainnya. Contoh pseuducocde dari algoritma diatas
adalah :
Program : Menghitung Luas Lingkaran
Mulai
Masukkan nilai jari-jari kedalam variabel R
Masukkan 3.14 kedalam variabel Pi
Masukkan hasil perkalian Pi dengan R kuadrat kedalam variabel Luas
Tampilkan nilai variabel luas
Selesai
Apapun bentuk tampilan algoritma anda yang terpenting adalah logika dari program yang anda
buat.
3. Struktur Data
Struktur data adalah sebuah skema organisasi, seperti struktur dan array, yang diterapkan
pada data sehingga data dapat diinterprestasikan dan sehingga operasi-operasi spesifik dapat
dilaksanakan pada data tersebut.
Secara umum jenis-jenis data dapat dikelompokkan atas 2 bagian, yaitu :
1. Jenis data primitif, terdiri atas :
a. Integer
b. Real
c. Boolean
d. Karakter
2. Jenis data campuran, yaitu : "String".
3.1 Bilangan Bulat atau Integer
Suatu integer adalah anggota dari himpunan bilangan :
Titik connector yang berada pada halaman lain.
2013 8
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
( ....., -(n+1), -n, ....., -2, -1, 0, 1, 2, ....., n, n+1, ..... )
Operasi-operasi dasar yang ada dalam integer antara lain :
Penjumlahan
Pengurangan
Perkalian
Pembagian
Perpangkatan, dsb
Masing-masing operator pada operasi di atas, yang bekerja terhadap sepasang integer
(operand) disebut sebagai : "binary operator". Sedangkan operator yang hanya bekerja
terhadap satu operand saja disebut sebagai "unary operator". Contoh dari unary
operator adalah operator negasi. Operator ini berfungsi untuk mengubah tanda suatu
operand.
3.2 Bilangan Pecahan atau Real atau Float
Data numerik yang bukan termasuk integer, digolongkan dalam jenis data real. Jenis
data ini ditulis menggunakan titik desimal (atau koma desimal). Bilangan real dimasukkan ke
dalam memori komputer memakai sistem floating point, merupakan versi yang disebut Scientific
Notation. Disini penyajiannya terdiri atas dua bagian, yaitu : mantissa (pecahan) & eksponen.
Contoh :
Di dalam sistim desimal, 123000 = 0.123 * 106.
Di sini 0.123 adalah mantissa atau pecahan, sedangkan 6 adalah eksponennya.
Secara umum suatu bilangan real X dituliskan M * RE
3.3 Boolean
Jenis data ini disebut juga jenis data "logical". Elemen dari jenis data ini mempunyai
nilai salah satu dari "true" atau "false". Operator-operator yang dikenal pada jenis data ini terdiri
atas:
A. Operator Logika, yaitu : NOT, AND dan OR.
Operator OR akan menghasilkan nilai "true", jika salah satu atau kedua operand bernilai
"true".
Operator AND akan menghasilkan nilai "true", jika kedua operand bernilai
"true".Sedangkan operator NOT akan menghasilkan nilai "true", jika operand bernilai
2013 9
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
"false", dan sebaliknya.
Operator NOT merupakan "precedence" dari operator AND dan OR.
Dalam suatu ekspresi yang tidak menggunakan tanda kurung, operator NOT harus dievaluasi
sebelum operator AND dan OR.
B.Operator Relasional, yaitu : >, <, >=, <=, <> dan =.
3.4 Karakter dan String
Jenis data karakter merupakan elemen dari suatu himpunan yang terdiri atas bilangan,
abjad dan simbol-simbol khusus. Sedangkan jenis data string merupakan jenis data campuran,
karena elemen-elemennya dibentuk dari karakter-karakter di atas. Karakter yang digunakan
untuk membentuk suatu string disebut sebagai alphabet. Dalam penulisannya, suatu string
berada dalam tanda "aphosthrope".
Contoh :
Misal, diberikan himpunan alphabet A = { C, D, 1 }.
String-string yang dapat dibentuk dari alphabet di atas antara lain adalah :
'CD1', 'CDD', 'DDC', 'CDC1', ...dsb, termasuk "null string" atau "empty string".
Himpunan yang anggotanya adalah semua string yang dapat dibentuk dari suatu
himpunan alphabet disebut sebagai "vocabulary". Suatu vocabulary V yang dihasilkan dari
himpunan alphabet A dinotasikan dengan VA atau A*.
Jika suatu string dibentuk dari alphabet { 0, 1 }, maka string yang terbentuk disebut
dengan "Bit String".
Secara umum, suatu string S yang dibentuk dari himpunan alphabet A, dituliskan :
S = 'a1a2 ..... aN'
di mana setiap karakter ai anggota A untuk, 1 £ i £ N.
Dalam suatu string terdapat 3 operasi utama, yaitu :
1. Length
2. Concatenation
3. Substring
Latihan:
2013 10
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
1. Buat Algoritma Untuk menghitung nilai Jajarang genjang dan Segitiga, buat algoritma
tersebut dalam bentuk flow chart dan juga dalam bentuk Pseudo code.
2. Buat program dalam bahasa C++ untuk menampilkan Operasi Aritmatika, Operasi
Relasional, Operasi Logika, Operasi Bitwise dan Operasi Geser Bit
Daftar Pustaka
Andri Kristanto, Algoritma & Pemrograman dengan C++ Edisi 2, Graha Ilmu, Yogyakarta, 2009.
Budi Raharjo, Pemrograman C++, Informatika, Bandung, 2010.
Teddy Marcus Zakaria dan Agus Prijono, Konsep dan Implementasi Struktur Data, Informatika,
Bandung, 2006
Thompson Susabda Ngoen, Pengantar Algoritma dengan Bahasa C, Salemba Teknika, Jakarta,
2004
2013 1
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
MODUL PERKULIAHAN
Algoritma Pemrograman dan Struktur Data
Modul Standar untuk digunakan dalam Perkuliahan di Universitas Mercu Buana
Fakultas Program Studi Tatap Muka Kode MK Disusun Oleh
Ilmu Komputer Sistem Informasi
02 87007 Team Dosen
Abstract Kompetensi
Pengertian Array, Jenis Array, dan Mengerti dan Menjelaskan apa yang
2013 2
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
Algoritma untuk mengakses Array. Pengertian Record dan Penggunaan Structure pada bahasa C++
dimaksud dengan Array dan Record serta Pendeklarasiannya dalam bahasa Pemrograman
2013 3
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
Array dan Record
2. Pendahuluan
Pada pertemuan kali ini, kita akan kembali membahas materi yang sudah diberikan di
algoritma dan pemrograman, yaitu array. Secara singkat, array adalah suatu tipe data
terstruktur yang berupa sejumlah data sejenis (bertipe data sama) yang jumlahnya tetap dan
diberi suatu nama tertentu. Array dapat berupa array 1 dimensi, 2 dimensi, bahkan n-dimensi.
Array adalah bagian dari struktur data, sedangkan dalam prosesnya penggunaan array, kita
memerlukan algoritma dan pemrograman yang baik.
Dalam kehidupan sehari-hari, kita seringkali bertemu dengan kebutuhan penyimpanan
data sejenis yang dalam jumlah atau kuantitas banyak. Sebagai contoh sederhana, kita akan
mencatat nilai suhu ruangan setiap hari selama 1 tahun. Tentunya kita akan membutuhkan
sebuah data untuk menyimpan data suhu tersebut. Mengingat dalam 1 tahun ada 12 bulan dan
tiap minggu ada 7 hari, maka yang kita butuhkan adalah variabel dengan tipe data terstruktur
seperti array. Dan tidak mungkin kita menggunakan variabel tunggal sebanyak 366 buah.
2. Array
Array adalah suatu set dari alokasi data, dengan jenis data yang sama untuk tiap alokasi
tersebut. Setiap alokasi data disebut sebagai elemen dari array. Untuk mendeklarasikan
sebuah array, tuliskan jenis data dalam array tersebut, nama array dan diikuti dengan subscript.
Subscript disini adalah menyatakan jumlah elemen array yang dituliskan di dalam kurung siku.
Contohnya : int IntArray[25];
Sebagai deklarasi sebuah array yang memiliki 25 alokasi data (elemen) dengan jenis
data integer bernama IntArray. Perbedaan deklarasi variabel array dengan variabel biasa.
int a; //* hanya 1 nilai untuk variabel a
int a[10]; //* terdapat 10 slot nilai untuk variabel a
int a[7] = {1,2,3,5,43,5,6};
Array dapat menggunakan nama apapun (yang dapat digunakan dalam bahasa C/C++),
selama tidak memiliki nama yang sama dengan variabel tunggal lain. Dalam bahasa C/C++,
array dimulai dari 0. Jika A merupakan array dengan jumlah elemen 10, maka variabelnya
2013 4
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
adalah A[0], A[1], ..., A[9]
5 9 15 8 -7 21 0 -3 11 -1 → Isi Array
[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] → indeks Array
A[0] bernilai 5
A[4] bernilai -7
Berapa nilai A[6] ?
Berapa nilai A[9] ?
Contoh lain.
6. int angka[10];
mendeklarasikan sebuah variable bernama angka berupa array satu dimensi
untuk menampung/ menyimpan sepuluh data bertipe integer.
1 3 2 4 5 7 8 6 9 10
Indeks = 0 1 2 3 4 5 6 7 8 9
7. float bilangan[4][4];
mendeklarasikan sebuah variable bernama bilangan berupa array dua dimensi
untuk menampung/ menyimpan enam belas data bertipe float.
Kolom = 0 Kolom = 1 Kolom = 2 Kolom = 3
Baris = 0 1.2 2.3 3.4 4.5
Baris = 1 1.3 1.4 1.5 1.8
Baris = 2 2.2 2.2 2.9 2.8
Baris = 3 3.0 3.7 3.5 3.6
3.char huruf[3][5][5];
mendeklarasikan sebuah variable bernama huruf berupa array tiga dimensi untuk
menampung/ menyimpan tujuh puluh lima data bertipe char.
2013 5
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
2.1 Mengisi Nilai Elemen Array
Mengisi nilai pada elemen array dapat dilakukan dengan 2 cara, yaitu :
5. langsung dari program (statik)
6. diisi oleh user melalui input dari keyboard (dinamik)
Berikut contoh pengisian array yang diinput langsung dari program (statik). Artinya user tidak
dapat merubah isi elemen array kecuali merubah dari kode programnya.
A[0] = 100; /*Nilai elemen A[0] adalah 100*/
B[5] = 35; /*Nilai elemen B[5] adalah 35 */
A[0] = B[5]; /*Nilai elemen A[0] adalah 35 */
C = -99; /*C adalah variabel biasa, bukan array. C bernilai -99 */
B[5] = C; /*Nilai elemen B[5] adalah -99. A[0] tetap bernilai 35 */
Berikut algoritma menampilkan elemen nilai array.
Deklarasi
int A[3];
int B = 35;
Deskripsi
Mulai
A[0] = 70;
A[1] = B;
Print “Isi nilai A[0] adalah A[0]”;
w e t u r
o u h h k
d f h k l
a c v b n
m z x r d
T = 0
T = 1
T = 2
2013 6
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
Print “Isi nilai A[1] adalah A[1]”;
Print “Silakan user mengisi nilai A[2]:”
Scan A[2];
Print “Isi nilai A[2] adalah A[2]”;
Selesai
Tampilan hasil yang diharapkan adalah sebagai berikut:
2.2 Inisialisasi Array
Meskipun tidak dimungkinkan mengoperasikan array secara langsung, namun pemberian nilai
dapat dilakukan.
int a[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
Bila initializers-nya lebih sedikit dari elements array, sisanya akan dianggap bernilai 0.
int a[10] = {0, 1, 2, 3, 4, 5, 6};
maka nilai a[7], a[8], dan a[9] dianggap 0.
Bila terdapat initializer, maka dimensi array dapat diabaikan.
int b[] = {10, 11, 12, 13, 14};
b merupakan array yang memiliki 5 elemen karena di-inisialisasi dengan 5 angka. Perhatikan
bahwa variable b dinyatakan sebagai b[] untuk menjelaskan bahwa b adalah sebuah array.
Jika elemen array adalah karakter, maka initializer dapat berupa string constant:
char s1[7] = "Hello,";
char s2[10] = "there,";
char s3[] = "world!";
Untuk memberikan nilai atau mengoperasikan suatu array, dapat digunakan sebuah loop:
for(int i = 0; i < 10; i = i + 1)
{ a[i] = 0; }
2013 7
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
/* a[0] hingga a[9] bernilai 0 */
for(i = 0; i < 10; i++) /* i++ adalah sama dengan i=i+1 */
{ b[i] = a[i]+1; }
/* b[0] hingga b[9] bernilai 1 */
for(i = 0; i < 10; i++)
{ c[i] = b[i]+i; }
/* untuk i=0 → c[0]=1+0=1,
untuk i=1 → c[1]=1+1=2,
untuk i=2 → c[2]=1+2=3,
berapa nilai c[9]? */
Berikut contoh notasi algoritma deklarasi array dengan memanfaatkan proses iterasi (loop).
Deskripsi
int n[10]
Deklarasi
Mulai
for (int i=0; i<10; i++)
n[i] = 0
Print ”Indeks Elemen Nilai”
for (i=0; i<10; i++)
Print “i” ”n[i]”
Selesai
Tampilan hasil keluaran yang diharapkan:
2013 8
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
3. Record
Array sangat seringkali digunakan bersamaan dengan struktur data lain, yaitu record (rekaman).
Deklarasi
typedef struct SISWA
long NIM;
char Nama[25];
char Kota[30];
// deklarasi array A berisi 2 record SISWA;
Deskripsi
//menerima masukan user
for (int i=0;i<2;i++){
Print "NIM: "; Scan A[i].NIM;
Print "Nama: ";Scan A[i].Nama;
Print "Kota: ";Scan A[i].Kota;
//menampilkan isi
for (int i=0;i<2;i++){
Print "Siswa ke-i ";
Print A[i].Nama "("A[i].NIM")";
Print "dari "A[i].Kota";
Selesai
2013 9
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
4. Latihan
Buatlah kode program di bawah ini dengan menggunakan bahasa pemrograman C++. Lalu
kompilasi program tersebut, jalankan. Apakah program tersebut sesuai dengan permasalahan
yang ada?
/* Program untuk mengevaluasi beberapa data nilai */
#include “stdio.h”
int data[10]; //* deklarasi variable global. Sebuah array berisi 10 elemen int
int baik=0, cukup=0, kurang=0;
void input_data( )
{
for( int I = 0; I < 9; I++)
{
printf(“Data ke [ %d ] = “, I); scanf(“%d”, data[I]);
}
return;
};
void cari_rata2( )
{
for( int I = 0; I < 9; I++)
{
if (data[I] > 80 && data[I] <= 100) baik++;
elseif (data[I] > 60 && data[I] <= 80) cukup++;
elseif (data[I] > 0 && data[I] <= 60) kurang++;
}
return;
};
void output_data( )
{
if ((baik >= cukup) && (baik >=kurang))
printf(“\n Rata-ratanya Baik”);
elseif ((cukup >= baik) && (cukup >=kurang))
printf(“\n Rata-ratanya Cukup”);
2013 10
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
elseif ((kurang >= cukup) && (kurang >= baik))
printf(“\n Rata-ratanya Kurang”);
return;
};
main( )
{
input_data( );
cari_rata2( );
output_data( );
}
Daftar Pustaka
Andri Kristanto, Algoritma & Pemrograman dengan C++ Edisi 2, Graha Ilmu, Yogyakarta, 2009.
Budi Raharjo, Pemrograman C++, Informatika, Bandung, 2010.
Deitel & Deitel, C How to Program 3rd Edition, Prentice Hall, New Jersey, 2001
Teddy Marcus Zakaria dan Agus Prijono, Konsep dan Implementasi Struktur Data, Informatika,
Bandung, 2006.
Thompson Susabda Ngoen, Pengantar Algoritma dengan Bahasa C, Salemba Teknika, Jakarta,
2004
2013 1
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
MODUL PERKULIAHAN
Algoritma Pemrograman dan Struktur Data
Modul Standar untuk digunakan dalam Perkuliahan di Universitas Mercu Buana
Fakultas Program Studi Tatap Muka Kode MK Disusun Oleh
Ilmu Komputer Sistem Informasi
03 Team Dosen
Abstract Kompetensi
2013 2
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
Pengertian Linked List dan Penyajian Linked List dalam memori
Mampu Memahami dan Menjelaskan Cara Kerja Linked List
2013 3
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
Linked List
3. Pendahuluan
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. Secara rinci, programmer dapat menulis suatu struct atau definisi kelas
yang berisi variabel yang memegang informasi yang ada di di dalamnya, dan mempunyai suatu
pointer yang menunjukan ke suatu struct sesuai dengan tipe datanya.
Struktur dinamis ini mempunyai beberapa keuntungan dibandingkan struktur array yang
bersifat statis. Struktur linked list lebih dinamis, karena banyaknya elemen dengan mudah
ditambah atau dikurangi, berbeda dengan arrayb yang ukuranya bersifat tetap. Disamping itu,
manipulasi terhadap setiap elemen seperti menyisipkan, menghapus, maupun menambah
dapat dilakukan dengan lebih mudah.
Untuk lebih memahami konsep linked list perhatikan permasalahan berikut ini:
Misalkan anda diminta untuk membuat sebuah algoritma dan program untuk
memasukan 2 buah daftar ke dalam suatu daftar atau senarai (linked list), dimana senarai
tersebut masih kosong, sehingga setelah anda masukan 2 buah data tersebut, senarai tersebut
berisi 2 buah data.
Algoritma dari permasalahan diatas adalah sebagai berikut:
8. Tentukan struktur untuk menampung data yang dimasukan
9. Senarai masih keadaan kosong
10. Tentukan fungsi untuk memasukan data ke dalam senarai
11. Fungsi untuk memasukan data ke dalam senarai adalah:
if (p==nul){
t → next = *s
*s = t }
12. masukan data tersebut ke dalam senarai
13. tampilkan data
14. selesai
Implementasi dari algoritma diatas pada program C++ adalah sebagai berikut :
2013 4
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
/*Program:link1.cpp */ #include <stdio.h> #include <stdlib.h> #include <malloc.h>
typedef struct nod { int data; struct nod *next; } NOD, *NODPTR;
void CiptaSenarai (NODPTR *s) { *s = NULL; }
NODPTR NodBaru(int m) { NODPTR n; n = (NODPTR) malloc(sizeof(NOD)); if (n != NULL) { n -> data = m; n -> next = NULL; } return n; }
void SisipSenarai (NODPTR *s, NODPTR t, NODPTR p) { if (p==NULL) { t -> next = *s; *s = t; } else { t -> next = p -> next; p -> next = t; } }
void CetakSenarai (NODPTR s) { NODPTR ps; for (ps = s; ps != NULL; ps = ps -> next) printf("%d --->", ps -> data); printf("NULL\n"); }
int main () { NODPTR pel; NODPTR n;
CiptaSenarai(&pel);
2013 5
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
n = NodBaru(55); SisipSenarai(&pel, n, NULL); n = NodBaru(75); SisipSenarai(&pel, n, NULL); CetakSenarai(pel); return 0; }
2. Teknik-teknik Dalam Linked List
Teknik-teknik yang ada pada linked list antara lain:
1. Pengulangan linked list
2. Mengubah sebuah Pointer dengan referensi Pointer
3. Membuat kepala senarai dengan perintah push()
4. Menambah Ekor pada akhir senarai
5. Membuat referensi lokal
2.1. Pengulangan linked list
Teknik yang sering dalam linked list adalah pengulangan keseluruhan node dalam list.
Secara umum pengulangan ini dikenal sebagai while loop. Head pointer dikopikan dalam
variabel lokal current yang kemudian dilakukan perulangan dalam linked list. Hasil akhir
dalam linked list dengan current!=NULL. Pointer lanjut dengan current=current -> next.
Proses pengulangan linked list seperti pada penggalan program berikut ini:
// return the number of nodes in a list (while-loop version)
int length(struct node *head) {
int count = 0;
struct node * current = head;
while (current != NULL) {
count++
current = current -> next
}
return(count);
}
2.2. Mengubah sebuah pointer dengan referensi pointer
Banyak fungsi pada pada linked list perlu untuk merubah pointer kepala. Dalam
C++, anda juga dapat menyatakan parameterpointer sebagai argumen &. Untuk
2013 6
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
melakukan ini bahasa C++, lewati pointer ke pointer kepala. Pointer ke pointer kadang-
kadang ” reference pointer”
langkah utama untuk teknik ini adalah:
Merancang sebuah fungsi untuk mengambil pointer ke pointer kepala. Ini teknik standar
yang digunakan dalam C++ untuk melewati pointer ke “value of interest” yang
membutuhkan untuk diubah. Untuk mengubah struct node*, lewati struct node**
Gunakan '&' dalam panggilan untulk menghitung dan melewati pointer ke value of
interest
Gunakan '*' pada parameter dalam fungsi pemanggil untuk mengakses dan mengubah
value of interest
Fungsi Sederhana berikut ini adalah untuk membuat pointer kepala ke NULLdengan
menggunakan parameter reference
void changeToNull (struct node ** headRef)
*headRef = NULL;}
void ChangeCaller() {
Struct node* head1
Struct node* head2
ChangeToNull (&head1);
ChangeToNull (&head2);
}
Gambar di bawah ini menunjukan bagaimana pointer headRef dalam ChangeToNull
menunjukan ke head1 pada Change Caller.
ChangeCaller ()
head1
ChangeTo Null (&head1)
headRef
2013 7
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
Gambar 3.1 Pointer headRef dalam ChangeToNull menunjuk ke head1
2.3. Membuat head list (kepala senarai) dengan perintah Push()
Cara termudah untuk membuat sebuah senarai (list) dengan menambah node pada
“akhir kepala (last head)” adalah dengan push().
Perhatikan fungsi berikut ini :
struct node* AddAthead() {
Struct node*head =NULL;
int i;
for (i=1; i<6; i++) {
push (&head,i);
}
// head == {5, 4, 3, 2, 1};
return (head);
}
Dalam membuat tambahan node pada akhir senarai (list) dengan menggunakan
perintah Push(), sebaiknya anda berhati-hati, sebab salah urutan untuk masing-masing
scrip maka urutannya akan terbalik.
2.4. Menambah Tail (Ekor) pada akhir List
Untuk menambahkan node ekor pada list, sebagian melibatkan penempatan pada
node terakhir, dan kemudian merubahnya, next field dari NULL untuk menunjuk pada
node baru seperti variabel tail, dalam contoh berikut ini yaitu menambah node 3 ke akhir
daftar {1,2}
Stack Heap
Head
1 2
2013 8
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
Tail
newNode
Gambar 3.2. Membuat ekor pada akhir list
Untuk memasukan atau menghapus node di dalam list, anda membutuhkan pointer ke
node sebelum posisi itu, sehingga anda dapat merubahnya .next field.
Pada gambar 3.2 tersebut penjelasannya adalah sebagai berikut :
1. Head pointer akan menunjukan ke node 1
2. Kemudian node 1 akan menunjukan ke node 2, yang merupakan ekor.
3. Misalkan ada node baru misalnya node 3, maka dari node 2 akan menunjuk ke
node baru yaitu 3. sehingga posisi node 3 adalah posisi terakhir.
Pertanyaanya, bagaimana membuat data-data {1,2,3,4,5} yang ada pada list dengan
menambahkan node di akhir ekor. Kesulitannya adalah bahwa node yang pertama pasti
ditambah pada head pointer, tetapi semua node yang lain dimasukkan sesudah node
terakhir dengan menggunakan tail pointer. Cara yang terbaik untuk berhubungan dengan
kedua hal adalah menambah head node {1}. kemudian melakukan perulangan yang
terpisah yang menggunakan tail pointer untuk menambah semua node yang lain. Tail
pointer digunakan untuk menunjuk pada last node, dan masing-masing node baru
ditambah dengan tail → next
Perhatikan penggalan program berikut ini:
struct node* BuildWidthSpecialCase (){
struct node* head = NULL;
struct node*tail;
int i;
// Deal With the head node here, and set the tail pointer
Push (&head, 1);
tail =head;
// Do all the other nodes using 'tail'
3
2013 9
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
for (i=2; i<6; i++) {
push(&(tail → next), I); //add node at tail → next
tail = tail → next; // advance tail to point to last node
}
return(head); // head == {1, 2, 3, 4, 5};
}
2.5. Membuat referensi lokal
Untuk teknik ini, kita menggunakan “reference pointer” local yang selalu menunjuk ke
pointer terakhir dalam list. Semua tambahan pada list dibuat dengan refernce pointer.
Reference pointer tidak menunjuk ke head pointer, tetapi menunjuk ke .next field di dalam
last node terakhir dalam list.
Perhatikan penggalan program berikut ini:
struct node* BuildWidthLocalRef(){
struct node* head = NULL;
struct node** lasyPtrRefn=&head
int I;
for (i=1; i<6; i++);
Push (lastPtrRef, I);
LastPtrRef = &((*lastPtrRef)-> next);
}
Return(head);
}
Teknik ini pendek, tetapi di dalam perulangan cara ini agak membahayakan. Teknik
ini jarang sekali digunakan, tetapi itu merupakan cara yang baik untuk memahami
pengertian sebuah pointer. Cara kerja dari teknik ini adalah:
Pada puncak putaran, lastPtrRef menunjuk pointer terakhir dalam list. Pada
permulaaanya menunjuk ke head pointer itu sendiri. Berikutnya kemudian akan
menunjuk ke .next field di last node dalam list
Push (LastPtrRef); menambah node baru pada pointer akhir. Node baru menjadi node
terakhir dalam list.
2013 10
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
LastPtrRef= &((*lastPtrRef) → next; last PtrRef lanjut ke . Next field dan .next field
sekarang menjadi pointer terakhir dalam list.
Perhatikan gambar 3.3. berikut ini :
Stack Heap
LocalRef()
Head
lastPtrRef
Gambar 3.3 Membuat referensi local
3. OPERASI DALAM LINKED LIST
Operasi yang ada pada linked list adalah Menambah Node dan juga menghapus node
3.1. Menambah Node Baru
Untuk menambahkan sebuah node di dalam list, kita perlu mendefinisikan sebuah kepala
(head) dan ekor (tail). Pada awal list, posisi head dan tail masih menjadi satu. Setelah ada
tambahan node yang baru, maka posisinya berubah. Posisi kepala tetap pada awal list dan
posisi ekor pada akhir list atau node yang baru. Seterusnya, bila ada tambahan node, maka
posisi ekor akan bergeser sampai ke belakang dan akhir list ditunjukkan dengan NULL.
Adapun prosedurnya ditunjukkan pada penggalan program berikut ini:
void SLList :: AddANode()
{Tail -> Next = new list;
Tail=Tail ->Next;
}
Ilustrasi dari tahapan penambahan node dapat terlihat pada gambar 3.4
1 2
2013 11
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
Adding a Node
Head
Before Tail
Step 1 Head New Node
Tail Next
Tail
Next
Step 2 Head NULL
Gambar 3.4 menambah node baru
Adapun penjelasan dari gambar 3.4 adalah sebagai berikut:
1. Tentukan dan Definisikan head dan tail, dimana dalam kondisi pertama kepala dan ekor
menunjuk pada node yang sama.
2. Misalkan ada node baru yang masuk, posisi head dan tail akan berubah. Head tetap
akan menunjuk pada node yang lama, sedangkan ekor akan menunjuk pada node yang
baru
3. Misalkan ada node yang baru, head tetap pada posisi awal, sedangkan tail akan terus
bergeser ke belakang dan pada akhir list ditunjukan oleh NULL.
3.2. Menghapus Node
Untuk menghapus node, dapat dilihat pada penggalan program berikut ini :
void SLList::DeleteANode(ListPtr corpse)) // <-- i though it was funny:)
{
ListPtr temp;
if (corpse === Head) //case 1 corpse = Head
{temp=Head;
2013 12
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
Head=Head->Next;
}
else if(corpse == Tail) //case 2 corpse is at the end
{ temp = Tail;
Tail=Previous(Tail);
Tail->Next=NULL;
delete temp;
}
else //case 3 corpse is in middle somewhere
{ temp=Previous (corpse);
temp->Next=corpse->Next;
delete corpse;
}
CurrentPtr=Head; //Reset the class tempptr
}
Daftar Pustaka
Andri Kristanto, Algoritma & Pemrograman dengan C++ Edisi 2, Graha Ilmu, Yogyakarta, 2009.
Moh. Sjukani, Struktur Data [ Algoritma & Struktur Data 2 ] dengan C, C++, Mitra Wacana
Media, Jakarta, 2008.
Teddy Marcus Zakaria dan Agus Prijono, Konsep dan Implementasi Struktur Data, Informatika,
Bandung, 2006.
2013 1
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
MODUL PERKULIAHAN
Algoritma Pemrograman dan Struktur Data
Modul Standar untuk digunakan dalam Perkuliahan di Universitas Mercu Buana
Fakultas Program Studi Tatap Muka Kode MK Disusun Oleh
Ilmu Komputer Sistem Informasi
04 Team Dosen
Abstract Kompetensi
2013 2
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
Operasi dasar stack dan contoh aplikasinya. Deklarasi stack dalam bahasa pemrograman
Mampu menjelaskan apa yang dimaksud dengan stack dan aplikasinya
2013 3
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
STACK
4. Pendahuluan
Stack disebut juga tumpukan dimana data hanya dapat dimasukkan dan diambil dari
satu sisi. Karena itu, stack bersifat LIFO (Last In First Out).
Tumpukan bisa diartikan sebagai suatu kumpulan data yang seolah-olah ada data yang
diletakkan diatas data yang lain. Satu hal yang perlu diingat bahwa kita bisa menambah
(menyisipkan) data, dan mengambil (menghapus) data melalui ujung yang sama, yang disebut
ujung atas tumpukan (top of stack). Tumpukan dapat diilustrasikan sebagai berikut:
Secara sederhana tumpukan bisa diilustrasikan seperti gambar dibawah ini. Dari
gambar dibawah ini kotak B ada di atas kotak A dan ada di bawah kotak C. Gambar dibawah ini
hanya menunjukan bahwa dalam tumpukan hanya bisa menambah atau mengambil sebuah
kotak lewat satu ujung yaitu ujung bagian atas. Dapat dilihat bahwa tumpukan merupakan suatu
senarai (list) yang mempunyai watak “masuk terakhir keluar pertama"(last in first out-LIFO).
F
E
D
C
B
A
Gambar 2. Tumpukan dengan 6 elemen
A A A
B
C
B
C
A
B
C
Keadaan
mula-mula
adalah
kosong
Setelah
ditumpuk
top
max
2013 4
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
Implementasi alternatif stack adalah:
1. List dengan pointer untuk variable-length stack (ukuran stack bervariasi)
2. Array untuk fixed-length stack (ukuran stack sudah dibatasi, tidak dapat tumbuh)
Stack banyak digunakan dalam bidang ilmu komputer, misalnya dalam pengembangan
kompilator, pengelolaan backtracking untuk parser dan sebagainya.
Stack terdiri dari elemen S[1..top], dimana S[1] adalah elemen pada dasar stack dan
S[top] adalah elemen pada puncak stack. Jika top=0 berarti stack kosong. Jika top = N, dimana
N adalah jumlah elemen terbanyak yang dapat ditampung, berarti stack sudah penuh. Jika
stack sudah penuh tidak bias dilakukan penyisipan elemen baru. Pada stack yang
diimplementasikan dengan list, ukurannya bisa tidak terbatas (unbounded stack) kecuali
batasan ruang memori yang tersedia. Pada unbounded stack pemeriksaan yang diperlukan
adalah pemeriksaan apakah masih ada ruang memori yang tersedia untuk elemen yang baru.
Stack yang diimplementasikan dengan array disebut fixed length stack karena ukurannya tidak
bisa berubah, sedangkan stack yang diimplementasikan dengan list disebut variable-length
stack, karena ukurannya bisa berubah-ubah sesuai dengan penambahan dan penghapusan
elemen-elemennya.
Operasi yang dapat dilakukan stack adalah:
Menambah (push)
Mengambil (pop)
mengecek apakah stack penuh (isFull)
mengecek apakah stack kosong (isEmpty)
membersihkan stack (clear).
Mencetak isi stack (print)
2. Operasi-operasi Pada Stack
Membuat stack dan operasi-operasi yang dapat dilakukannya.
1. Mendefinisikan stack dengan menggunakan struct
2. M
endefi
nisika
typedef struct stack // Mendefinisikan stack dengan menggunakan struct
{
int top;
char data [15][20]; // menampung 15 data dengan jumlah string max 20 huruf
};
2013 5
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
n max_stack untuk maksimum isi stack
#define max_stack 15
3. Membuat variable array sebagai implementasi stack
stack tumpuk;
4. Mendeklarasikan operasi-operasi/fungsi yang dapat dilakukan stack.
a. Push (menginputkan data pada stack)
b. Pop (mengambil data pada stack)
c. IsFull(mengecek apakah stack penuh)
d. isEmpty(mengecek apakah stack kosong)
void push(char d[20])
{
tumpuk.top++;
strcpy(tumpuk.data[tumpuk.top],d);
printf("data berhasil dimasukkan");
}
void pop()
{
printf ("data %s terambil",tumpuk.data[tumpuk.top]);
tumpuk.top--;
}
int isEmpty() { if (tumpuk.top==-1) return 1; else return 0; }
int isFull()
{
if (tumpuk.top==max_stack-1)
return 1;
else
return 0;
}
2013 6
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
e. clear (membersihkan seluruh isi stack)
f. print (mencetak seluruh isi stack)
2.1. Operasi push dengan Single Stack
Operasi push merupakan proses penyisipan/pemasukan data ke dalam suatu tumpukan.
Dimana tumpukan tersebut akan dicek, apakah sudah penuh atau belum. Jika sudah penuh,
maka data tidak akan dimasukkan ke dalam tumpukan, tetapi jika masih kosong maka data
akan disisipkan di tumpukkan paling atas.
Algoritma Operasi Push:
If atas = maxelemen then
penuh: ← true (Tumpukan sudah penuh)
else
penuh ← false (Tumpukan masih kosong)
Atas ← atas + 1
Isi[Atas] ← x
Endif
2.2. Operasi Pop dengan Single Stack
void print()
{
for (int i=tumpuk.top;i>=0;i--)
printf ("%s\n",tumpuk.data[i]);
}
void clear()
{
tumpuk.top=-1;
printf("semua data terhapus.");
}
2013 7
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
Operasi pop adalah operasi untuk menghapus elemen yang terletak pada posisi paling
atas dari sebuah tumpukan.
Algoritma Operasi Pop:
If atas = 0 then
(Tumpukan sudah kosong)
else
Atas ← atas - 1 (hapus 1 elemen pada tumpukan)
Endif
2.3. Double Stack Dengan Array
Double stack merupakan suatu teknik khusus yang dikembangkan untuk menghemat
memori dalam pembuatan dua stack dengan array. Intinya adalah penggunaan hanya sebuah
array untuk menampung dua stack.
Gambar 3. Gambaran Perbandingan Single Stack dan Doube Stack Dengan Array
Tampak jelas pada gambar di atas bahwa sebuah array daspat dibagi untukk dua stack, stack 1
bergerak ke kanan dan stack 2 bergerak ke kiri. Jika Top 1 (elemen teratas dari stack 1)
bertemu dengan top2 (elemen teratas dari stack 2), maka double stack telah penuh.
Algoritma Operasi Push pada double stack:
Stack Kosong
1 Top Max
Stack 1 Stack 2
1 Top 1 Max
Kosong
Top 2
2013 8
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
If not penuh then
Case nostack of (Tumpukan masih kosong)
1 : top[1] ← top[1] + 1
2 : top[2] ← top[2] - 1
Endcase
Stack[top[elemen]] ← elemen
Endif
Algoritma Operasi Pop pada double stack:
If not kosong then (Tumpukan tidak kosong)
Elemen ← stack[top[nostack]]
Case nostack of
1 : top[1] ← top[1] + 1
2 : top[2] ← top[2] - 1
Endcase
Endif
3. Pemanfaatan STACK
Salah satu pemanfaatan stack adalah untuk menulis ungkapan dengan menggunakan
notasi tertentu. Seperti kita ketahui, dalam penulisan ungkapan numeris, kita selalu
menggunakan tanda kurung untuk mengelompokkan bagian mana yang akan dikerjakan
terlebih dahulu. Perhatikan ungkapan berikut ini :
( C + D ) * ( E – F )
Dari contoh di atas ( C + D ) akan dikerjakan lebih dahulu, kemudian ( E – F ) dan hasilnya
akan dikalikan
Cara penulisan ungkapan sering disebut dengan notasi INFIX, yang artinya bahwa operator
ditulis diantara 2 operand.
Seorang ahli matematika bernama Jan lukasiewiccz kemudian mengembangkan suatu
cara penulisan ungkapan numeris yang kemudian dikenal dengan nama notasi PREFIX,
yang artinya adalah bahwa operator ditulis sebelum kedua operand yang akan disajikan.
Notasi lain, yang merupakan kebalikan dari notasi PREFIX adalah notasi POSTFIX,
Operator ditulis sesudah operand.
2013 9
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
Contoh Notasi INFIX, PREFIX dan POSTFIX
INFIX PREFIX POSTFIX
A + B + A B A B +
A + B – C - + A B C A B C - +
( A + B ) * ( C - D ) * + A B – C D A B + C D - *
( 6 – 2 ) * ( 5 + 4 ) * - 6 2 + 5 4 6 2 – 5 4 + *
Program Konversi Bentuk INFIX ke bentuk POSTFIX
/*Program:InfixPostfix.cpp */
#include <stdio.h>
#include <conio.h>
#include <ctype.h>
char A[25], S[20];
int I, Top;
int Operand(char Top); // fungsi memeriksa operand
int Operator(char Op); // fungsi memeriksa operator
int Nilai(char X); // fungsi mencari nilai numerik sebuah karakter
void main()
{ char OprStack, OprBaru;
Top = -1;
clrscr();
printf("Arithmetic Statement : "); scanf("%s",A);
for (I=0; A[I] != '\0'; I++ )
{ if (Operand(A[I])) printf("%c", A[I]);
else { if(Operator(A[I]))
{ if(Top==-1 || S[Top] == '(' ) S[++Top] = A[I];
else { OprStack = S[Top]; OprBaru = A[I];
if (Nilai(OprBaru) > Nilai (OprStack))
S[++Top] = OprBaru;
Else
2013 10
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
{ while(Nilai(OprStack) >= Nilai (OprBaru)
&& Top > -1 && S[Top] != '(' )
{ printf("%c ", OprStack);
OprStack = S[--Top]; }
S[++Top] = OprBaru; }
}
}
else { if(Operand(A[I])=='(') S[++Top]=A[I];
else { while (Top>-1 && S[Top] != '(' )
{ printf("%c ", S[Top--] ); }
Top-- ;
}
} }
}
while (Top > -1)
printf("%c ", S[Top--]);
}
int Operand(char Op) // Fungsi Memeriksa Operand
{ if(isalpha(Op))
return(-1); //True
else return(0); //False
}
int Operator(char Opr) // Fungsi memeriksa Operator
{ if(Opr=='^' || Opr=='*' || Opr=='/' || Opr=='+' || Opr=='-')
return(-1);
else return(0);
}
int Nilai (char X) // Fungsi memeriksa Operator
{ if (X=='^') return(3);
else if(X=='*' || X=='/') return(2);
else if(X=='+' || X=='-') return(1);
else return(0);
}
2013 11
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
Daftar Pustaka
Andri Kristanto, Algoritma & Pemrograman dengan C++ Edisi 2, Graha Ilmu, Yogyakarta, 2009.
Moh. Sjukani, Struktur Data [ Algoritma & Struktur Data 2 ] dengan C, C++, Mitra Wacana
Media, Jakarta, 2008.
Teddy Marcus Zakaria dan Agus Prijono, Konsep dan Implementasi Struktur Data, Informatika,
Bandung, 2006.
2013 1
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
MODUL PERKULIAHAN
Algoritma Pemrograman dan Struktur Data
Modul Standar untuk digunakan dalam Perkuliahan di Universitas Mercu Buana
Fakultas Program Studi Tatap Muka Kode MK Disusun Oleh
Ilmu Komputer Sistem Informasi
05 87007 Team Dosen
Abstract Kompetensi
2013 2
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
Definisi dan operasi dasar QUEUE. Penyajian QUEUE dalam Array
Mengetahui cara kerja QUEUE dan menerapkannya
2013 3
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
QUEUE (ANTRIAN)
5. Pendahuluan
Queue disebut juga antrian dimana data masuk di satu sisi dan keluar di sisi yang lain.
Karena itu, queue bersifat FIFO (First In First Out). Antrian (Queue) merupakan suatu
kumpulan data yang penambahan elemennya (masuk antrian) hanya bisa dilakukan pada suatu
ujung (disebut dengan sisi belakang/rear) atau disebut juga enqueue yaitu apabila seseorang
masuk ke dalam sebuah antrian. Jika seseorang keluar dari antrian/penghapusan (pengambilan
elemen) dilakukan lewat ujung yang lain (disebut dengan sisi depan/front) atau disebut juga
dequeue yaitu apabila seseorang keluar dari antrian.
Jadi, dalam antrian menggunakan prinsip “masuk pertama keluar pertama” atau disebut
juga dengan prinsip FIFO (first in first out). Dengan kata lain, urutan keluar akan sama dengan
urutan masuknya. Contoh : antrian mobil saat membeli karcis di pintu jalan tol, antrian di
bioskop dan sebagainya.
6. Operasi / Prosedur Standar pada QUEUE / ANTRIAN
QUEUE merupakan struktur data dinamis, ketika program dijalankan, jumlah elemennya
dapat berubah secara dinamis sesuai keperluan. Berikut ini operasi-operasi standar pada
queue :
a. Inisialisasi, merupakan prosedur untuk membuat queue pada kondisi awal, yaitu queue
yang masih kosong (belum mempunyai elemen).
b. InQueue, Insert Queue merupakan prosedur untuk memasukkan sebuah elemen baru
pada queue. Jumlah elemen Queue akan bertambah satu dan elemen tersebut
merupakan elemen belakang.
c. DeQueue, Delete Queue merupakan prosedur untuk menghapus/mengambil sebuah
elemen dari queue. Elemen yang diambil adalah elemen depan dan jumlah elemen queue
akan berkurang satu.
Hal lain yang perlu diperhatikan dalam suatu struktur dinamis adalah jumlah elemen
struktur data tersebut. Operasi-operasi yang berhubungan dengan jumlah elemen suatu
queue adalah :
1. Size, yaitu operasi untuk mendapatkan banyaknya elemen queue.
2013 4
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
2. Empty, yaitu prosedur untuk mengetahui apakah queue dalam keadaan kosong atau
tidak. Dengan status ini maka dapat dicegah dilakukannya operasi Dequeue dari
suatu queue yang kosong.
3. Full, merupakan prosedur untuk mengetahui apakah Queue penuh atau tidak.
Prosedur ini hanya berlaku untuk queue yang jumlahnya terbatas.
7. IMPLEMENTASI ANTRIAN DENGAN ARRAY
Karena antrian merupakan suatu kumpulan data, maka tipe data yang sesuai untuk
menyajikan antrian adalah menggunakan array atau list (senarai berantai).
Perhatikan gambar berikut ini :
depan
keluar A B C D E F
masuk
belakang
gambar 1. Contoh antrian dengan 6 elemen
Gambar di atas menunjukkan contoh penyajian antrian menggunakan array. Antrian di
atas berisi 6 elemen, yaitu A, B, C, D, E dan F. Elemen A terletak di bagian depan antrian dan
elemen F terletak di bagian belakang antrian. Jika ada elemen baru yang akan masuk, maka
elemen tersebut akan diletakkan di sebelah kanan F. Dan jika ada elemen yang akan dihapus,
maka A akan dihapus terlebih dahulu.
Elemen A terletak di bagian depan, kemudian disusul elemen B dan elemen yang paling
akhir atau paling belakang adalah elemen F. Misalkan ada elemen baru yang akan masuk maka
akan terletak di belakang elemen F, sehingga elemen baru akan menempati posisi yang paling
belakang.
Gambar 2 menunjukkan antrian di atas dengan penambahan elemen G dan H, sehingga
gambar 1. Menjadi :
depan
2013 5
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
keluar A B C D E F G H
masuk
belakang
gambar 2. Contoh penambahan antrian dengan 2 elemen
Gambar 3 menunjukkan antrian dengan penghapusan elemen A dan B, sehingga gambar
1 menjadi :
depan
keluar C D E F G H
masuk
belakang
gambar 3. Contoh penghapusan antrian dengan 2 elemen
Seperti pada tumpukan atau stack di dalam antrian juga dikenal 2 operasi dasar yaitu
menambah elemen baru yang akan diletakkan di bagian belakang antrian dan menghapus
elemen yang terletak di bagian depan antrian. Selain itu kita juga harus melihat antrian itu
mempunyai isi atau masih kosong.
Untuk memahami penggunaan antrian dalam array, kita membutuhkan deklarasi antrian,
misalnya sebagai berikut :
# define MAXN 6
Typedef enum { NOT_OK, OK } Tboolean;
Typedef struct {
Titem array [MAXN];
int first;
int last;
int number_of_items;
} Tqueue
Dengan deklarasi di atas, elemen antrian dinyatakan dalam tipe integer yang semuanya
2013 6
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
terdapat dalam struktur. Variabel first menunjukkan posisi elemen pertama dalam array, dan
variabel last menunjukkan posisi elemen terakhir dalam array.
Algoritma dari penggalan program di atas adalah :
1. Tentukan elemen yang akan dimasukkan ke dalam antrian (dalam hal ini adalah 6
elemen).
2. Deklarasikan struktur untuk menampung elemen pada antrian.
3. Selesai.
Untuk menambah elemen baru dan mengambil elemen dari antrian dalam antrian,
diperlukan deklarasi berikut ini :
void initialize_queue ( Tqueue *Pqueue)
{
Pqueue -> firs = 0;
Pqueue -> last = -1;
Pqueue -> number_of_items = 0;
}
Tboolean enqueue ( Tqueue *Pqueue, Titem item)
{
if (Pqueue -> number_of_items >= MAXN)
return (NOT_OK);
else {
Pqueue -> last++;
if (Pqueue -> last > MAXN -1)
Pqueue -> = 0;
Pqueue -> array[Pqueue->last] = item;
Pqueue -> number_of_items++;
return (OK);
}
}
Tboolean dequeue (Tqueue *Pqueue, Titem, item)
{
if (Pqueue -> number_of_items == 0)
return (NOT_OK);
2013 7
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
else {
*Pitem = Pqueue -> array[Pqueue->first++];
if (Pqueue -> first > MAXN -1)
Pqueue -> first = 0;
Pqueue -> number_of_items--;
return (OK);
}
}
Penggalan program di atas apabila dikelompokkan berdasarkan fungsinya adalah sebagai
berikut :
1. Deklarasikan Antrian
void initialize_queue ( Tqueue *Pqueue)
{
Pqueue -> firs = 0;
Pqueue -> last = -1;
Pqueue -> number_of_items = 0;
}
2. Fungsi untuk memasukkan elemen pada antrian adalah sebagai berikut :
Tboolean enqueue ( Tqueue *Pqueue, Titem item)
{
if (Pqueue -> number_of_items >= MAXN)
return (NOT_OK);
else {
Pqueue -> last++;
if (Pqueue -> last > MAXN -1)
Pqueue -> = 0;
Pqueue -> array[Pqueue->last] = item;
Pqueue -> number_of_items++;
return (OK);
2013 8
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
}
}
3. Fungsi untuk menghapus elemen pada antrian adalah sebagai berikut :
Tboolean dequeue (Tqueue *Pqueue, Titem, item)
{
if (Pqueue -> number_of_items == 0)
return (NOT_OK);
else {
*Pitem = Pqueue -> array[Pqueue->first++];
if (Pqueue -> first > MAXN -1)
Pqueue -> first = 0;
Pqueue -> number_of_items--;
return (OK);
}
}
Untuk memperjelas masing-masing fungsi pada deklarasi di atas, perhatikan gambar 4 di
bawah ini :
Antrian
6
5
4
3
2
1 first = 1
last = 0
Gambar 4. Contoh deklarasi antrian dengan 6 ukuran
Dari gambar 4 di atas last dibuat = 0 dan first dibuat = 1 serta antrian dikatakan kosong jika last
< first.
Antrian
2013 9
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
6
5
4 D last = 4
3 C
2 B
1 A first = 1
Gambar 5. Contoh deklarasi antrian penambahan 4 buah elemen
Dari gambar 5 di atas menunjukkan array dengan 6 elemen untuk menyajikan sebuah antrian
(dalam hal ini MAXN = 6). Pada saat permulaan antrian dalam keadaan kosong (gambar 4.)
pada gambar 5 terdapat 4 buah elemen yang ditambahkan. Dalam hal ini first = 1 dan last = 4.
Gambar 6 menunjukkan antrian setelah 2 elemen yaitu setelah A dan B dihapus.
Gambar 7 menunjukkan antrian baru setelah E dan F ditambahkan.
Banyaknya elemen dalam antrian adalah 6-3+1=4 elemen
Antrian
6
5
4 D last = 4
3 C first = 1
2
1
Gambar 6. Contoh deklarasi antrian penghapusan 2 buah elemen
Antrian
6 F last = 6
2013 10
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
5 E
4 D
3 C first = 3
2
1
Gambar 6. Contoh deklarasi antrian penambahan 2 buah elemen
Karena array terdiri dari 6 elemen, maka sebenarnya kita masih bisa menambah elemen lagi.
Tetapi jika ingin ditambah elemen baru, maka nilai last harus ditambah 1 menjadi 7. Padahal
array antrian hanya terdiri dari 6 elemen, sehingga tidak mungkin ditambah lagi, meskipun
sebenarnya array tersebut masih kosong di dua tempat.
4. IMPLEMENTASI ANTRIAN DENGAN POINTER
Pada ilustrasi contoh di atas penambahan yang selalu dilakukan disebelah belakang
antrian dan penghapusan yang selalu dilakukan pada elemen pada posisi paling depan,
maka antrian sebenarnya juga merupakan bentuk khusus dari suatu senarai berantai (linked
list). Jumlah elemen yang bisa diisi dalam antrian terbatas pada ukuran array yang
digunakan.
Untuk memanipulasi sebuah antrian bisa digunakan dua buah variabel yang menyimpan
posisi elemen paling depan dan elemen paling belakang. Apabila antrian diimplementasikan
menggunakan linked list maka cukup 2 pointer yang bisa dipakai yaitu elemen paling depan
(kepala) dan elemen paling belakang (ekor).
Untuk mengimplementasikan antrian dengan menggunakan pointer, perhatikan
algoritma berikut ini :
1. Tentukan struktur untuk menampung node yang akan dimasukkan pada antrian.
Deklarasi struktur pada penggalan program berikut ini :
struct queueNode
{
char data;
struct queueNode *nextPtr;
2013 11
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
};
typedef struct queueNode QUEUENODE;
ypedef QUEUENODE * QUEUENODEPTR;
QUEUENODEPTR headPtr = NULL, tailPtr = NULL;
2. Deklarasikan penambahan elemen baru pada antrian, dimana letaknya adalah paling
belakang. Deklarasi penambahan elemen baru tersebut dapat dilihat pada penggalan
program berikut ini :
void enqueue ( QUEUENODEPTR *headPtr, QUEUENODEPTR *tailPtr, char value )
{
QUEUENODEPTR newPtr = malloc ( sizeof ( QUEUENODE ) );
If ( newPtr != NULL )
{
newPtr -> data = value;
newPtr -> nextPtr = NULL;
if ( isEmpty ( *headPtr ) )
*headPtr = newPtr;
else
( *tailPtr ) -> nextPtr = newPtr;
*tailPtr = newPtr;
}
3. Lakukan pengecekan terhadap antrian, apakah antrian dalam kondisi kosong atau tidak.
Kalau kondisi antrian kosong, maka elemen bisa dihapus. Penggalan program berikut ini
akan menunjukkan kondisi tersebut.
int isEmpty ( QUEUENODEPTR headPtr )
{
return headPtr == NULL;
}
2013 12
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
Daftar Pustaka
Andri Kristanto, Algoritma & Pemrograman dengan C++ Edisi 2, Graha Ilmu, Yogyakarta, 2009.
Moh. Sjukani, Struktur Data [ Algoritma & Struktur Data 2 ] dengan C, C++, Mitra Wacana
Media, Jakarta, 2008.
Teddy Marcus Zakaria dan Agus Prijono, Konsep dan Implementasi Struktur Data, Informatika,
Bandung, 2006.
2013 1
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
MODUL PERKULIAHAN
Algoritma Pemrograman dan Struktur Data
Modul Standar untuk digunakan dalam Perkuliahan di Universitas Mercu Buana
Fakultas Program Studi Tatap Muka Kode MK Disusun Oleh
Ilmu Komputer Sistem Informasi
06 87007 Team Dosen
Abstract Kompetensi
Bubble Sort, Selection Sort, Memahami Jenis-Jenis
2013 2
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
Insertion Sort. Membuat Algoritma dan penerapannya ke dalam bahasa pemrograman
Sorting Sederhana dan dapat membuat Algoritma dan program sorting.
SORTING
1. Definisi Sorting
Salah satu bagian penting dari struktur data adalah sorting atau pengurutan data. Ada
banyak sekali Algoritma pengurutan data di dunia komputer, yatu : bubble sort, selection sort,
insertion sort, exchange sort, quick sort, merge sort, dan lain lain.
Sorting adalah proses pengurutan data yang sebelumnya disusun secara acak atau
tidak teratur sehingga menjadi tersusun secara terurut menurut suatu aturan tertentu.
Pada umumnya terdapat 2 jenis pengurutan :
Ascending (naik, pengurutan dari karakter/angka kecil ke karakter/angka besar).
Descending (turun, pengurutan dari karakter/angka besar ke karakter/angka kecil).
Contoh :
Data acak : 5 6 8 1 3 25 10
Terurut Ascending : 1 3 5 6 8 10 25
Terurut Descending : 25 10 8 6 5 3 1
2. Metode Pengurutan
Untuk melakukan proses pengurutan tersebut dapat digunakan berbagai macam cara /
metoda. Beberapa metoda diantaranya :
15. Bubble / Exchange Sort
16. Selection Sort
17. Insertion Sort
2.1 Metode Bubble Sort
Metode bubble sort adalah metode yang mendasarkan penukaran dua buah elemen
untuk mencapai keadaan urut. Metode ini mempunyai perilaku seperti gelembung dimana bila
akan diurutkan naik nilai yang besar akan naik (indeks besar) sementara nilai yang kecil akan
2013 3
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
turun (indeks kecil). Setiap data akan dibandingkan dengan data yang ada disebelahnya
sampai dengan data terakhir. Metode ini adalah yang termudah, tetapi paling tidak efisien.
Contoh data-data sebagai berikut akan diurut dari yang terkecil sampai yang terbesar dari ke 8
data tersebut dan akan menggunakan pembandingan data yang paling akhir:
5 34 32 25 75 42 22 2
Adapun langkah-langkah pengurutan adalah sebagai berikut :
Langkah 1:
5 34 32 25 75 42 22 2
5 34 32 25 75 42 2 22
5 34 32 25 75 2 42 22
5 34 32 25 2 75 42 22
5 34 32 2 25 75 42 22
5 34 2 32 25 75 42 22
5 2 34 32 25 75 42 22
2 5 34 32 25 75 42 22
Hasilnya adalah :
2 5 34 32 25 75 42 22
Langkah 2 :
2 5 34 32 25 75 42 22
2 5 34 32 25 75 22 42
2 5 34 32 25 22 75 42
2 5 34 32 22 25 75 42
2 5 34 22 32 25 75 42
2 5 22 34 32 25 75 42
Hasilnya adalah :
2 5 22 34 32 25 75 42
2013 4
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
Langkah 3 :
2 5 22 34 32 25 75 42
2 5 22 34 32 25 42 75
Hasilnya adalah :
2 5 22 34 32 25 42 75
Langkah 4 :
2 5 22 34 32 25 42 75
2 5 22 34 25 32 42 75
2 5 22 25 34 32 42 75
Langkah 5 :
2 5 22 25 34 32 42 75
2 5 22 25 32 34 42 75
Hasilnya adalah :
2 5 22 25 32 34 42 75
Untuk pengurutan data dari besar ke kecil adalah kebalikan dari proses di atas.
Algoritma dari langkah-langkah di atas adalah :
1. Tentukan data-data yang akan diurutkan dan disimpan dalam array.
2. Lakukan pengulangan dari data-data tersebut.
3. Lakukan pembandingan antara data yang satu dengan data yang lain, dimana kalau data
yang satu lebih kecil dari data yang lain, maka posisinya ditukar. Kalau tidak, posisinya
tetap.
4. Tampilkan data hasil pembandingan.
5. Ulangi langkah 3, sampai semua data dibandingkan.
6. selesai.
Implementasi dari langkah-langkah dalam Bubble Sort dapat dilihat pada program berikut ini,
program Ascending dengan menggunakan Bubble Sort.
#include <iostream.h>
2013 5
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
#include <iomanip.h>
void main()
{
int NumList[8]= { 5, 34, 32, 25, 75, 42, 22, 2};
int i,ii,iii;
int Swap;
cout<<"Data sebelum diurutkan : \n";
for(int ctr=0; ctr<8; ctr++)
{
cout<< setw(3)<<NumList[ctr];
}
cout<<"\n\n";
for(i=0; i<7; i++)
for(ii=0; ii<7; ii++)
if (NumList[ii] > NumList[ii+1])
{
Swap = NumList[ii];
NumList[ii] = NumList[ii+1];
NumList[ii+1] = Swap;
}
cout<<"Data setelah diurutkan : \n" ;
for (iii=0; iii<8; iii++);
cout<<setw(3)<<NumList[iii];
cout<<endl<<endl;
}
2.2 Metode Selection Sort
Metode seleksi (Selection Sort) adalah suatu metode pengurutan yang membandingkan
elemen yang sekarang dengan elemen berikutnya sampai elemen yang terakhir. Jika
ditemukan elemen lain yang lebih kecil dari elemen sekarang, maka dicatat posisinya dan
kemudian ditukar. Misalkan ada data-data sebagai berikut yang akan diurutkan dari yang
terkecil sampai yang terbesar dari data tersebut.
2013 6
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
5 34 32 25 75 42 22 2
Langkah-langkahnya adalah sebagai berikut :
Langkah 1 :
Posisi : 1 2 3 4 5 6 7 8
Data : 5 34 32 25 75 42 22 2
Pembanding Posisi
5 < 34 1
5 < 32 1
5 < 25 1
5 < 75 1
5 < 42 1
5 < 22 1
5 < 2 8
Tukar data pada posisi 1 dengan data posisi 8
Hasil Sementara : 2 34 32 25 75 42 22 5
Langkah 2 :
Posisi : 1 2 3 4 5 6 7 8
Data : 2 34 32 25 75 42 22 5
Pembanding Posisi
34 > 32 3
32 > 25 4
25 < 75 4
25 < 42 4
25 > 22 7
22 > 5 8
Tukar data pada posisi 2 dengan data pada posisi 8
Hasil Sementara : 2 5 32 25 75 42 22 34
2013 7
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
Langkah 3 :
Posisi : 1 2 3 4 5 6 7 8
Data : 2 5 32 25 75 42 22 34
Pembanding Posisi
32 > 25 4
25 < 75 4
25 < 42 4
25 > 22 7
22 < 34 7
Tukar data pada posisi 3 dengan data pada posisi 7
Hasil Sementara : 2 5 22 25 75 42 32 34
Langkah 4 :
Posisi : 1 2 3 4 5 6 7 8
Data : 2 5 22 25 75 42 32 34
Pembanding Posisi
75 > 42 6
42 > 32 7
32 < 34 7
Tukar data pada posisi 5 dengan data pada posisi 7
Hasil Sementara : 2 5 22 25 32 42 75 34
Langkah 5 :
Posisi : 1 2 3 4 5 6 7 8
Data : 2 5 22 25 32 42 75 34
Pembanding Posisi
42 < 75 6
42 > 34 8
Tukar data pada posisi 6 dengan data pada posisi 8
2013 8
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
Hasil Sementara : 2 5 22 25 32 34 75 42
Langkah 6 :
Posisi : 1 2 3 4 5 6 7 8
Data : 2 5 22 25 32 34 75 42
Pembanding Posisi
75 > 42 8
Tukar data pada posisi 7 dengan data pada posisi 8
Hasil Akhir : 2 5 22 25 32 34 42 75
Proses pengurutan data di atas memerlukan 6 kali perulangan.
Algoritma dari langkah-langkah di atas adalah :
1. Tentukan data-data yang akan diurutkan dan disimpan dalam array.
2. Lakukan pengulangan dari data-data tersebut.
3. Lakukan pembandingan antara data yang satu dengan data yang lain, dimana kalau
data yang satu lebih kecil dari data yang lain, maka posisinya ditukar. Kalau tidak,
posisinya tetap.
4. Tampilkan data hasil pembandingan.
5. Ulangi langkah 3, sampai semua data dibandingkan.
6. Selesai.
Implementasi program selection adalah sebagai berikut :
#include <stdio.h>
#include <conio.h>
int A[8]={2,5,22,25,32,34,42,75},i,j,tampung,pos;
main() {
clrscr();
printf("Sebelum Sorting : \n");
for (i=0; i<8; i++) {
printf("%i " , A[i]);
}
for (i=0; i<8-i; i++) {
2013 9
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
if (A[j]<A[pos])
{
pos=j;
}
}
if (pos!=i)
{
tampung=A[pos];
A[pos]=A[i];
A[i]=tampung;
}
printf("\n\nSetelah Sorting : \n");
for (i=0; i<8; i++)
{
printf("%i ", A[i]);
}
return 0;
}
2.3. Metode Insertion Sort
Metode Insertion(penyisipan) adalah dengan membandingkan data/elemen ke-n (n
mulai dari data ke-2 hingga elemen terakhir) dengan elemen-elemen sebelumnya. Jika
ditemukan data yang lebih kecil maka data tersebut disisipkan ke depan (tukar posisi) sesuai
dengan posisi seharusnya.
Contoh : 8 3 7 4
Langkah 1 : 3 dibandingkan dengan 8, karena 3 < 8 maka kedua elemen ditukar posisinya
yang menghasilkan urutan 3 8 7 4
Langkah 2 : 7 dibandingkan dengan 8, karena 7 < 8 maka 7 ditukar posisinya dengan 8
yang menghasilkan urutan 3 7 8 4
Langkah 3 : 4 dibandingkan dengan 8, karena 4 < 8 maka tukar posisinya, hasil sementara
adalah 3 7 4 8
2013 10
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
Kemudian 4 dibandingkan dengan 7, karena 4 < 7 maka tukar posisinya,
hasilnya adalah 3 4 7 8
Kemudian 4 dibandingkan dengan 3, karena 4 > 3 , maka posisinya tetap,
hasil akhirnya adalah 3 4 7 8
Algoritma dari langkah-langkah di atas adalah :
1. Tentukan data-data yang akan diurutkan dan disimpan dalam array.
2. Lakukan pembandingan antara data ke 2 hingga elemen terakhir dengan data
sebelumnya, jika data yang dibandingkan bernilai lebih kecil, maka posisinya ditukar.
3. Tampilkan data hasil pembandingan.
4. Ulangi langkah 2, sampai semua data dibandingkan.
5. Selesai.
Implementasi program insertion adalah sebagai berikut :
#include <stdio.h>
#include <conio.h>
int A[5]={8,3,7,4},i,j,tampung;
main()
{
clrscr();
printf("Sebelum Sorting : \n");
for (i=0; i<=4; i++)
{
printf("%i " , A[i]);
}
for (i=1; i<4; i++)
{
tampung=A[i];
j=i-1;
while (A[j]>tampung && j>0)
{
A[j+1] = A[j];
j--;
2013 11
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
}
A[j+1]=tampung;
}
printf("\n\nSetelah Sorting : \n");
for (i=0; i<5; i++)
{
printf("%i ", A[i]);
}
return 0;
}
Daftar Pustaka
Andri Kristanto, Algoritma & Pemrograman dengan C++ Edisi 2, Graha Ilmu, Yogyakarta, 2009.
Teddy Marcus Zakaria dan Agus Prijono, Konsep dan Implementasi Struktur Data, Informatika,
Bandung, 2006
Thompson Susabda Ngoen, Pengantar Algoritma dengan Bahasa C, Salemba Teknika, Jakarta,
2004
2013 1
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
MODUL PERKULIAHAN
Algoritma Pemrograman dan Struktur Data
Modul Standar untuk digunakan dalam Perkuliahan di Universitas Mercu Buana
Fakultas Program Studi Tatap Muka Kode MK Disusun Oleh
Ilmu Komputer Sistem Informasi
07 87007 Fajar Masya
Abstract Kompetensi
Latihan pemecahan masalah Mampu menerapkan Stack, QUEUE
2013 2
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
Stack, QUEUE dan Sorting dan Sorting sederhana dalam solusi pemecahan masalah
REVIEW dan Latihan Soal
Buatlah function pangkat dengan input a dan b untuk menghitung a^b. Function ini
mengembalikan (return) hasil perhitungan kepada function yang memanggilnya.
Contoh :
3^4 = 3 x 3 x 3 x 3 = 81
4^3= 4 x 4 x 4 = 64.
Contoh Codingnya:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <ctype.h>
#include <string.h>
int main ()
{
int a,b,c,d ;
printf("Masukan Angka A: ");scanf("%d", &a);
printf("Masukan Angka B: ");scanf("%d", &b);
d=1;
c=1;
while (d <= b){
d=d+1;
c=c*a;
}
printf("\nNilai = %d",c);
getch ();
return 0;
2013 3
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
}
Buatlah function faktorial dengan input bilangan bulat positif a. Function ini mengembalikan
(return) hasil perhitungan kepada function yang memanggilnya. “a!” dibaca “Faktorial dari
a”
Contoh :
3! = 3 x 2 x 1 = 6
5! = 5 x 4 x 3 x 2 x 1 = 120
contoh codingnya:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <ctype.h>
#include <string.h>
int main () {
int a,b,c,d ;
printf("Masukan Angka A: ");scanf("%d", &a);
d=1; c=1; b=a;
while (d <= a) {
d=d+1;
c=c*b;
b=b-1;
}
printf("\nnilai = %d",c);
getch ();
return 0;
}
Buatlah program Penjumlahan 2 Matriks berukuran sama yang masing-masing berukuran
tidak lebih dari 10 x 10
Code Programnya adalah :
2013 4
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
# include <stdio.h>
# include <conio.h>
void isi_matriks (int a[10][10], int brs, int klm) {
int i, j, posisi_brs;
printf("\nMatriks %d x %d\n", brs, klm);
posisi_brs = wherey();
for (i = 0; i < brs; i++) {
for (j = 0; j < klm; j++) {
gotoxy(j * 5 + 1, posisi_brs);
scanf("%d", &a[i][j]); }
posisi_brs++; }
printf("\n"); }
void jumlah_matriks (int a[10][10], int b[10][10],
int c[10][10], int brs, int klm) {
int i, j;
for (i = 0; i < brs; i++)
for (j = 0; j < klm; j++)
c [i] [j] = a[i][j] + b[i][j]; }
void cetak_matriks (int a[10][10], int brs, int klm) {
int i, j;
for (i = 0; i < brs; i++) {
for (j = 0; j < klm; j++)
printf("%3d ", a[i][j]);
printf("\n"); }
}
int main () {
int mat_a[10][10], mat_b[10][10], mat_c[10][10];
int baris, kolom;
printf("ukuran baris ? "); scanf("%d", &baris);
printf("ukuran kolom ? "); scanf("%d", &kolom);
isi_matriks(mat_a, baris, kolom);
isi_matriks(mat_b, baris, kolom);
jumlah_matriks(mat_a, mat_b, mat_c, baris, kolom);
2013 5
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
printf("\nHasil jumlah:\n");
cetak_matriks(mat_c, baris, kolom);
fflush(stdin); getchar();
return 0;
}
Buatlah algoritma dan program untuk menampilkan 10 bilangan secara menurun yaitu 10, 9,
8, 7, ..., 1 dengan menggunakan linked list.
Algoritma :
1. Tentukan struktur untuk menampung data dalam linked list.
2. Tentukan data-data yang akan dimasukkan ke dalam linked list.
3. Lakukan perulangan terhadap semua data.
4. Tampilkan data.
5. Ulangi langkah 3 sampai semua data dimasukkan.
6. Selesai.
Implementasi dari Algoritma di atas pada program adalah sebagai berikut :
#include<iostream.h>
typedef struct item {
int val;
item * next;
} item;
int main() {
item * head = NULL;
int i;
for (i=1; i<= 10; i++) {
item * curr = new item;
curr->val = i;
curr->next = head;
head = curr;
}
while (head) {
cout << head->val << " ";
2013 6
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
head = head->next;
}
return 0;
}
Buatlah algoritma dan program untuk memasukkan dan mengeluarkan data dalam antrian.
Algoritma dari permasalahan di atas adalah :
1. Deklarasikan elemen yang akan dimasukkan dalam antrian.
2. Deklarasikan struktur untuk menampung elemen tersebut.
3. Tentukan fungsi untuk memasukkan elemen pada antrian.
4. Tentukan fungsi untuk mengambil elemen dari antrian.
5. Tentukan fungsi untuk menampilkan semua elemen pada antrian.
6. Masukkan huruf ke dalam antrian. Jika huruf yang dimasukkan selain huruf x dan angka
1, kerjakan langkah 3.
7. Jika yang dimasukkan adalah angka 1, kerjakan langkah 5.
8. Jika yang dimasukkan adalah huruf x maka kerjakan langkah 9.
9. Selesai.
Code Programnya adalah :
#include <stdio.h>
#include <conio.h>
typedef char Titem;
// The interface of queue
#define MAXN 5
typedef enum {NOT_OK, OK } Tboolean;
typedef struct {
Titem array [MAXN];
int first;
int last;
int number_of_items;
} Tqueue;
void initialize_queue (Tqueue *Pqueue);
Tboolean enqueue (Tqueue *p, Titem item);
2013 7
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
Tboolean dequeue (Tqueue *p, Titem *Pitem);
void print_queue(const Tqueue *Pqueue);
// Application
#include <ctype.h>
void main(void) {
Tqueue queue;
Tboolean succeed;
char chr;
initialize_queue(&queue);
printf("\nMasukkan sebuah huruf untuk masuk dalam antrian ");
printf("\natau Tekan angka 1 untuk mengeluarkan sebuah huruf dalam antrian");
printf("\natau Tekan angka X untuk keluar\n");
chr = getche();
while (chr != 10 && chr != 13) {
if (isalpha (chr)) {
succeed=enqueue(&queue, chr);
print_queue(&queue);
if (!succeed)
printf("\n Enqueue operation failed\n"); }
if (chr == '1') { succeed = dequeue(&queue, &chr);
if (succeed) {
printf("\n huruf keluar dari antrian %c", chr);
print_queue(&queue); }
else printf("\nDequeue operation failed\n "); }
chr = getche(); } }
// The implementations of operation functions of the queue
void initialize_queue (Tqueue *Pqueue) {
Pqueue->first = 0;
Pqueue -> last = -1;
Pqueue -> number_of_items = 0; }
Tboolean enqueue ( Tqueue *Pqueue, Titem item) {
if (Pqueue -> number_of_items >= MAXN)
return (NOT_OK); else {
Pqueue -> last++;
2013 8
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
if (Pqueue -> last > MAXN -1)
Pqueue -> last = 0;
Pqueue -> array[Pqueue->last] = item;
Pqueue -> number_of_items++;
return (OK); } }
Tboolean dequeue(Tqueue *Pqueue, Titem *Pitem) {
if (Pqueue -> number_of_items == 0)
return (NOT_OK); else {
*Pitem = Pqueue -> array[Pqueue->first++];
if (Pqueue -> first > MAXN -1)
Pqueue -> first = 0;
Pqueue -> number_of_items--;
return (OK); } }
void print_queue (const Tqueue *Pqueue) { int i, n;
printf("\nQueue now: \n\n");
for (n=1, i=Pqueue->first ; n <= Pqueue->number_of_items; n++) {
printf(" %c ", Pqueue -> array[i] ) ;
i++;
if (i>MAXN-1)
i= 0; }
printf("\n\n"); }
Buatlah algoritma dan program untuk memasukkan 10 buah data dengan menggunakan
metode bubble sort dan tampilkan data tersebut secara ascending. Input data terserah.
Algoritma :
1. Tentukan data-data yang akan diurutkan dan disimpan dalam suatu array.
2. Lakukan pengulangan dari data-data tersebut.
3. Lakukan pembandingan antara data yang satu dengan data yang lain, dimana kalau
data yang satu lebih kecil dari data yang lain, maka posisinya ditukar. Kalau tidak,
posisinya tetap.
4. Tampilkan data hasil pembandingan.
5. Ulangi langkah 3, sampai semua data dibandingkan.
6. Selesai.
2013 9
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
//Program:bubblesortascending.cpp
# include <iostream.h>
# include <conio.h>
void bubble_sort(long [],int);
main()
{
clrscr();
const int array_size=10;
long array[array_size]={0};
cout<<"\n * Array size = 10" <<endl;
cout<<"\ * Data Type = long"<<endl;
gotoxy(1,24);
cout<<" ************************************* ";
gotoxy(1,25);
cout<<" ************************************* ";
gotoxy(1,10);
cout<<" Enter the Array: "<<endl<<endl;
for(int count_1=0;count_1<array_size;count_1++)
{
cout<<"\t Element["<<count_1<<"] = ";
cin>>array[count_1];
}
bubble_sort(array,array_size);
gotoxy(40,10);
cout<<" Sorted Array: ";
for(int count_2=0;count_2<array_size;count_2++)
{
gotoxy(50,12+count_2);
cout<<" Element["<<count_2<<"]= "<<array[count_2]<<endl;
}
getch();
return 0;
}
2013 10
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
void bubble_sort(long array[], int array_size)
{
for(int count_1=0;count_1<array_size;count_1++)
{
for(int count_2=0;count_2<array_size;count_2++)
{
if(array[count_2]>array[count_2+1])
{
long temp=array[count_2];
array[count_2]= array[count_2+1];
array[count_2+1]=temp;
}
}
}
}
Buatlah algoritma dan program untuk memasukkan 10 buah data dengan menggunakan
metode selection sort dan tampilkan data tersebut secara ascending. Input data terserah.
Daftar Pustaka
Andri Kristanto, Algoritma & Pemrograman dengan C++ Edisi 2, Graha Ilmu, Yogyakarta, 2009.
Teddy Marcus Zakaria dan Agus Prijono, Konsep dan Implementasi Struktur Data, Informatika,
Bandung, 2006
Thompson Susabda Ngoen, Pengantar Algoritma dengan Bahasa C, Salemba Teknika, Jakarta,
2004
2013 1
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
MODUL PERKULIAHAN
Algoritma Pemrograman dan Struktur Data
Modul Standar untuk digunakan dalam Perkuliahan di Universitas Mercu Buana
Fakultas Program Studi Tatap Muka Kode MK Disusun Oleh
Ilmu Komputer Sistem Informasi
08 87007 Team Dosen
Abstract Kompetensi
1. General Tree Menjelaskan jenis-jenis tree
2013 2
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
A
B C D
E F G H I J
K L M
2. Binary Tree
Dan penyelesaiannya
STRUCTURE POHON (TREE)
Struktur Data Non Linier terdiri dari :
7. Struktur Pohon (Tree Structure)
8. Graph
Definisi Pohon adalah :
Susunan dari satu atau lebih simpul (node) yang terdiri dari satu simpul khusus yang
disebut akar (root) sedang sisanya membentuk subtree dari akar.
LEVEL
0
1
2
3
Akar dari struktur pohon ini adalah A
Satu simpul akan berisi :
~ Informasi ( misal, A , B, dst)
~ Cabang-cabang (Link) yang menghubungkan Kesimpul simpul yang lain.
Simpul A sebagai akar mempunyai 3 Link yang membentuk SUBTREE B,C, D.
Jumlah SUBTREE dari satu simpul disebut : DERAJAT (DEGREE).
2013 3
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
Derajat Simpul : A = 3
B = 2
C = 1
G = 0
Simpul yang mempunyai derajat = 0 disebut : SIMPUL TERMINAL atau DAUN (LEAF)
Contoh simpul daun gambar diatas adalah : K , L, F, G, M, I , J
Struktur Pohon yang terkenal adalah struktur geneologi (silsilah). Dalam struktur tersebut
adanya simpul anak (children) dan orangtua(parent)
Contoh anak D adalah H, I, J
Orangtua D adalah A
Anak dari orang tua yang sama (saudara sekandung) disebut sibling misal H,I,J.
DERAJAT (DEGREE) SUATU POHON
Adalah derajat maksimum dari suatu simpul dalam pohon.
Contoh derajat pohon dalam gambar diatas adalah 3.
Nenek Moyang dari dari suatu simpul adalah seluruh simpul-simpul yang ada sepanjang
lintasan dari akar sampai simpul tersebut.
Contoh nenek moyang dari M adalah A, D dan H.
KEDALAMAN (HEIGHT atau DEPTH)
Kedalaman suatu pohon ditentukan oleh level maksimum dari simpul dalam pohon.
Contoh kedalaman pohon dari gambar diatas adalah A.
HUTAN (FOREST)
Adalah susunan dari beberapa pohon.
Bila akar A dihilangkan maka akan diperoleh hutan dengan 3 pohon yaitu :
B(E(K,L),F)
C(G)
D(H(M),I,J)
Ada 2 cara untuk menyatakan struktur pohon yaitu :
3. Gambar
4. Daftar(List)
2013 4
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
B C D
E F G H I J
A
Pernyataan dengan Gambar adalah seperti terlihat pada Gambar diatas sedangkan kalau
dengan List adalah sebagai berikut :
(A(B(E(K,L),F),C(G),D(H(M),I,J)))
Proses dalam struktur data non linier, bentuk pohon akan lebih mudah digambarkan bila
diketahui :
3. n ( Jumlah Simpul atau Node )
4. k ( Derajat Pohon)
Dari data n dan k maka dapat dihitung :
JUMLAH LINK = n . k
JUMLAH NULL-LINK = n( k - 1)+1
JUMLAH NON ZERO LINK = n - 1
STRUKTUR NODE K-ary
DATA
Child –1
……
Child-k
Pohon 3 - ary :
Dari gambar diatas diket : n = 10 , k = 3
Maka dapat dihitung :
JUMLAH LINK = n . k = 3. 10 = 30
JUMLAH NULL LINK = n ( k – 1 ) + 1
2013 5
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
A
B
C
G
A
B C
D E
= 10( 3 – 1 ) + 1
= 21
JUMLAH NON ZERO LINK = n – 1 = 10 – 1 = 9
POHON BINER (BINARY TREE)
Tipe yang sangat penting dari struktur data
Dalam struktur pohon biner hanya dikenal SUBTREE KIRI DAN SUBTREE KANAN saja
Simpul dalam pohon biner adalah :
Susunan dari simpul-simpul yang masing-masing bisa kosong atau terdiri dari akar dan dua
pohon biner yang terpisah dan disebut subtree kiri dan subtree kanan.
Pohon biner dengan subtree kanan kosong
Pohon biner dengan subtree kiri kosong
Complete Binary Tree
2013 6
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
A
B C
D E F G
1
2
10
3
4 5
11
6 7
12 8 9 13 14 15
Pohon Biner Penuh ( Full Binary Tree)
Adalah pohon biner yang mempunyai simpul atau node lengkap dari level 1
sampai level ke I
Full Binary Tree
Pohon Biner Lengkap ( Complete Binary Tree) Adalah pohon biner yang mempunyai simpul dengan nomor urut 1 sampai dengan n. i = level Level Anak terkiri menunjukkan anak Terkanan menujukkan 1 Jumlah simpul jumlah max simpul i – 1 i 2 2 – 1 2 3 4
LEVEL ANAK TERKIRI
ANAK TERKANAN
1 1 1
2 2 3
3 4 7
4 8 15
5 16 31
6 32 63
7 64 127
8 128 255
2013 7
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
A
9 256 511
10 512 1023
11 1024 2047
12 . . . .
2048 . . . .
4095 . . . .
No anak kiri (Left Child) = No. Parent * 2
No anak kanan (Right Child) = (No. Parent *2) + 1
No Parent = No Child
2
Pertanyaan
1. Pohon dengan simpul jumlah simpul = 273 merupakan lengkap atau penuh
2. Berapa kedalamannya ?
3. No berapa simpul terkiri dari level tersebut ?
4. berapa jumlah maxsimum simpul level 7
No berapa anak kanan dari simpul ke 180 ?…..ada dilevel berapa anak tersebut.
No. berapa orang tua dari simpul ke 83 ? … ada dilevel berapa orangtua tsb
Kedalaman minimal dari pohon biner adalah :
2 Log n + 1 -- dimana n = jumlah simpul
Contoh bila n = 15
Maka kedalamannya minimal = 2 Log 15 + 1
= Log 15 + 1
Log 2
= 1.17 / 0.3 + 1 = 3 + 1
= 4
SKEWED TREE
Binary Tree yang semua nodenya (kecuali leaf/daun) hanya memiliki satu child.
Adalah Pohon biner yang miring kekiri atau kekanan, atau dengan kata lain pohon biner dengan
subtree kiri kosong atau subtree kanan kosong.
2013 8
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
B
C
D
Pohon Biner seperti ini disimpan dalam bentuk Array sangat memboroskan
Bentuk Array sangat memboroskan
REPRESENTASINYA sebagai berikut :
1 A
2 B
3
4 C
5
6
7
8 D
9
15
Kosong sebanyak 7 Elemen
Berdasarkan full binary tree, pohon jenis diatas memiliki banyak simpul kosong.
Seharusnya dibawah A, terdapat simpul anak yg selevel, namun hanya terdapat 1 simpul anak
yaitu B, dibawah B, seharusnya terdapat 1 simpul anak B, 2 simpul anak lainnya yang selevel
atau 2 simpul anak dari simpul yg selevel dengan B, kosong 3 array.
Terlihat dari contoh diatas bahwa penyimpanan data dalam memori dari pohon biner
hanya menguntungkan kalau pohon binernya penuh sehingga tidak memboroskan tempat.
Untuk menanggulangi ini maka perlu menggunakan representasi Linked List, dimana masing-
masing simpul akan mempunyai 3 field yaitu :
LCHILD DATA RCHILD
ATAU
Contoh Representasi Link Pohon Biner Biasa
DATA
LCHILD RCHILD
2013 9
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
*
struct NAMA_SIMPUL { Tipe Data DATA; Struct NAMA_SIMPUL *RCHILD, *LCHILD; };
Skewed Tree
PENELUSURAN POHON BINER ( Binary Tree Traversal )
Ada 3 macam Traversal :
5. Inorder Traversal
6. Preorder Traversal
7. Postorder Traversal
1. Inorder Traversal
Akan menghasilkan bentuk INFIX, Bentuknya :
Operand1 Operator Operand2 A + B
Contoh
Tulislah hasil penelusuran pohon biner berikut ini bila ditelusuri secara INORDER.
B
0 D 0 0 E 0
C
0 F 0 0 G 0
A
A 0
B 0
C 0
2013 10
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
+ C
A B
*
+ C
A
B
Langkah-langkahnya :
1. Telusuri Subtree (sub pohon) Kiri
2. Proses Simpul Akar
3. Telusuri Subtree(Sub pohon) Kanan
maka akan diperoleh persamaan INORDERnya adalah: (A + B) * C
2. Preorder Traversal
Akan menghasilkan bentuk PREFIX, Bentuknya
Operator Operand1 Operand2
+ A B
Contoh
Tulislah hasil penelusuran pohon biner berikut ini bila ditelusuri secara PREORDER.
Langkah-langkahnya :
1. Proses Simpul Akar
2. Telusuri Subtree(sub pohon) Kiri
3. Telusuri Subtree(Sub pohon) Kanan
maka akan diperoleh persamaan PREORDERnya adalah: * + A B C
3. Postorder Traversal
Akan menghasilkan bentuk POSTFIX, Bentuknya :
Operand1 Operand2 Operator
A B +
2013 11
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
*
+ C
A B
-
C
/
A +
5
D
- *
7 E F G
*
Contoh
Tulislah hasil penelusuran pohon biner berikut ini bila ditelusuri secara POSTORDER.
Langkah-langkahnya :
4. Telusuri Subtree(sub pohon) Kiri
5. Telusuri Subtree(Sub pohon) Kanan
6. Proses Simpul akar
maka akan diperoleh persamaan POSTORDERnya adalah: A B + C *
SOAL latihan untuk minggu depan
18. Buat Persamaan INORDER, PREORDER, DAN POST ORDER dari Tree Berikut :
19. Diket Persamaan POST ORDER :
A B / C * D E ** F / + 2 – Buat INORDER, PREORDER, dan buat Tree nya.
Representasi Dari Pohon K-Ary ke Binary.
2013 12
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
Pohon 3 Ary
Ke binary 2 Aray
Pohon K-Ary
Jumlah NullLink = n (k – 1) +1
Pohon Binary
K=2 Jumlah NullLink = n (k – 1) +1
= n (2 - 1) +1
= n + 1
berapa besar penghematan memory bila dirubah ke binary…gambar diatas?.
Kalau ada 3 pohon kemudian disatukan menjadi 1 pohon.
A
B C D
E F G H I J
A
B
E C
D F G
H
I
J
A E G
2013 13
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
B C D
F H I
A
B E
C
D
F G
H
I
2013 14
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
Daftar Pustaka
Moh. Sjukani, Struktur Data [Algoritma & Struktur Data 2] dengan C, C++, Mitra Wacana Media,
Jakarta, 2008.
Tri Daryanto, Modul Algoritma Pemrograman dan Struktur Data, Universitas Mercu Buana,
Jakarta.
Thompson Susabda Ngoen, Pengantar Algoritma dengan Bahasa C, Salemba Teknika, Jakarta,
2004
2013 1
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
MODUL PERKULIAHAN
Algoritma Pemrograman dan Struktur Data
Modul Standar untuk digunakan dalam Perkuliahan di Universitas Mercu Buana
Fakultas Program Studi Tatap Muka Kode MK Disusun Oleh
Ilmu Komputer Sistem Informasi
09 87007 Fajar Masya
Abstract Kompetensi
3. Balancing Binary Search Tree Mengetahui apa yang dimaksud
2013 2
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
4. Height Balanced Tree 5. Bound Balanced Tree
dengan Height Balanced Tree dan Bound Balanced Tree dan contohnya
BALANCING BINARY SEARCH TREE
BALANCED BINARY TREE (POHON BINER SEIMBANG)
Pohon Biner Seimbang atau Berimbang adalah pohon biner yang ketinggian subpohon
kiri dan subpohon kanan untuk setiap setiap simpul, paling banyak berselisih 1. Dengan
demikian, pohon biner complete dan almost complete adalah pohon berimbang, dan pohon
miring (skewed) dengan ketinggian (depth) lebih besar dari 1, adalah pohon biner tak
seimbang.
Contoh pohon biner berimbang (balanced) dan pohon biner tidak berimbang (unbalanced) :
root
Gambar 1. Balanced Binary Tree
root
A
B C
D E F G
H I J K
A
B C
D E F
2013 3
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
Gambar 2. Unbalanced Binary Tree
root
Gambar 3. Unbalanced Binary Tree
HEIGHT BALANCED TREE (POHON KETINGGIAN SEIMBANG)
Pohon binar yang mempunyai sifat bahwa ketinggian subpohon kiri dan subpohon kanan
dari pohon tersebut berbeda paling banyak 1, disebut Pohon Ketinggian Seimbang atau Height
Balanced Tree (HBT).
Contoh :
HBT Bukan HBT
B C
A
B
D
C
E
F
L H I J K M
A
B C
E F G
J K
A
2013 4
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
KETINGGIAN MINIMUM DAN MAKSIMUM POHON BINAR
Jika banyaknya simpul = N, maka :
1. Ketinggian Minimum adalah : Hmin = INT(2log N) + 1
2. Ketinggian Maksimum adalah : N
Contoh : untuk N = 8
Ketinggian Minimum adalah : Hmin = INT(2log N) + 1
= INT(2log 8) + 1
= INT(2log 23) + 1
= INT(3) + 1
= 3 + 1
= 4
Ketinggian Maksimum adalah : 8
PENYAJIAN POHON BINAR DALAM MEMORI
Penyajian pohon binar dalam memori dengan dua cara, yaitu :
1. Penyajian Kait (link)
2. Penyajian Sequential.
1. PENYAJIAN KAIT
Kalau tidak dinyatakan lain, suatu pohon binar T akan disimpan dalam memori secara
penyajian kait. Penyajian ini menggunakan tiga array sejajar INFO, LEFT dan RIGHT, serta
variabel penuding ROOT.
Masing-masing simpul N dari pohon T berkorespondensi dengan suatu lokasi K, sedemikan
sehingga :
2013 5
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
(1) INFO(K) berisi data pada simpul N.
(2) LEFT(K) berisi lokasi dari anak kiri simpul N.
(3) RIGHT(K) berisi lokasi dari anak kanan simpul N.
Contoh : Pohon Binar T
A B C D E G H F J K L Skema Penyajian Kait dari pohon binar T
Root
A
B C
x D x E x x G x H
2013 6
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
x F x J x x K x x L x
Root Avail 2 10 INFO LEFT RIGHT
1 L 0 0
2 A 7 5
3 8
4 G 0 0
5 C 4 17
6 13
7 B 16 12
8 6
9 F 0 0
10 3
11 J 1 0
12 E 9 0
13 15
14 19
15 18
16 D 0 0
17 H 11 20
18 14
19 0
20 K 0 0
2. PENYAJIAN SEQUENTIAL
Penyajian pada pohon binar T ini hanya menggunakan sebuah array linear tunggal TREE
sebagai berikut :
2013 7
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
1. Akar R dari pohon T tersimpan sebagai TREE[1]
2. Jika simpul N menduduki TREE[K] maka anak kirinya tersimpan dalam TREE[2*K] dan anak
kanannya dalam TREE[2*K+1]
Contoh :
45
22 77 11 30 90
15 25 88 TREE
1 45
2 22
3 77
4 11
5 30
6
7 90
8
9 15
10 25
11
12
13
14 88
15
.
.
.
29
Dapat dilihat bahwa penyajian membutuhkan 14 lokasi dalam array TREE, meskipun T hanya
mempunyai 9 simpul. Kenyataannya, bila kita memasukkan elemen nol sebagai suksesor dari
simpul terminal, dibutuhkan TREE[29] untuk suksesor kanan dari TREE[14].
2013 8
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
PENYAJIAN POHON UMUM SECARA POHON BINAR
Kita dapat menyajikan pohon umum secara pohon binar dengan algoritma sebagai berikut :
1. Tambahkan ruas baru yang menghubungkan 2 simpul bersaudara yang berdampingan, lalu
kita hapus ruas dari simpul ayah ke anak, kecuali ruas ke simpul anak paling kiri.
2. Rotasikan sebesar 45 , searah putaran jarum jam terhadap pohon hasil langkah pertama.
Contoh Pohon Umum
A B C D E F G H I J
K L Langkah Pertama
A B C D
2013 9
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
E F G H I J K L Langkah kedua
A B E C F D G H K I L J
2013 10
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
NOTASI PREFIX, INFIX DAN POSTFIX SERTA TRAVERSAL POHON
Traversal adalah proses kunjungan dalam pohon, dengan setiap Simpul hanya dikunjungi tepat
satu kali. Tiga kegiatan yang terdapat dalam traversal pohon binar adalah :
1. Mengunjungi simpul akar (root)
2. Melakukan traversal subpohon kiri, dan
3. Melakukan traversal subpohon kanan
Terdapat tiga macam traversal pohon, yaitu :
1. Traversal Pre-order, dilakukan berturut-turut :
a. Kunjungi simpul akar
b. Lakukan traversal subpohon kiri
c. Lakukukan traversal subpohon kanan
2. Traversal In-order, dilakukan berturut-turut :
a. Lakukan traversal subpohon kiri
b. Kunjungi simpul akar
c. Lakukan traversal subpohon kanan
3. Traversal Post-order, dilakukan berturut-turut :
a. Lakukan traversal subpohon kiri
b. Lakukan traversal subpohon kanan
c. Kunjungi simpul akar
Contoh :
F Untai yang dihasilkan secara Pre-order FDBACEG D G B E A C
2013 11
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
F Untai yang dihasilkan secara In-order ABCDEFG D G B E A C F Untai yang dihasilkan secara Post-order ACBEDGF D G B E A C
2013 12
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
LATIHAN :
1. Dari gambar pohon biner di bawah ini buatlah kunjungan secara pre-order, in-order dan post-
order :
a.
b.
23
21
18
10
5 14 25
C
F
B
D
A
G
2013 13
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
Daftar Pustaka
Andri Kristanto, Algoritma & Pemrograman dengan C++ Edisi 2, Graha Ilmu, Yogyakarta, 2009.
Moh. Sjukani, Struktur Data [Algoritma & Struktur Data 2] dengan C, C++, Mitra Wacana Media,
Jakarta, 2008.
Tri Daryanto, Modul Algoritma Pemrograman dan Struktur Data, Universitas Mercu Buana,
Jakarta.
Thompson Susabda Ngoen, Pengantar Algoritma dengan Bahasa C, Salemba Teknika, Jakarta,
2004
2013 1
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
MODUL PERKULIAHAN
Algoritma Pemrograman dan Struktur Data
Modul Standar untuk digunakan dalam Perkuliahan di Universitas Mercu Buana
Fakultas Program Studi Tatap Muka Kode MK Disusun Oleh
Ilmu Komputer Sistem Informasi
10 87007 Team Dosen
Abstract Kompetensi
6. Sequential Search Memahami bagaimana sistem
2013 2
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
7. Binary Search Tree
Pencarian data
BINARY SEARCH TREE
BINARY SEARCH TREE adalah Binary tree dengan sifat bahwa :
semua left child harus lebih kecil daripada right child dan parentnya.
Juga semua right child harus lebih besar daripada left child dan parentnya.
Binary search tree dibuat untuk mengatasi kelemahan pada binary tree biasa, yaitu kesulitan
dalam searching atau pencarian node tertentu dalam binary tree.
Contoh binary search tree umum :
Pada dasarnya operasi dalam binary search tree sama dengan binary tree biasa, kecuali
pada operasi insert, update dan delete.
~ OPERASI INSERT
Pada binary search tree, insert dilakukan setelah ditemukan lokasi yang tepat (lokasi tidak
ditentukan oleh user sendiri).
Misalnya anda diminta memasukkan angka-angka berikut ini ke dalam suatu binary search
tree. Angka-angka tersebut adalah 12, 15, 13, 9, 5, 11, 20
Algoritma dari insert ini adalah :
1. Masukkan sebuah huruf, angka pertama yang masuk akan menjadi root.
2. Kemudian masukkan angka berikutnya ke dalam tree tersebut.
3. Bandingkan angka tersebut dengan angka yang menjadi root, apabila angkanya lebih
besar dari root maka letaknya ada di sebelah kanan. Kalau angkanya lebih kecil, maka
letaknya di sebelah kiri root.
10 23
5 14 21 25
18
2013 3
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
4. Untuk sub root atau child, caranya juga sama dengan langkah 3.
Implementasi dari algoritma di atas dapat dilihat pada ilustrasi gambar berikut ini ;
1. Insert angka 12
Masukkan angka 12 ke dalam tree. Karena tree masih kosong maka otomatis angka 12
menjadi root.
2. Insert angka 15
Karena angka 15 lebih besar dari angka 12, maka sesuai dengan aturan yang ada
dalam binary search tree, angka 15 ini berada di sebelah kanan angka 12.
3. Insert angka13
Karena angka 13 yang dimasukkan lebih besar dari angka 12, maka sesuai dengan
aturan yang berlaku, angka 13 ini harus berada di sebelah kanan angka 12. Kemudian
karena disebelah kanan angka 12 sudah ada angka 15, maka angka 13 ini harus
dibandingkan lagi dengan angka 15. Karena angka 13 lebih kecil dari angka 15, maka
posisinya ada disebelah kiri angka 15.
4. Insert angka 9
Karena angka 9 yang dimasukkan lebih kecil dari angka 12, maka sesuai dengan
aturan yang berlaku angka 9 ini harus berada di sebelah kiri angka 12.
12
12
15
15
12
13
12
2013 4
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
5. Insert angka 5
Karena angka 5 lebih kecil dari angka 12, maka sesuai aturan yang berlaku angka 5 ini
harus berada di sebelah kiri angka 12. Kemudian karena di sebelah kiri angka 12 sudah
ada angka 9, maka angka 5 ini harus dibandingkan lagi dengan angka 9. Karena angka
5 lebih kecil dari angka 9, maka posisinya ada di sebelah kiri angka 9.
6. Insert angka 11
Karena angka 11 lebih kecil dari angka 12, maka sesuai dengan aturan yang berlaku
angka 11 ini harus berada di sebelah kiri angka 12. Kemudian karena di sebelah kiri
angka 12 sudah ada angka 9, maka angka 11 ini harus dibandingkan lagi dengan
angka 9. Karena angka 11 lebih besar dari angka 9, maka posisinya ada di sebelah
kanan angka 9.
15
13
9
15
13
12
9
5
15
13
12
9
5 11
2013 5
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
7. Insert angka 20
Karena angka 20 lebih besar dari angka 12, maka sesuai dengan aturan yang berlaku
angka 20 ini harus berada di sebelah kanan angka 12. Kemudian karena di sebelah
kanan angka 12 sudah ada angka 15, maka angka 20 ini harus dibandingkan lagi
dengan angka 15. Karena angka 20 lebih besar dari angka 15, maka posisinya ada di
sebelah kanan angka 15.
~ OPERASI UPDATE
Seperti pada binary tree biasa, namun disini update akan berpengaruh pada posisi node
selanjutnya. Bila setelah diupdate mengakibatkan tree tersebut bukan Binary Search Tree
lagi, maka harus dilakukan perubahan pada tree dengan melakukan rotasi supaya tetap
menjadi Binary Search Tree.
~ OPERASI DELETE
Delete dilakukan setelah ditemukan lokasi yang tepat. (lokasi tidak ditentukan oleh user
sendiri). Misalnya dari angka-angka berikut ini dan sesuai dengan permasalahan pada
operasi insert yaitu 12, 15, 13, 9, 5, 11, 20. Anda diminta untuk menghapus angka 5, 20, 12,
9 dan 15.
Adapun algoritma dari delete ini adalah :
1. Tentukan angka yang akan dihapus.
2. Kalau angka tersebut merupakan leaf, maka bisa langsung dihapus.
15
13
12
9
5 11 20
2013 6
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
3. Kalau angka yang dihapus mempunyai 1 atau lebih cabang, maka posisi angka yang
dihapus dapat digantikan pada angka yang merupakan leaf baik itu berada pada sub tree
kiri atau kanan.
Implementasi dari algoritma di atas dapat dilihat pada ilustrasi gambar berikut ini :
1. Delete angka 5
Karena angka 5 merupakan leaf, maka angka 5 ini langsung dapat dihapus.
2. Delete angka 20
Karena angka 20 ini juga termasuk leaf, maka angka ini juga bisa segera dihapus.
3. Delete angka 12
Karena angka 12 ini mempunyai 2 anak cabang, maka untuk menggantikan angka 12
yang dihapus dapat menggunakan angka yang ada di sebelah kiri subtree bagian kanan
yaitu angka 13.
15
13
9
12
11 20
15
13
9
12
11
15
13
9
11
2013 7
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
4. Delete angka 9
Karena angka 9 mempunyai 1 cabang di sebelah kiri, maka angka 11 yang merupakan
cabang dari 9 dapat menggantikan angka 9 yang dihapus.
5. Delete angka 15
Karena angka 15 merupakan leaf, maka angka ini dapat segera dihapus.
LATIHAN :
Buatlah algoritma dan program untuk memasukkan node baru ke dalam pohon dengan
menggunakan prosedure pre-order, in-order, dan post-order
Algoritma :
1. Tentukan deklarasi struktur untuk menampung elemen yang akan dimasukkan pada
tree.
2. Deklarasikan node baru.
3. Tentukan fungsi pre-order pada tree.
4. Tentukan fungsi in-order pada tree.
5. Tentukan fungsi post-order pada tree.
6. Fungsi pre-order adalah sebagai berikut :
void preOrder(POKOK *T)
{
if(!PokokKosong(T)) {
15
13
11
13
9
2013 8
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
printf("%c ", T->data);
preOrder(T->left);
preOrder(T->right);
}
}
7. Fungsi in-order pada tree adalah sebagai berikut :
void inOrder(POKOK *T)
{
if(!PokokKosong(T)) {
inOrder(T->left);
printf("%c ", T->data);
inOrder(T->right);
}
}
8. Fungsi post-order pada tree adalah sebagai berikut :
void postOrder(POKOK *T)
{
if(!PokokKosong(T)) {
postOrder(T->left);
postOrder(T->right);
printf("%c ", T->data);
}
}
9. Masukkan node ke dalam tree.
10. Jika ingin ditampilkan secara pre-order lakukan langkah 6.
11. Jika ingin ditampilkan secara in-order lakukan langkah 7.
12. Jika ingin ditampilkan secara post-order lakukan langkah 8.
13. Selesai.
2013 9
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
Implementasi algoritma di atas pada program adalah sebagai berikut :
2013 10
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
2013 11
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
Bila Program dijalankan, hasilnya adalah :
Gambar pohon binernya adalah :
L
D
E
M
I O
2013 12
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
Daftar Pustaka
Andri Kristanto, Algoritma & Pemrograman dengan C++ Edisi 2, Graha Ilmu, Yogyakarta, 2009.
Moh. Sjukani, Struktur Data [Algoritma & Struktur Data 2] dengan C, C++, Mitra Wacana Media,
Jakarta, 2008.
Tri Daryanto, Modul Algoritma Pemrograman dan Struktur Data, Universitas Mercu Buana,
Jakarta.
Thompson Susabda Ngoen, Pengantar Algoritma dengan Bahasa C, Salemba Teknika, Jakarta,
2004
2013 1
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
MODUL PERKULIAHAN
Algoritma Pemrograman dan Struktur Data
Modul Standar untuk digunakan dalam Perkuliahan di Universitas Mercu Buana
Fakultas Program Studi Tatap Muka Kode MK Disusun Oleh
Ilmu Komputer Sistem Informasi
11 87007 Team Dosen
Abstract Kompetensi Heap Sort, Merge Sort, Dan Radix Sort
Memahami Algoritma Heap, Merge dan Radix Sort dan menerapkannya
2013 2
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
kedalam bahasa pemrograman.
METODE SORT LANJUTAN
A. Merge Sort
Sort ini digunakan untuk jumlah data yang besar, dengan membagi-bagi menjadi sub
bagian-sub bagian mulai dari sedikit elemen hingga keseluruhan elemen tersebut menjadi
data yang sudah urut. Sortir ini digunakan jika kapasitas memori tidak sanggup untuk
menampung seluruh data yang akan disortir.
Contoh 14 elemen berikut akan disortir:
66, 33, 40, 22, 55, 88, 60, 11, 80, 20, 50, 44, 77, 30
Langkah 1 : data dibagi menjadi sub-sub yang tiap subnya berisi 2 elemen yang kemudian
disortir hasilnya :
33 , 66 22 , 40 55 , 88 11 , 60 20 , 80 44 , 50 30 , 70
Langkah 2 : gabungkan 2 sub bagian sebelumnya menjadi 1 sub bagian kemudian disortir
hasilnya :
22, 33, 40, 66 11, 55, 60, 88 22, 44, 50, 80 30, 70
Langkah 3 : Lakukan seperti langkah 2 hingga seluruh sub bagian menjadi 1 subbagian.
11, 22, 33, 40, 55, 60, 66, 88 20, 30, 44, 50, 77, 80
Hasil Akhir : 11, 20, 22, 30, 33, 40, 44, 50, 55, 60, 66, 77, 80, 88
B. Heap Sort : Aplikasi dari Binary Tree
Heap sort merupakan teknik sortir yang memanfaatkan prinsip pohon Heap. Pohon heap
adalah pohon biner complete dimana nilai yang terkandung dalam simpul ayah lebih besar atau
2013 3
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
lebih kecil dari nilai kedua buah simpul anaknya, sedangkan simpul anak cabang kiri bisa lebih
besar, lebih kecil atau sama dengan nilai simpul anak cabang kanan. Pohon biner complete
adalah pohon biner yang nomor simpulnya urut continue, tidak ada yang terputus.
Maxheap adalah penyortiran dari besar ke kecil (Descending). Minheap adalah
penyortiran dari kecil ke besar (ascending). Untuk melakukan penyortiran ini maka langkah
pertama yang dilakukan adalah membentuk pohon heap.
Pembentukan pohon heap dilakukan dengan langkah-langkah :
20. Ikuti bentuk complete binary tree ( pohon biner lengkap)
21. Ayah harus memiliki nilai lebih besar atau sama dengan anak-anaknya (untuk
maxheap), ayah harus memiliki nilai lebih kecil atau sama dengan anak-anaknya
(untuk minheap).
Pada contoh ini akan dibuat pohon maxheap dengan elemen-elemen :
44 30 50 22 60 55 77 55
44 44 50 30 30 44 a. elemen 44 b. elemen 30 c. elemen 50 50 60 60 30 44 50 44 50 55 22 22 30 22 30 44 d. elemen 22 e. elemen 60 f. elemen 55 77 77 50 60 55 60 22 30 44 55 50 30 44 55
2013 4
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
22
g. elemen 77 h. elemen 55
Penulisan hasil sortir mengikuti langkah-langkah penghapusan elemen sebagai berikut :
1. Hapus akarnya (Root)
2. Letakkan elemen terakhir di posisi akarnya (root)
3. Lakukan tindakan atas elemen tersebut seperti langkah-langkah pembuatan pohon
heap.
4. Lakukan Langkah 1 hingga pohon menjadi kosong (empty tree)
Perhatikan gambar dibawah ini bagaimana setelah elemen 77 (root) dihapus atau dijadikan
elemen awal dari hasil sortir
22
55 60
50 30 44 55
a. penghapusan elemen 77 , maka elemen 22 jadi root
60
55 22
50 30 44 55
b. elemen 22 mengarah keanak kanan
60
55 55
50 30 44 22
2013 5
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
c. elemen 22 mengarah keanak kanan
( fase 1 )
3 gambar diatas pembentukan pohon heap kembali setelah elemen 77 dihilangkan.
Untuk fase 2 elemen 60 sebagai akar akan dijadikan hasil, sehingga elemen elemen hasil
sortirnya menjadi 77, 66 dan seterusnya. Berikut gambar heap pada akhir fase 2 hingga fase 7
(akhir).
55
55 44
50 30 22
a. pohon heap pada akhir fase 2 55
50 44
22 30
b. pohon heap pada akhir fase 3
50
30 44
22 c. pohon heap pada akhir fase 4
50
2013 6
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
30 22
d. pohon heap pada akhir fase 5
30
22
e. pohon heap pada akhir fase 6 22
f. pohon heap pada akhir fase 7
sehingga diperoleh urutan : 77 60 55 55 50 44 30 22 C. Radix Sort
Radix adalah dasar atau basis (base) bilangan. Bilangan yang kita gunakan sehari hari
adalah bilangan decimal yaitu bilangan dengan dasar 10 (sepuluh). Dengan demikian,
dikatakan, bilangan decimal radixnya = 10, karena mengenal 10 macam notasi atau simbol atau
angka, yaitu 0 sampai dengan 9.
Contoh sebuah bilangan decimal
Bilangan yang dicontohkan diatas, terdiri dari 4 angka atau 4 digit, ada angka satuan
(setiap satu satuan bernilai 1 ), ada angka puluhan (setiap satu satuan bernilai 10 ), angka
ratusan dan angka ribuan. Bilangan diatas bernilai : “ 2 ribu 4 ratus 7 puluh 5 “.
Radix Sort adalah sort yang dilakukan dengan cara mengelompokkan nilai-nilai, bukan
membandingkan nilai besar atau kecil. Nilai-nilai dikelompokkan secara bertahap, dimana
setiap tahap nilai-nilai dikelompokkan berdasarkan nilai setiap posisi angka, satuan, puluhan
ratusan dan seterusnya.
Ilustrasi proses Radix Sort :
Misal data yang ingin disort (tentunya dalam array satu dimensi) sebagai berikut :
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
25 172 38 165 32 725 15 214 56 77 5 42 321 45 11
Dari semua nilai diatas, nilai yang terbesar adalah : 725.
Karena bilangan terbesar terdiri dari 3 angka, maka pengelompokan dilakukan 3 tahap.
Tahap – 1.
2 4 7 5 1000 100 10 1
2013 7
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
Nilai-nilai dikelompokkan berdasarkan angka satuan yang sama, sehingga terlihat kelompok
sebagai berikut :
Angka Kelompok nilai yang angka satuannya sama
Ratusan
0
1 321 11
2 172 32 42
3
4 214
5 25 165 725 15 5 45
6 56
7 77
8 38
9
Kemudian dijadikan satu kembali kedalam array menjadi :
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
321 11 172 32 42 214 25 165 725 15 5 45 56 77 38
Tahap – 2.
Hasil pengelompokan Tahap-1, berdasarkan angka satuan didapat :
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
321 11 172 32 42 214 25 165 725 15 5 45 56 77 38
Nilai-nilai ini kemudian dikelompokkan berdasarkan nilai angka puluhan, sehingga didapat
kelompok sebagai berikut :
Angka Kelompok nilai yang angka puluhannya sama
Ratusan
0 05
1 11 214 15
2 321 25 725
3 32 38
4 42 45
5 56
6 165
7 172 77
8
9
Kemudian dijadikan satu kembali kedalam array menjadi :
2013 8
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
5 11 214 15 321 25 725 32 38 42 45 56 165 172 77
Tahap – 3.
Hasil pengelompokan Tahap-2, berdasarkan angka puluhan diatas, dikelompokkan lagi
berdasarkan angka nilai ratusan, sehingga didapat kelompok sebagai berikut :
Angka Kelompok nilai yang angka ratusannya sama
Ratusan
0 005 011 015 025 032 038 042 045 056 077
1 165 172
2 214
3 321
4
5
6
7 725
8
9
Kemudian dijadikan satu kembali kedalam array menjadi :
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
5 11 15 25 32 38 42 45 56 77 165 172 214 321 725
Hasil akhir sudah urut menaik
ALGORITMA RADIX SORT
Ada beberapa macam algoritma untuk Radix Sort yang akan ditunjukkan berikut ini.
Cara ini yang paling mudah dipahami. Cara ini menggunakan array dua dimensi untuk
menempatkan nilai-nilai yang sama untuk radix tertentu ( satuan, puluhan, ratusan dan
seterusnya).
Misalkan data yang akan di sort berada dalam array int A[15] sebagai berikut :
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
A 321 11 172 32 42 214 25 165 725 15 5 45 56 77 38
Disiapkan array 2 dimensi int B[10][15] dan mengisinya dengan nilai awal sebagai berikut :
2013 9
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
2 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
3 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
B 4 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
5 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
6 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
7 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
8 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
9 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
Disini nilai awal yang diisikan ke setiap elemen array adalah : -1.
Sebenarnya nilai yang dipilih tidak harus bernilai –1, dapat menggunakan nilai berapa saja,
asal dipastikan tidak sama dengan salah satu nilai yang disort. Angka yang terbesar adalah
725, yang terdiri dari 3 angka, sehingga prosesnya terdiri dari 3 tahap.
TAHAP-1.
Menyalin isi array A ke array dua dimensi B, dengan menempatkan nilai satuan pada baris
yang sama. Nilai satuan 1 berada di baris no. 1, nilai satuan 2 berada di baris no.2 dan
seterusnya, sehingga hasilnya terlihat sebagai berikut :
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
1 321 11 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
2 172 32 42 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
3 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
B 4 214 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
5 25 165 725 15 5 45 -1 -1 -1 -1 -1 -1 -1 -1 -1
6 56 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
7 77 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
8 38 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
9 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
Kemudian isi array dua dimensi B ini disalin kembali ke array satu dimensi A sehingga hasilnya
menjadi sebagai berikut :
Catatan : Jangan lupa, setelah isi array dua dimensi B disalin kembali ke array satu dimensi A, maka
seluruh isi elemen array dua dimensi B diisi dengan : -1
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
2013 10
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
A 321 11 172 32 42 214 25 165 725 15 5 45 56 77 38
TAHAP-2.
Mengulang kembali proses seperti pada Tahap-1, dengan menya;in isi array A ke array B
dengan pengelompokan berdasarkan nilai puluhan, sehingga didapat hasil sebagai berikut :
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
A 321 11 172 32 42 214 25 165 725 15 5 45 56 77 38
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
0 05 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
1 11 214 15 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
2 321 25 725 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
3 32 38 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
B 4 42 45 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
5 56 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
6 165 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
7 172 77 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
8 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
9 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
Salin kembali ke array satu dimensi A
0
1 2
3
4
5
6
7
8
9
10
11
12
13
14
5 11 214 15 321 25 725 32 38 42 45 56 165 172 77
TAHAP-3.
Mengulang kembali proses seperti pada Tahap-2, dengan menyalin isi array A ke array B
dengan pengelompokan berdasarkan nilai ratusan, sehingga didapat hasil sebagai berikut :
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
A 321 11 172 32 42 214 25 165 725 15 5 45 56 77 38
Pengelompokan berdasarkan angka ratusan
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
0 005 011 015 025 032 038 042 045 056 077 -1 -1 -1 -1 -1
1 165 172 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
2 214 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
3 321 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
B 4 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
Pengelompokan berdasarkan angka puluhan
2013 11
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
5 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
6 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
7 725 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
8 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
9 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
Salin kembali ke array satu dimensi A
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
5 11 15 25 32 38 42 45 56 77 165 172 214 321 725
Didapat hasil akhir yang urut menaik
2013 12
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
Daftar Pustaka
Andri Kristanto, Algoritma & Pemrograman dengan C++ Edisi 2, Graha Ilmu, Yogyakarta, 2009.
Moh. Sjukani, Struktur Data [Algoritma & Struktur Data 2] dengan C, C++, Mitra Wacana Media,
Jakarta, 2008.
Tri Daryanto, Modul Algoritma Pemrograman dan Struktur Data, Universitas Mercu Buana,
Jakarta.
Thompson Susabda Ngoen, Pengantar Algoritma dengan Bahasa C, Salemba Teknika, Jakarta,
2004
2013 1
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
MODUL PERKULIAHAN
Algoritma Pemrograman dan Struktur Data
Modul Standar untuk digunakan dalam Perkuliahan di Universitas Mercu Buana
Fakultas Program Studi Tatap Muka Kode MK Disusun Oleh
Ilmu Komputer Sistem Informasi
12 87007 Team Dosen
Abstract Kompetensi
8. Dasar Graph Mengetahui macam-macam
2013 2
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
9. Graph Berarah 10. Representasi Graph
Graph dan penerapannya
GRAPH (GRAF)
Graf termasuk struktur non linier. Graf adalah kumpulan titik yang tidak dihubungkan
maupun dihubungkan dengan garis. Seberapa besar titik itu digambarkan ataupun seberapa
panjang garis yang menghubungkan titik-titik itu tidak dipermasalahkan.
Titik dalam graf disebut simpul, vertex, node, atau point, dan kumpulan titik disebut
dengan vertices (nodes atau points). Garis yang menghubungkan vertex disebut dengan edge
dan kumpulan garis yang ada di graf disebut dengan edges.
Himpunan V (Vertex) yang elemennya disebut simpul (atau point atau node atau titik)
Himpunan E (Edge) yang merupakan pasangan tak urut dari simpul, anggotanya disebut
ruas (rusuk atau sisi)
Notasi : G(V,E)
Dimana : G = Graph
V = simpul atau vertex, atau node, atau titik.
E = Busur atau Edge, atau arc
Contoh sebuah graf : v2 e3 e1
v3
e4 v1 e2 e5 e7
v4 v5
e6
v4 v5
Simpul = Titik, Node atau Vertex
Istilah Vertex (dilambangkan dengan V)
Diilustrasikan dengan lingkaran
B
A
C
D E
2013 3
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
V = { v1 , v2 , v3 , v4 , v5 } dibaca : V terdiri dari v1 , v2 , v3 , v4 ,v5
Dalam matematik : V adalah himpunan dengan anggota v1 , v2 , v3 , v4 ,v5
Busur = Arc, Edge
Istilah Edge dilambangkan dengan E
E = { e1 , e2 , e3 , e4 , e5 , e6 , e7 }
Busur adalah 2 buah simpul yang berpasangan. Untuk menyatakan sebuah busur yang
merupakan pasangan simpul v1 dan v2 biasanya ditulis sebagai berikut :
ev1,v2 atau e1,2 atau (1,2)
Sebuah graf mungkin hanya terdiri dari satu simpul (gambar 1.). sebuah graf belum tentu
semua simpulnya terhubung dengan busur (gambar 2). Dalam sebuah graf mungkin saja ada
simpul yang tak terhubung dengan simpul lainnya oleh busur (gambar 3). Dalam sebuah graf
kemungkinan semua simpul saling berhubungan (gambar 4).
Gambar 1.
Gambar 2.
Gambar 3.
Gambar 4.
1. Graf Tak Berarah dan Graf Berarah
Dilihat dari bentuk busur (urutan penyebutan pasangan 2 buah simpul), graf dapat dibedakan
menjadi 2 macam :
A. Graf Tak Berarah (Undirected Graf atau Non Directed Graf)
Contoh : v2 e3 e1
v3
e4 v1 e2 e5 e7
v4 v5
e6
v4 v5
B
A
C
D E
2013 4
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
Pada graf Tak Berarah :
urutan simpul dalam sebuah busur tidak dipentingkan. Busur e1 dapat disebut busur
A,B atau B,A.
Identik dengan sebuah jalan yang menghubungkan dua buah titik, yang dapat dilalui
dari dua arah.
Pada gambar diatas terlihat bahwa dari A dapat ke B, dan dari B dapat ke A melalui
jalan yang sama.
B. Graf Berarah (Directed Graf atau sering ditulis Digraf)
Contoh : v2 e8 e9 e1 e3
v3
e4 v1 e2 e5 e7
v4 v5
e6
v4 v5
Pada Graf Berarah :
Urutan Simpul mempunyai arti.
Pada gambar di atas terlihat busur A,B adalah busur e1. Sedangkan busur B,A adalah
busur e8.
Identik dengan : kalau dari A ke B hanya dapat menggunakan jalan e1, sedangkan dari
B ke A hanya menggunakan jalan e8.
Pada gambar juga terlihat tidak ada jalan langsung dari simpul D ke simpul A.
2. GRAF BERBOBOT (WEIGHTED GRAPH)
Apabila setiap busur mempunyai sebuah nilai yang menyatakan hubungan antara dua
buah simpul, maka busur tersebut dikatakan mempunyai bobot, dan graf disebut graf berbobot
(Weighted Graph).
B
A
C
D E
2013 5
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
Bobot sebuah busur dapat menyatakan panjang sebuah jalan antara dua buah titik, atau
jumlah rata-rata kendaraan perhari yang melalui sebuah jalan atau mungkin saja selisih nilai
antara dua buah simpul dan sebagainya.
3. GRAF SEDERHANA (SIMPLE GRAPH) dan
GRAF TAK SEDERHANA (COMPLEX GRAPH)
Graf sederhana adalah graf yang mempunyai busur (hubungan antara dua buah simpul)
paling banyak hanya satu ‘macam’. Contoh-contoh gambar graf di atas adalah contoh graf
sederhana, baik berarah atau tidak berarah, berbobot atau tak berbobot.
Apabila dalam suatu graf ada paling sedikit dua buah simpul yang mempunyai
hubungan lebih dari satu macam, atau ada busur yang membentuk loop (busur yang keluar
dari dan masuk ke simpul yang sama), atau yang menyatakan hubungan di dalam simpul itu
sendiri, maka graf tersebut dikatakan graf tidak sederhana (complex graph), atau sering juga
disebut multi graph.
Contoh graf tidak sederhana
Gambar 5.
Gambar 6.
Gambar 7.
4. SUB GRAF
Contoh Graf Berbobot Tak Berarah :
3 5
12 8 6 4 3
Contoh Graf Berbobot Berarah :
7 4 5 3
12 6 4 8
v4 v5
3
B
A
C
D E
B
A
C
D E
2013 6
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
Sub graf adalah bagian dari graf. Bahkan graf itu sendiri merupakan sub graf dari dirinya
sendiri.
Contoh :
gambar 4a. Graf G
gambar 4b. Graf G1. Sub graf dari graf G
gambar 4c. Graf G2.
Sub graf dari graf G1, juga merupakan sub graf
dari graf G
gambar 4d. Graf G3
gambar 4e. Graf G4
gambar 4f. Graf G5
B
A
C
E
B
A
C
E
B
A
C
D E
B
A
C
D E
B
A C
D E
B
A
C
D E
2013 7
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
G2 dan G3 merupakan subgraf yang membentuk struktur pohon sehingga disebut Spanning
Tree. Spanning Tree adalah sub graph yang membentuk pohon dengan jumlah simpul sama
dengan yang dimiliki oleh graf aslinya. Tree adalah graf tak berarah terhubung yang tidak
mengandung sirkuit.
G4 dan G5 juga merupakan sub graf dengan jumlah simpul yang lebih sedikit dari jumlah
simpul graf aslinya. Dari gambar di atas terlihat bahwa :
1. Jumlah simpul suatu sub graf mungkin sama atau mungkin juga lebih sedikit dari jumlah
simpul graf aslinya. Secara matematik dinyatakan : V’ V
2. Jumlah busur suatu sub graf selalu lebih sedikit dari jumlah busur graf aslinya. Secara
matematik dinyatakan : E’ E
5. FULL CONNECTED GRAPH (Graf Terhubung Penuh)
Suatu Graf disebut full connected graf apabila setiap simpul dalam graf tersebut saling
berhubungan. Pada full connected grapf berlaku :
dimana : n = jumlah simpul, dan m = jumlah busur
Contoh : Gambar 5. Full Connected graf
Jumlah simpul (n) = 5, Maka jumlah busur (m) = 5(5-1)/2=10
6. REPRESENTASI GRAPH
Dalam pemrograman, agar data yang ada dalam graf dapat diolah, maka graf harus
dinyatakan dalam suatu struktur data yang dapat mewakili graf tersebut. Dalam hal ini graf perlu
dipresentasikan kedalam bentuk array dua dimensi yang sering juga disebut matrix, atau
direpresentasikan dalam bentuk linked-list. Bentuk mana yang dipilih, biasanya tergantung
kepada efisiensi dan kemudahan dalam membuat program. Berikut ini beberapa bentuk
representasi graph :
I. Representasi graf dalam bentuk matrix:
B
A C
D E
m = n ( n – 1 ) / 2
2013 8
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
1. Adjacency Matrix
2. Inverse Adjacency Matrix (hanya untuk Graf berarah)
3. Incidence Matrix
4. Vector Matrix
II. Representasi graf dalam bentuk Linked List:
1. Adjacency List
2. Inverse Adjacency List (Hanya untuk Graf Berarah)
6.1. Representasi Graf dalam bentuk Matrix
6.1.1. Adjacency Matrix Graf Tak Berarah (Undirected Graf)
Gambar 12.6.1. Graf G
Adjacency Matrix dari graf di atas adalah :
A 0
B 1
C 2
D 3
E 4
A 0 0 1 0 1 0
B 1 1 0 1 0 1
C 2 0 1 0 1 1
D 3 1 0 1 0 1
E 4 0 1 1 1 0
sumbu symetris
Setiap elemen matrix diisi dengan angka 0 atau angka 1.
Angka 1, menyatakan ada hubungan (ada busur) atau adjacent antara dua buah simpul.
B
A
C
D E
2013 9
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
Contoh angka 1 pada elemen (1,4) menyatakan ada hubungan antara simpul B dan simpul
E.
Matrix yang terbentuk adalah matrix bujur sangkar n * n, dimana n = jumlah simpul yang
ada dalam graf tersebut. Matrix ini menyatakan hubungan antara simpul satu dengan
simpul lainnya (simpul-simpul yang adjacent).
Matrix yang terbentuk adalah matrix symetris dengan sumbu symetris adalah diagonal dari
titik kiri atas ke titik kanan bawah. Terlihat bagian matrix sebelah atas sumbu symetris
sama dengan bagian matrix sebelah bawah sumbu symetris.
Data yang terdapat dalam baris maupun kolom, dapat menyatakan degree sebuah simpul.
Contoh : Baris D (baris 3) maupun Kolom D (kolom 3) jumlah angka 1 = 3.
Representasi Adjacency Matrix dalam bahasa C/C++
Untuk menyatakan simpul-simpul dibuatkan sebuah array yang berisi nama atau identitas
simpul : Char NmS [5] = ‘ABCDE’
Untuk merepresentasikan graf menjadi adjacency matrix dibuat instruksi sbb:
Int A[5] [5] = { 0,1,0,1,0, 1,0,1,0,1, 0,1,0,1,1, 1,0,1,0,1, 0,1,1,1,0 } ;
Jika ingin menggunakan tipe karakter (char), dapat ditulis sebagai berikut :
char A[5] [5] = { “01010” , “10101”, “01011”, “10101”, “01110” } ;
6.1.2. Adjacency Matrix Graf Berarah (Directed Graph)
Contoh :
B
A
C
D E
2013 10
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
Gambar 6.1.2 Graf Berarah
Adjacency Matrix dari graf berarah di atas adalah :
ke
A 0
B 1
C 2
D 3
E 4
dari A 0 0 1 0 1 0 dari simpul A ada 2 b usur yang keluar, satu menuju simpul B dan 1 lagi menuju simpul D.
B 1 1 0 1 0 1
C 2 0 1 0 1 1
D 3 0 0 1 0 1
E 4 0 0 0 0 0 Tidak ada busur yang keluar dari simpul E.
Matrix yang terbentuk adalah matrix bujur sangkar n * n, dimana n = jumlah simpul yang
ada dalam graf tersebut. Matrix ini menyatakan hubungan satu arah antara simpul satu
dengan simpul lainnya.
Matrix yang terbentuk mungkin symetris, mungkin juga tidak symetris. Menjadi symetris jika
hubungan antara dua buah simpul (v1 dan v2) terdapat busur dari v1 ke v2 dan juga
terdapat busur dari v2 ke v1.
Data yang terdapat dalam suatu baris, dapat menyatakan outdegree simpul yang
bersangkutan. Contoh : jumlah elemen yang nilainya = 1 pada baris B ada 3 elemen, ini
menyatakan outdegree simpul B = 3. Jadi yang keluar dari simpul B ada 3 busur yaitu
menuju simpul A, simpul C dan simpul E (lihat elemen yang berisi nilai 1).
Data yang terdapat dalam suatu kolom, dapat menyatakan indegree simpul yang
bersangkutan. Contoh : Jumlah elemen yang nilainya = 1 pada kolom B (kolom 1) ada 2
elemen, ini menyatakan indegree simpul B = 2. Jadi yang menuju simpul B ada 2 busur
yaitu dari simpul A dan dari simpul C (lihat elemen yang berisi nilai 1).
6.1.3. Inverse Adjacency Matrix Graf Berarah (Directed Graph)
Contoh :
B
A
C
2013 11
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
Gambar 6.1.3. Graf Berarah
Invers Adjacency Matrix graf berarah di atas adalah :
dari
A 0
B 1
C 2
D 3
E 4
menuju ke A 0 0 1 0 0 0 Hanya ada satu busur yang menuju simpul A yaitu dari simpul B.
B 1 1 0 1 0 0
C 2 0 1 0 1 0
D 3 1 0 1 0 0
E 4 0 1 1 1 0 ada 3 busur yang menuju simpul E yaitu dari simpul B, C dan D.
Perbedaan Inverse Adjacency Matrix dengan Adjacency Matrix adalah :
1. Data yang ada dalam suatu baris, menyatakan indegree, dan
2. Data yang ada dalam suatu kolom, menyatakan outdegree.
6.1.4. Adjacency Matrix Graf Berbobot Tak Berarah (Weighted Undirected Graph)
Contoh :
3 5
12 4 8 6
3
Gambar 6.1.4. Graf berbobot tak berarah
Adjacency Matrix Graf Berbobot Tak Berarah dari graf di atas adalah :
A 0
B 1
C 2
D 3
E 4
A 0 0 5 999 4 0 Simpul A berhubungan dengan simpul B dan simpul
D, masing-masing dengan bobot busur = 5 dan 4
B 1 5 0 3 999 12
D E
B
A
C
D E
2013 12
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
C 2 999 3 0 8 6
D 3 4 999 8 0 3
E 4 999 12 6 3 0
Nilai yang ada dalam tiap elemen matrix, menyatakan bobot busur yang menghubungkan
dua buah simpul yang bersangkutan.
Untuk dua buah simpul yang tidak berhubungan langsung atau tidak dihubungkan langsung
oleh sebuah busur, maka dianggap dihubungkan oleh sebuah busur yang nilai bobotnya
tidak terhingga.
Dalam pemrograman, untuk menyatakan nilai tak terhingga dapat digunakan sebuah nilai
yang dipastikan lebh besar dari total bobot seluruh busur yang ada atau yang mungkin ada.
Contoh : simpul A dan simpul C tidak berhubungan langsung melalui sebuah busur, maka
elemen matrix yang bersangkutan diisi dengan nilai 999. Karena nilai 999 dianggap cukup
mewakili nilai tak terhingga.
6.1.5. Incidence Matrix Graf Tak Berarah
Contoh : v2 e3 e1
v3
e4 v1 e2 e5 e7
v4 v5
e6
v4 v5
gambar 12.6.1.5 Graf tak berarah
Incidence Matrix dari graf di atas adalah :
e1 0
e2 1
e3 2
e4 3
e5 4
e6 5
e7 6
A 0 1 1 0 0 0 0 0 Matrix n * m
B
A
C
D E
2013 13
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
B 1 1 0 1 1 0 0 0 n = jumlah simpul,
C 2 0 0 1 0 1 0 1 m = jumlah busur
D 3 0 1 0 0 1 1 0
E 4 0 0 0 1 0 1 1
Incidence matrix ini dengan ukuran n * m merepresentasikan hubungan antara simpul
dengan busur.
Simpul yang dihubungkan oleh busur e2 adalah simpul A dan D. Kolom suatu incidence
matrix memperlihatkan hubungan antara dua buah simpul (hanya 2 buah simpul).
Sehingga dalam suatu kolom selalu ada dua angka ‘1’.
Busur yang ada hubungan dengan simpul B adalah busur : e1, e3 dan e4. Dalam baris B
terdapat 3 buah angka ‘1’. Artinya: dari simpul B keluar 3 buah busur yaitu e1, e3 dan e4.
6.1.6. Vector Matrix Graph Tak Berarah
Contoh : v2 e3 e1
v3
e4 v1 e2 e5 e7
v4 v5
e6
v4 v5
gambar 12.6.1.6. Graf tak berarah
Vector Matrix dari graf di atas adalah :
B
A
C
D E
2013 14
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
e 0
e 1
e 2
e 3
A 0 1 2 0 0
B 1 1 3 4 0
C 2 3 5 7 0 Simpul C berhubungan dengan busur : e3 , e5 dan e7
D 3 2 5 6 0
E 4 4 6 7 1
Vector matrix merepresentasikan hubungan simpul dan busur dengan cara lain, yang
berbeda dengan Incidence matrix.
Ukuran matrixnya : n * (n-1)
Dengan n = jumlah simpul, dan
(n-1) = jumlah maksimum busur yang mungkin incidence dengan
sebuah simpul
Contoh soal :
1. Sebuah graf dengan 4 buah simpul.
Ditanya : a. Berapa maksimum jumlah busur.
b. Berapa minimum jumlah busur.
Jawab :
a. maksimum jumlah busur = 6 (sama dengan jumlah busur pada full connected)
b. minimum jumlah simpul = 3
Maksimum jumlah busur = 6
minimum jumlah busur = 3
Minimum jumlah busur = 3
Minimum jumlah busur = 3
2. Sebuah graf full connected dengan 4 simpul, berapa jumlah busur yang ada?
Jawab : Jumlah busur = n(n-1)=(4*(4-1))/2=6
3. Sebuah graf dengan n simpul
a. berapa maksimum jumlah busur ? jawab : ½ * n * (n-1)
2013 15
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
b. Berapa minimum jumlah busur ? jawab : n-1
Soal Latihan :
1. Gambarkan Adjacency Matrix Graf berikut ini :
a.
b.
2. Gambarkan graf yang adjacency matrixnya diberikan sebagai berikut :
A 0
B 1
C 2
D 3
E 4
A 0 0 1 1 1 0
B 1 1 0 1 0 1
C 2 1 1 0 1 0
D 3 1 0 1 0 1
E 4 0 1 0 1 0
(a)
A 0
B 1
C 2
D 3
E 4
A 0 0 1 1 0 0
B 1 0 0 1 0 1
C 2 1 1 0 1 0
B
A
C
D E
B
A C
D E
2013 16
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
D 3 1 0 1 0 1
E 4 0 0 0 1 0
(b)
Daftar Pustaka
Moh. Sjukani, Struktur Data [Algoritma & Struktur Data 2] dengan C, C++, Mitra Wacana Media,
Jakarta, 2008.
Teddy Marcus Zakaria dan Agus Prijono, Konsep dan Implementasi Struktur Data, Informatika,
Bandung.
2013 1
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
MODUL PERKULIAHAN
Algoritma Pemrograman dan Struktur Data
Modul Standar untuk digunakan dalam Perkuliahan di Universitas Mercu Buana
Fakultas Program Studi Tatap Muka Kode MK Disusun Oleh
Ilmu Komputer Sistem Informasi
13 87007 Team Dosen
Abstract Kompetensi
11. Representasi Graph Mengetahui macam-macam
2013 2
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
Graph dan penerapannya
REPRESENTASI GRAF DALAM BENTUK
LINKED LIST
REPRESENTASI GRAF DALAM BENTUK LINKED LIST
1. Adjacency List Graf Tak Berarah
Contoh : e3 e1
e4 v1 e2 e5 e6
v4 v5
e7
gambar 1. Graf tak berarah
Adjacency List Graf tak Berarah Digambarkan Secara Sederhana
FIRST
A
B
C
D
E
Gambar 2. Adjacency List digambarkan secara sederhana
B
A
C
D E
B D 0
A C E
B D E
A C E
B C D
0
0
0
0
2013 3
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
Graf pada gambar 1 jika ingin direpresentasikan dalam bentuk linked list dapat diilustrasikan
secara sederhana seperti pada gambar 2, terlihat :
Ada 5 buah simpul A, B, C, D, dan E yang dibariskan dari atas ke bawah .
Kemudian dari masing-masing simpul ‘keluar’ pointer ke arah kanan yang menunjuk
simpul-simpul lain.
Contoh : simpul A menunjuk simpul B dan simpul D.
Gambar 2 hanya sebagai ilustrasi hubungan simpul-simpul secara konsep. Hubungan
sebenarnya yang dinyatakan dalam sebuah program dapat dilihat pada gambar 13.
FIRST FIRST PEdge
PVertex PVertex dua simpul ini dinamai : Simpul Edge
Gambar 3 a. Gambar 3 b. Simpul Vertex left info right
Gambar 3 c. Struktur Simpul
Instruksi membuat struktur simpul :
A A e1 e2 0
B B
C C
D D
0 E 0 E
2013 4
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
Struct tipeS {
Struct tipeS *Left;
Int INFO;
Struct tipeS *Right;
}
Struct tipeS *FIRST, *PVertex, *PEdge
Pada adjacency List kita perlu membedakan antara Simpul-Vertex dan Simpul-Edge.
Simpul-Vertex untuk menyatakan simpul atau Vertex, dan simpul-Edge untuk menyatakan
hubungan antar simpul yang biasa disebut busur.
Struktur keduanya bisa sama, bisa juga tidak sama, tergantung kebutuhan.
Pada contoh terlihat struktur simpul dibuat terdiri dari 3 elemen. Satu elemen untuk info,
dan 2 elemen untuk pointer. Pointer disebelah kiri disebut pointer left, pointer disebelah
kanan disebut Pointer Right.
Jika simpul dianggap sebagai Simpul-Vertex, maka Pointer Left digunakan untuk menunjuk
simpul berikutnya dalam untaian simpul-simpul yang ada, atau diisi NULL jika sudah tidak
ada simpul yang perlu ditunjuk. Sedangkan Pointer Right digunakan untuk menunjuk
Simpul-Edge yang pertama.
Jika simpul dianggap sebagai Simpul-Edge, maka Pointer Left digunakan untuk menunjuk
simpul-Vertex asal, dan Pointer Right digunakan untuk menunjuk Simpul Edge berikutnya
jika masih ada, atau diisi NULL jika tak ada lagi simpul busur yang ditunjuk.
Linked List Graf Berbobot Tak Berarah digambarkan secara Lengkap
PVertex PEdge
A e1 e2 0
B e1 e3 e4 0
C e3 e5 e6 0
2013 5
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
D e2 e5 e7 0
0 E e4 e6 e7 0
Gambar 4. Linked-List Graf Tak Berarah
12. Adjacency List Graf Berbobot Tak Berarah
Adjacency List Graf Tak Berarah sama dengan Adjacency List Graf Berarah dimana
arah busurnya selalu berpasangan. Jika ada busur dari A ke B, harus ada juga busur
dari B ke A.
Contoh : 3 5
12 2 8 2
v4 v5
7
gambar 5a. Graf tak berarah
Adjacency List Graf Berbobot Tak Berarah Digambarkan Secara Sederhana
FIRST
A
B
B
A
C
D E
B D 0
A C E 0
5
5
2
3 12
2013 6
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
C
D
E
Gambar 5b. Adjacency List digambarkan secara sederhana
Adjacency List Graf Berbobot Tak Berarah digambarkan secara Lengkap
PVertex PEdge
A 5 2 0
B 5 3 12 0
C 3 8 2 0
D 2 8 7 0
0 E 12 2 7 0
B D E
A C E
B C D
0
0
0
3
2
12
8
8
2
2
7
7
2013 7
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
Gambar 6. Adjacency-List Graf Berbobot Tak Berarah
13. Adjacency List Graf Berarah dan Berbobot
Contoh : 6 3 5
14 2 12 9
v4 v5
7
Gambar 7a. Graf Berarah dan Berbobot
Adjacency List Graf Berarah dan Berbobot digambarkan secara sederhana :
FIRST
A
B
C
D
E
Gambar 7b. Adjacency List Graf Berarah dan Berbobot
Graf di atas jika ingin direpresentasikan dalam bentuk adjacency list dapat diilustrasikan
secara sederhana pada gambar 7b. Ilustrasi sebenarnya dalam pemrograman dapat
digambarkan sebagai berikut :
B
A
C
D E
B D 0
A C
C
C E
B 0
0
0
5
6
2
9
12
14
3
7
2013 8
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
Adjacency List Graf Berarah dan Berbobot digambarkan secara Lengkap
PVertex PEdge
A 5 2 0
B 6 3 0
C 9
D 12 7 0
0 E 14 0
Gambar 8. Adjacency List Graf Berarah dan Berbobot
14. Inverse Adjacency List Graf Berarah dan Berbobot
Contoh : 6 3 5
14 2 12 9
v4 v5
7
Gambar 8a. Graf Berarah dan Berbobot
Inverse Adjacency List Graf Berarah dan Berbobot digambarkan secara sederhana :
FIRST
B
A
C
D E
2013 9
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
A
B
C
D
E
Gambar 8b. Inverse Adjacency List Graf Berarah dan Berbobot
Dalam Inverse Adjacency list graf berarah, ditunjukkan simpul apa saja yang menunjuk
simpul tertentu.
Dari gambar diatas terlihat pointer yang menuju atau menunjuk Simpul-B adalah berasal
dari Simpul A dengan bobot 5 dan dari simpul-E dengan bobot 14.
Walaupun arah panahnya dari B ke A, tetapi maksudnya untuk menyatakan bahwa : dari
simpul mana saja, terdapat busur yang menunjuk B.
Soal latihan :
1. Gambarkan Adjacency List untuk graf gambar berikut :
v4
B 0
A E
C
A
C
0
0
0
6
5
3
2
9
14
4
D 12
4 0
D 7 0
B
A
C
D E
2013 10
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
2. Gambarkan Adjacency List sebuah graf jika Adjacency Matrix graf tersebut digambarkan
sebagai berikut :
A 0
B 1
C 2
D 3
E 4
A 0 0 1 0 1 0
B 1 1 0 1 0 1
C 2 0 1 0 1 1
D 3 1 0 1 0 1
E 4 0 1 1 1 0
Buat (Gambar) Graf nya dulu
3. Gambarkan Adjacency List sebuah graf berarah jika Inverse Adjacency Matrix graf
tersebut digambarkan sebagai berikut : (buat grafnya dulu)
A 0
B 1
C 2
D 3
E 4
A 0 0 1 0 1 0
B 1 1 0 1 0 1
C 2 0 1 0 1 1
D 3 0 0 1 0 1
E 4 0 0 0 0 0
4. Gambarkan sebuah graf tak berarah jika Adjacency List graf tersebut digambarkan
sebagai berikut :
FIRST
A
B
C
B D 0
A C E
B D E
0
0
2013 11
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
D
E
5. Gambarkan sebuah graf berarah jika Inverse Adjacency List graf tersebut digambarkan
sebagai berikut : (Gambarkan grafnya)
FIRST
A
B
C
D
E
A C E
B C D 0
0
B
A E
C
A
C
0
0
6
5
3
2
9
14
4
D 12
4 0
D 7 0
C 0 14
4
2013 12
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
Daftar Pustaka
Moh. Sjukani, Struktur Data [Algoritma & Struktur Data 2] dengan C, C++, Mitra Wacana Media,
Jakarta, 2008.
Teddy Marcus Zakaria dan Agus Prijono, Konsep dan Implementasi Struktur Data, Informatika,
Bandung.
2013 1
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
MODUL PERKULIAHAN
Algoritma Pemrograman dan Struktur Data
Modul Standar untuk digunakan dalam Perkuliahan di Universitas Mercu Buana
Fakultas Program Studi Tatap Muka Kode MK Disusun Oleh
Ilmu Komputer Sistem Informasi
14 87007 Team Dosen
Abstract Kompetensi
15. Graph traversal Mengetahui macam-macam
2013 2
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
16. Path terpendek 17. Spanning Tree
Graph dan penerapannya
PENELUSURAN GRAF
(GRAPH TRAVERSAL )
Penelusuran graf adalah mengunjungi (visit) atau membaca graf menurut arah tertentu,
simpul per simpul, mulai dari simpul tertentu sampai semua simpul dikunjungi tanpa ada simpul
yang dikunjungi atau dibaca lebih dari satu kali.
Berdasarkan arah penelusuran ada dua macam penelusuran yaitu :
1. Depth First Search (DFS), penelusuran dengan mendahulukan arah kedalaman
2. Breadth First Search (BFS), penelusuran dengan mendahulukan arah melebar
2. Depth First Search.
Depth First Search adalah penelusuran graph yang arah penelusurannya mendahulukan ke
arah kedalaman graph tersebut yang dapat diterangkan sebagai berikut :
Pandanglah Graph pada Gambar-1a dengan adjacency matrixnya seperti Gambar-1b, yang
akan ditelusuri secara DFS mulai dari simpul A, sehingga hasil penelusurannya seperti pada
Gambar-1c.
A
B C
E F
H
D G
Gambar-1a 1a
Graph G
0 1 1 0 0
1 0 0 1 1
1 0 0 0 0
0 1 0 0 0
0 1 0 0 0
A 0
B 1
C 2
D 3
E 4
A
0
B
1
C
2
D
3
E
4
0 0
0 0
1 1
0 0
0 0
F
5
G
6
0
0
0
1
1
0 0 1 0 1
0 0 1 0 0
0 0 0 1 1
F 5
G 6
H 7
0 0
0 0
1 1
1
1
0
H
7
Gambar 1b. Adjacency Matriks
2013 3
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
Urutan kunjungan simpul bila dimulai dari Simpul-A adalah : A B D H E F C G yang bila
digambarkan akan menghasilkan spanning tree seperti pada Gambar-1c yang disebut DFS
Spanning Tree.
Proses Penelusuran :
Dalam proses penelusuran, akan terlihat pada suatu titik, ‘terpaksa’ dilakukan langkah
kembali ke simpul sebelumnya.
Dalam pemrograman, untuk dapat kembali ke posisi sebelumnya, biasanya diperlukan
stack. Pada penelusuran ini kita menggunakan stack S, dengan jumlah elemen tidak
kurang dari jumlah simpul graf yang ditelusuri.
Pada awal penelusuran, Top yang menunjuk stack S dibuat = -1
1. Misal penelusuran dimulai dari simpul
A. Ambil A. Simpan (Push) A ke stack
S. Cetak A
3
2
1
Top A 0
S
2. A berhubungan dengan simpul B dan
C. Ambil (kunjungi) simpul B, dan
simpan B ke stack. Cetak B
B
A
S
3. B berhubungan dengan simpul A, D
A
B C
E F
H
D G
Gambar-1c Hasil penelusuran
secara DFS Graph G
A
A
B
A
2013 4
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
dan E. A sudah dikunjungi. Tersisa D
dan E. Kunjungi D. Cetak D
D
B
A
S
4. D berhubungan dengan B dan H. B
sudah dikunjungi sehingga tersisa H.
Kunjungi H. Cetak H. Isi stack
sekarang : ABDH
H
D
B
A
S
5. H berhubungan dengan D,E,F dan
G. D sudah dikunjungi. Tersisa E, F
dan G. Kunjungi E. Simpan E di
stack. Cetak E
E
H
D
B
A
S 6. E berhubungan dengan B dan H. B
dan H sudah dikunjungi. Terjadi
keadaan buntu, kembali ke simpul
sebelum E, yaitu H. Keluarkan E
dari stack. Simpan E di stack.
Cetak E
H
D
B
A
S
7. Kembali ke H. H berhubungan
dengan D, E, F dan G. D dan E
sudah dikunjungi. Tersisa F dan G.
B
D
A
B
D
H
A
B
D
H
E
A
B
D
H
E
A
B
2013 5
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
Kunjungi F. Simpan F di stack.
Cetak F.
F
H
D
B
A
S
8. F berhubungan dengan H dan C. H
sudah dikunjungi. Tersisa C.
Kunjungi C. Simpan C di stack.
Cetak C.
C
F
H
D
B A
9. C berhubungan dengan A, F dan G.
A dan F sudah dikunjungi, tersisa G.
Ambil G. Simpan G di stack.
Cetak G.
G
C
F
H
D
B
A
S
10. G berhubungan dengan C dan H. C
dan H sudah dikunjungi, terjadi
keadaan buntu. Kembali ke simpul
sebelum G yaitu C.
C
F F
H H H
D D D
B B B
A A A
10 11 12
D
H
E F
B
D
H
E F
A
C
A
B
D
H
E F
C
G
2013 6
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
11. Sekarang berada di C. Disini juga
buntu. Kembali ke F.
12. Sekarang berada di F. Disini juga
buntu. Kembali ke H.
13. Sekarang berada di H. Disini juga
buntu. Kembali ke D.
14. Sekarang berada di D. Disini juga
buntu. Kembali ke B.
15. Sekarang berada di B. Disini juga
buntu. Kembali ke A.
16. Sekarang berada di A. Disini juga
buntu. Kalau kembali sampai simpul
pertama penelusuran dan ditemui
buntu, maka proses berakhir.
Kalau nilai Top kembali ke -1, maka
proses selesai.
D
B B
A A A
13 14 15
16
Top = -1
3. BREADTH FIRST SEARCH (BFS)
Breadth First Search adalah penelusuran graph yang arah penelusurannya mendahulukan
ke arah ‘lebar’ graph tersebut yang dapat diterangkan sebagai berikut :
Pandanglah Graph pada Gambar-2a dengan adjacency matrixnya seperti Gambar-2b, yang
akan ditelusuri secara DFS mulai dari simpul A, sehingga hasil penelusurannya seperti pada
Gambar-2c.
A
B C
E F
H
D G
Gambar-2a 2a
Graph G
0 1 1 0 0
1 0 0 1 1
1 0 0 0 0
0 1 0 0 0
0 1 0 0 0
A 0
B 1
C 2
D 3
E 4
A
0
B
1
C
2
D
3
E
4
0 0
0 0
1 1
0 0
0 0
F
5
G
6
0
0
0
1
1
0 0 1 0 1
0 0 1 0 0
0 0 0 1 1
F 5
G 6
H 7
0 0
0 0
1 1
1
1
0
H
7
Gambar 2b. Adjacency Matriks
2013 7
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
Urutan kunjungan simpul bila dimulai dari Simpul-A adalah : A B C D E F G H yang bila
digambarkan akan menghasilkan spanning tree seperti pada Gambar-2c yang disebut BFS
Spanning Tree
Gambar 2c. Hasil penelusuran secara BFS graf G
Proses Penelusuran :
Dalam proses penelusuran, diperlukan sebuah array untuk antrian (queue) yang diberi nama Q
yang jumlah elemennya tidak kurang dari jumlah simpul. Antrian tersebut akan diisi dengan
simpul (dalam program digunakan nomor simpul) yang sudah dikunjungi. Berikut ini
diilustrasikan isi antrian sesuai dengan proses penelusuran.
0 1 2 3 4 5
Q A B C F = Front (depan) R = Rear (belakang
F R
Isi antrian Q di atas dinyatakan dengan huruf A, B, dan C dan seterusnya. Dalam program
bukan diisi huruf nama simpul, melainkan diisi nomor simbolik simpul : 0,1,2 dan seterusnya,
sesuai dengan index baris dan index kolom adjacency matrix, sehingga isi Q sebenarnya
adalah sebagi berikut :
0 1 2 3 4 5
Q 0 1 2 F = Front (depan) R = Rear (belakang
A
B C
D E G
H
F
2013 8
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
F R
Pada awal penelusuran, F dan R dibuat = -1 sebagai berikut :
0 1 2 3 4 5
Q A B C
F R
Proses penelusuran selengkapnya dapat diterangkan sebagai berikut :
1. Misal dimulai dari simpul A. Ambil A. Simpan A ke antrian Q. Pointer F dan R menunjuk A.
R
0 1 2 3 4 5 6 7
Q A
F
2. A berhubungan dengan simpul B dan C. Ambil(kunjungi) B dan C. Simpan ke dalam antrian. R menunjuk yang terakhir yaitu C.
R
0 1 2 3 4 5 6 7
Q A B C
F
3. Pointer F maju satu langkah, menunjuk B. B ada hubungan dengan D dan E. Simpan D dan E dalam antrian, dan pointer R menunjuk E
R
0 1 2 3 4 5 6 7
Q A B C D E
F
4. Pointer F maju satu langkah, menunjuk C. C ada hubungan dengan F dan G. Simpan F dan G dalam antrian, dan pointer R menunjuk G
R
0 1 2 3 4 5 6 7
Q A B C D E F G
F
5. Pointer F maju satu langkah, menunjuk D. D ada hubungan dengan H. Simpan H dalam antrian, dan
R
0 1 2 3 4 5 6 7
Q A B C D E F G H
A
A
B C
A
B
B
C
C
A
A
B C
D E
E D F G
D E F G
H
2013 9
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
pointer R menunjuk H
6. Jika pointer R sudah menunjuk ujung dari antrian, berarti proses sudah selesai.
F
LINTASAN TERPENDEK (SHORTEST PATH)
1. Mencari Lintasan Terpendek dengan Algoritma Dijkstra
Problem :
Ada 5 buah kota, 0,1,2,3,4 yang terhubung dengan jalan antar kota (dalam km) seperti
yang diilustrasikan dengan sebuah graf gambar 3a. dan Adjacency matrix graf tersebut
pada gambar 3b. berikut ini :
12
5 15 17
10 6
Gambar 3a. graf
0
1
2
3
4
0 0 12 5 999 17 Untuk 2 buah kota (simpul) yang tidak dihubungkan langsung oleh jalan (busur)
1 12 0 999 15 999 maka jaraknya dibuat dibuat nilai tak terhingga yang diwakili nilai 999
2 5 999 0 999 10
3 999 15 999 0 6
4 17 999 10 6 0
2
1
4
3
0
2013 10
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
Gambar 3b. Adjacency Matrix
Untuk menghitung lintasan terpendek antara Kota no.0 ke Kota no.3 dengan menggunakan
Algoritma Dijsktra adalah sebagai berikut :
Ada 3 kemungkinan jalan dari kota 0 ke kota 3 yaitu :
17
6
a. 0 – 4 – 3 Jarak = 23
5
10 6
b. 0 – 2 – 4 – 3 Jarak = 21
12
15
c. 0 – 1 – 3
Jarak = 27
Kesimpulan :
Lintasan terpendek dari 0 ke 3 adalah 21 km, dengan lintasan : 0 – 2 – 4 – 3
2. Mencari Lintasan Terpendek dengan Algoritma Warshall
Algoritma Warshall ini tidak sekedar mencari lintasan terpendek antara 2 buah simpul
tertentu, tetapi langsung membuat tabel lintasan terpendek antar simpul.
Problem : Ada 5 buah kota 0,1,2,3,4 yang terhubung dengan jalan dengan jarak dalam km
seperti yang diilustrasikan dengan gambar graf 4a, dan Adjacency Matrix graf tersebut
digambarkan pada gambar 4b. berikut :
5 2 20 15
6 4
0
4
3
0
2
4
3
0
3
1
2
1
4
3
0
2013 11
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
Gambar 4a. graf
0
1
2
3
4
0 0 5 2 999 15
1 5 0 999 20 999
2 2 999 0 999 6
3 999 20 999 0 4
4 15 999 6 4 0
Gambar 3b. Adjacency Matrix
0
1
2
3
4
0 0 5 2 12 15
1 5 0 7 17 13
2 2 7 0 10 6
3 12 17 10 0 4
4 8 13 6 4 0
Gambar 3c. Adjacency Matrix
Soal :
Gambarkan matrix lintasan terpendek, dan matrix yang menyatakan jalur yang
dilintasi dalam menempuh lintasan yang terpendek tersebut untuk graf yang
digambarkan pada gambar di bawah ini :
10 5
6 28 4
19
0
2
1
4
3
2013 12
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
Team Dosen http://www.mercubuana.ac.id
Daftar Pustaka
Bambang Wahyudi, Pengantar Struktur Data dan Algoritma, Andi Offset, Yogyakarta, 2004.
Moh. Sjukani, Struktur Data [Algoritma & Struktur Data 2] dengan C, C++, Mitra Wacana Media,
Jakarta, 2008.
Teddy Marcus Zakaria dan Agus Prijono, Konsep dan Implementasi Struktur Data, Informatika,
Bandung.