Modul Algoritma Dan Struktur Data
Modul Algoritma Dan Struktur Data
Algoritma
Pemrograman
dan Struktur
Data
Modul Standar untuk
digunakan dalam Perkuliahan
di Universitas Mercu Buana
01
Ilmu Komputer Sistem Informasi 87007 Team Dosen
Abstract Kompetensi
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
1 Team Dosen http://www.mercubuana.ac.id
Tipe-tipe data dan deklarasi data Memahami jenis-jenis data yang
dalam bahasa pemrograman digunakan dalam algoritma
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
2 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 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
3 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 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
4 Team Dosen http://www.mercubuana.ac.id
Luas = πR2
Mulai
Masukkan r
π = 3.14
Luas = π * r * r
Tulis Luas
Selesai
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
5 Team Dosen http://www.mercubuana.ac.id
Gambar 1. Algoritma Perhitungan Luas Lingkaran
Komponen-komponen pada Flow Chart
alur proses.
Preparation, Pemberian nilai awal suatu variabel.
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
6 Team Dosen http://www.mercubuana.ac.id
Titik connector yang berada pada halaman lain.
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 :
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.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:
Dalam suatu ekspresi yang tidak menggunakan tanda kurung, operator NOT harus dievaluasi
sebelum operator AND dan OR.
Latihan:
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
9 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.
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 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
10 Team Dosen http://www.mercubuana.ac.id
MODUL PERKULIAHAN
Algoritma
Pemrograman
dan Struktur
Data
Modul Standar untuk
digunakan dalam Perkuliahan
di Universitas Mercu Buana
02
Ilmu Komputer Sistem Informasi 87007 Team Dosen
Abstract Kompetensi
Pengertian Array, Jenis Array, dan Mengerti dan Menjelaskan apa yang
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
1 Team Dosen http://www.mercubuana.ac.id
Algoritma untuk mengakses Array. dimaksud dengan Array dan Record
Pengertian Record dan Penggunaan serta Pendeklarasiannya dalam bahasa
Structure pada bahasa C++ Pemrograman
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
2 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.
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.
Sebagai deklarasi sebuah array yang memiliki 25 alokasi data (elemen) dengan jenis
data integer bernama IntArray. Perbedaan deklarasi variabel array dengan variabel biasa.
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 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
3 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.
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 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
4 Team Dosen http://www.mercubuana.ac.id
T=0
T=1
w e t u r
T=2
o u h h k
d f h k l
a c v b n
m z x r d
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.
Deklarasi
int A[3];
int B = 35;
Deskripsi
Mulai
A[0] = 70;
A[1] = B;
Print “Isi nilai A[0] adalah A[0]”;
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
5 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:
Meskipun tidak dimungkinkan mengoperasikan array secara langsung, namun pemberian nilai
dapat dilakukan.
Bila initializers-nya lebih sedikit dari elements array, sisanya akan dianggap bernilai 0.
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:
Untuk memberikan nilai atau mengoperasikan suatu array, dapat digunakan sebuah loop:
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
6 Team Dosen http://www.mercubuana.ac.id
/* a[0] hingga a[9] bernilai 0 */
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
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
7 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 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
8 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?
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
9 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.
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 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
10 Team Dosen http://www.mercubuana.ac.id
MODUL PERKULIAHAN
Algoritma
Pemrograman
dan Struktur
Data
Modul Standar untuk
digunakan dalam Perkuliahan
di Universitas Mercu Buana
03
Ilmu Komputer Sistem Informasi Team Dosen
Abstract Kompetensi
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
1 Team Dosen http://www.mercubuana.ac.id
Pengertian Linked List dan Penyajian Mampu Memahami dan Menjelaskan
Linked List dalam memori Cara Kerja Linked List
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
2 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:
Implementasi dari algoritma diatas pada program C++ adalah sebagai berikut :
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
3 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 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
4 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 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:
Banyak fungsi pada pada linked list perlu untuk merubah pointer kepala. Dalam
C++, anda juga dapat menyatakan parameterpointer sebagai argumen &. Untuk
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
5 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 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
6 Team Dosen http://www.mercubuana.ac.id
Gambar 3.1 Pointer headRef dalam ChangeToNull menunjuk ke head1
Cara termudah untuk membuat sebuah senarai (list) dengan menambah node pada
“akhir kepala (last head)” adalah dengan push().
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 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
7 Team Dosen http://www.mercubuana.ac.id
Tail
3
newNode
Untuk memasukan atau menghapus node di dalam list, anda membutuhkan pointer ke
node sebelum posisi itu, sehingga anda dapat merubahnya .next field.
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
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.
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 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
9 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.
Stack Heap
LocalRef()
Head 1 2
lastPtrRef
Operasi yang ada pada linked list adalah Menambah Node dan juga menghapus node
Ilustrasi dari tahapan penambahan node dapat terlihat pada gambar 3.4
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
10 Team Dosen http://www.mercubuana.ac.id
Adding a Node
Head
Before Tail
Tail
Next
Step 2 Head NULL
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.
Untuk menghapus node, dapat dilihat pada penggalan program berikut ini :
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
11 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 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
12 Team Dosen http://www.mercubuana.ac.id
MODUL PERKULIAHAN
Algoritma
Pemrograman
dan Struktur
Data
Modul Standar untuk
digunakan dalam Perkuliahan
di Universitas Mercu Buana
04
Ilmu Komputer Sistem Informasi Team Dosen
Abstract Kompetensi
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
1 Team Dosen http://www.mercubuana.ac.id
Operasi dasar stack dan contoh Mampu menjelaskan apa yang
aplikasinya. Deklarasi stack dalam dimaksud dengan stack dan aplikasinya
bahasa pemrograman
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
2 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:
Setelah
ditumpuk
C C
Keadaan
mula-mula C
adalah B
kosong
B B
A A A A
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).
max
F top
E
D
C
B
A
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
3 Team Dosen http://www.mercubuana.ac.id
Implementasi alternatif stack adalah:
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)
#define max_stack 15
void pop()
{
printf ("data %s terambil",tumpuk.data[tumpuk.top]);
tumpuk.top--;
}
int isFull()
{
if (tumpuk.top==max_stack-1)
return 1;
else
return 0;
}
int isEmpty()
{
if (tumpuk.top==-1)
return 1;
else
return 0;
2013 }
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
5 Team Dosen http://www.mercubuana.ac.id
e. clear (membersihkan seluruh isi stack)
void clear()
{
tumpuk.top=-1;
printf("semua data terhapus.");
}
void print()
{
for (int i=tumpuk.top;i>=0;i--)
printf ("%s\n",tumpuk.data[i]);
}
Stack Kosong
1 Top Max
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.
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
7 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
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 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
8 Team Dosen http://www.mercubuana.ac.id
Contoh Notasi INFIX, PREFIX dan POSTFIX
A+ B +AB AB +
A+ B – C -+AB C AB C - +
(A+ B ) * ( C - D ) * +AB – C D AB + C D - *
/*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 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
9 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 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
10 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 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
11 Team Dosen http://www.mercubuana.ac.id
MODUL PERKULIAHAN
Algoritma
Pemrograman
dan Struktur
Data
Modul Standar untuk
digunakan dalam Perkuliahan
di Universitas Mercu Buana
05
Ilmu Komputer Sistem Informasi 87007 Team Dosen
Abstract Kompetensi
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
1 Team Dosen http://www.mercubuana.ac.id
Definisi dan operasi dasar QUEUE. Mengetahui cara kerja QUEUE dan
Penyajian QUEUE dalam Array menerapkannya
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
2 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.
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 :
keluar masuk
A B C D E F
belakang
gambar 1. Contoh antrian dengan 6 elemen
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
4 Team Dosen http://www.mercubuana.ac.id
keluar masuk
A B C D E F G H
belakang
gambar 2. Contoh penambahan antrian dengan 2 elemen
keluar masuk
C D E F G H
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 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
5 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.
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
6 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);
}
}
1. Deklarasikan Antrian
void initialize_queue ( Tqueue *Pqueue)
{
Pqueue -> firs = 0;
Pqueue -> last = -1;
Pqueue -> number_of_items = 0;
}
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
7 Team Dosen http://www.mercubuana.ac.id
}
}
1 first = 1
last = 0
Dari gambar 4 di atas last dibuat = 0 dan first dibuat = 1 serta antrian dikatakan kosong jika last
< first.
Antrian
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
8 Team Dosen http://www.mercubuana.ac.id
6
4 D last = 4
3 C
2 B
1 A first = 1
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
4 D last = 4
3 C first = 1
Antrian
6 F last = 6
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
9 Team Dosen http://www.mercubuana.ac.id
5 E
4 D
3 C first = 3
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.
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 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
10 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 :
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.
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
11 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 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
12 Team Dosen http://www.mercubuana.ac.id
MODUL PERKULIAHAN
Algoritma
Pemrograman
dan Struktur
Data
Modul Standar untuk
digunakan dalam Perkuliahan
di Universitas Mercu Buana
06
Ilmu Komputer Sistem Informasi 87007 Team Dosen
Abstract Kompetensi
Bubble Sort, Selection Sort, Memahami Jenis-Jenis
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
1 Team Dosen http://www.mercubuana.ac.id
Insertion Sort. Membuat Algoritma Sorting Sederhana dan dapat membuat
dan penerapannya ke dalam bahasa Algoritma dan program sorting.
pemrograman
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 :
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 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
2 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
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 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
3 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.
Implementasi dari langkah-langkah dalam Bubble Sort dapat dilihat pada program berikut ini,
program Ascending dengan menggunakan Bubble Sort.
#include <iostream.h>
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
4 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;
}
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 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
5 Team Dosen http://www.mercubuana.ac.id
5 34 32 25 75 42 22 2
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
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
Hasil Sementara : 2 5 32 25 75 42 22 34
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
6 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
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
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
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
7 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
Hasil Akhir : 2 5 22 25 32 34 42 75
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
8 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;
}
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 3 : 4 dibandingkan dengan 8, karena 4 < 8 maka tukar posisinya, hasil sementara
adalah 3 7 4 8
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
9 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
#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 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
10 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 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
11 Team Dosen http://www.mercubuana.ac.id
MODUL PERKULIAHAN
Algoritma
Pemrograman
dan Struktur
Data
Modul Standar untuk
digunakan dalam Perkuliahan
di Universitas Mercu Buana
07
Ilmu Komputer Sistem Informasi 87007 Fajar Masya
Abstract Kompetensi
Latihan pemecahan masalah Mampu menerapkan Stack, QUEUE
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
1 Team Dosen http://www.mercubuana.ac.id
Stack, QUEUE dan Sorting dan Sorting sederhana dalam solusi
pemecahan masalah
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 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
2 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;
}
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
4 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.
#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 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
5 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.
#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 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
6 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 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
7 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 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
8 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 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
9 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 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
10 Team Dosen http://www.mercubuana.ac.id
MODUL PERKULIAHAN
Algoritma
Pemrograman
dan Struktur
Data
Modul Standar untuk
digunakan dalam Perkuliahan
di Universitas Mercu Buana
08
Ilmu Komputer Sistem Informasi 87007 Team Dosen
Abstract Kompetensi
1. General Tree Menjelaskan jenis-jenis tree
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
1 Team Dosen http://www.mercubuana.ac.id
2. Binary Tree Dan penyelesaiannya
B C D 1
E F G H I J 2
K L M 3
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
2 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.
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)
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
3 Team Dosen http://www.mercubuana.ac.id
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)
DATA
Child –1 …… Child-k
Pohon 3 - ary :
B
C D
E F G H I J
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
4 Team Dosen http://www.mercubuana.ac.id
= 10( 3 – 1 ) + 1
= 21
JUMLAH NON ZERO LINK = n – 1 = 10 – 1 = 9
C
Pohon biner dengan subtree kiri kosong
D
2013
E Struktur Data Modul 01
Algoritma Pemrograman dan Pusat Bahan Ajar dan eLearning
5 Team Dosen http://www.mercubuana.ac.id
Pohon Biner Penuh ( Full Binary Tree)
Adalah pohon biner yang mempunyai simpul atau node lengkap dari level 1
sampai level ke I
A
B C
D
E F G
Adalah pohon biner yang mempunyai simpul dengan nomor urut 1 sampai dengan n.
i = level Level
i–1 i
2 2 3 2 – 1 2
4 3
5 6 7
8 9 10 12 13 14 15 4
11
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
2
Log n + 1 -- dimana n = jumlah simpul
Contoh bila n = 15
2
Maka kedalamannya minimal = 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 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
7 Team Dosen http://www.mercubuana.ac.id
Pohon Biner seperti ini disimpan dalam bentuk
B Array sangat memboroskan
15
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 RCHILD
B C
0 D 0 0 E 0 0 F 0 0 G 0
struct NAMA_SIMPUL
{
Tipe Data DATA;
Struct NAMA_SIMPUL *RCHILD, *LCHILD;
};
Skewed Tree
A 0
B 0
C 0
1. Inorder Traversal
A + B
Contoh
Tulislah hasil penelusuran pohon biner berikut ini bila ditelusuri secara INORDER.
*
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
9 Team Dosen http://www.mercubuana.ac.id
+ 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
+ A B
Contoh
Tulislah hasil penelusuran pohon biner berikut ini bila ditelusuri secara PREORDER.
+
C
A
B
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
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
10 Team Dosen http://www.mercubuana.ac.id
Contoh
Tulislah hasil penelusuran pohon biner berikut ini bila ditelusuri secara POSTORDER.
+ C
A B
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 :
* /
A - *
+
5
7 E F G
C D
19. Diket Persamaan POST ORDER :
A B / C * D E ** F / + 2 –
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
11 Team Dosen http://www.mercubuana.ac.id
Pohon 3 Ary
B C D
E F G H I J
Ke binary 2 Aray
E C
F D
G
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
E G
A
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
12 Team Dosen http://www.mercubuana.ac.id
B F H I
C D
B E
C F G
D H
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
13 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 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
14 Team Dosen http://www.mercubuana.ac.id
MODUL PERKULIAHAN
Algoritma
Pemrograman
dan Struktur
Data
Modul Standar untuk
digunakan dalam Perkuliahan
di Universitas Mercu Buana
09
Ilmu Komputer Sistem Informasi 87007 Fajar Masya
Abstract Kompetensi
3. Balancing Binary Search Tree Mengetahui apa yang dimaksud
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
1 Team Dosen http://www.mercubuana.ac.id
4. Height Balanced Tree dengan Height Balanced Tree dan
5. Bound Balanced Tree Bound Balanced Tree dan contohnya
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
B C
D E F G
H I J K
B C
D E F
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
2 Team Dosen http://www.mercubuana.ac.id
H I J K L M
root
B C
E F G
J K
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 :
A A
B C
B C
HBT
E D
Bukan HBT
2013
F
Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
3 Team Dosen http://www.mercubuana.ac.id
KETINGGIAN MINIMUM DAN MAKSIMUM POHON BINAR
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 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
4 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.
B C
D E G H
F J K
Root
A
B C
x D x E x x G x H
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
5 Team Dosen http://www.mercubuana.ac.id
x F x J x x K x
x L x
Root Avail
2. PENYAJIAN SEQUENTIAL
Penyajian pada pohon binar T ini hanya menggunakan sebuah array linear tunggal TREE
sebagai berikut :
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
6 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 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
7 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.
B C D
E F G H I J
K L
Langkah Pertama
A
B C D
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
8 Team Dosen http://www.mercubuana.ac.id
E F G H I J
K L
Langkah kedua
A
E C
F D
G H
K I
L J
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
9 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 :
FDBACEG
D G
B E
A C
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
10 Team Dosen http://www.mercubuana.ac.id
F Untai yang dihasilkan secara In-order
ABCDEFG
D G
B E
A C
ACBEDGF
D G
B E
A C
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
11 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.
18
10 23
5 14 21 25
b.
B C
D F G
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
12 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 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
13 Team Dosen http://www.mercubuana.ac.id
MODUL PERKULIAHAN
Algoritma
Pemrograman
dan Struktur
Data
Modul Standar untuk
digunakan dalam Perkuliahan
di Universitas Mercu Buana
10
Ilmu Komputer Sistem Informasi 87007 Team Dosen
Abstract Kompetensi
6. Sequential Search Memahami bagaimana sistem
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
1 Team Dosen http://www.mercubuana.ac.id
7. Binary Search Tree Pencarian data
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 :
18
10 23
5 14 21 25
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.
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
2 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
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.
12
15
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.
12
15
13
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
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
3 Team Dosen http://www.mercubuana.ac.id
9 15
13
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.
12
9 15
5
13
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.
12
9 15
5 11 13
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
4 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.
12
9 15
5 11 13 20
~ 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.
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
5 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.
12
9 15
11 13 20
2. Delete angka 20
Karena angka 20 ini juga termasuk leaf, maka angka ini juga bisa segera dihapus.
12
9 15
11 13
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.
13
9 15
11
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
6 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.
13
11 15
5. Delete angka 15
Karena angka 15 merupakan leaf, maka angka ini dapat segera dihapus.
13
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.
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
7 Team Dosen http://www.mercubuana.ac.id
printf("%c ", T->data);
preOrder(T->left);
preOrder(T->right);
}
}
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
9 Team Dosen http://www.mercubuana.ac.id
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
10 Team Dosen http://www.mercubuana.ac.id
Bila Program dijalankan, hasilnya adalah :
E L
I D O
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
11 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 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
12 Team Dosen http://www.mercubuana.ac.id
MODUL PERKULIAHAN
Algoritma
Pemrograman
dan Struktur
Data
Modul Standar untuk
digunakan dalam Perkuliahan
di Universitas Mercu Buana
11
Ilmu Komputer Sistem Informasi 87007 Team Dosen
Abstract Kompetensi
Heap Sort, Merge Sort, Memahami Algoritma Heap, Merge
Dan Radix Sort dan Radix Sort dan menerapkannya
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
1 Team Dosen http://www.mercubuana.ac.id
kedalam bahasa pemrograman.
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.
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
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 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
2 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
50 60 60
30 44 50 44 50 55
22 22 30 22 30 44
77 77
50 60 55 60
22 30 44 55 50 30 44 55
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
3 Team Dosen http://www.mercubuana.ac.id
22
g. elemen 77 h. elemen 55
Perhatikan gambar dibawah ini bagaimana setelah elemen 77 (root) dihapus atau dijadikan
elemen awal dari hasil sortir
22
55 60
50 30 44 55
55 22
50 30 44 55
60
55 55
50 30 44 22
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
4 Team Dosen http://www.mercubuana.ac.id
c. elemen 22 mengarah keanak kanan
( fase 1 )
55
55 44
50 30 22
50 44
22 30
50
30 44
22
c. pohon heap pada akhir fase 4
50
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
5 Team Dosen http://www.mercubuana.ac.id
30 22
30
22
22
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
1000 100 10 1
2 4 7 5
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
Tahap – 1.
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
6 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
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
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
7 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
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
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
Disiapkan array 2 dimensi int B[10][15] dan mengisinya dengan nilai awal sebagai berikut :
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
8 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 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
9 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
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
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
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
10 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
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
11 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 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
12 Team Dosen http://www.mercubuana.ac.id
MODUL PERKULIAHAN
Algoritma
Pemrograman
dan Struktur
Data
Modul Standar untuk
digunakan dalam Perkuliahan
di Universitas Mercu Buana
12
Ilmu Komputer Sistem Informasi 87007 Team Dosen
Abstract Kompetensi
8. Dasar Graph Mengetahui macam-macam
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
1 Team Dosen http://www.mercubuana.ac.id
9. Graph Berarah Graph dan penerapannya
10. Representasi Graph
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
B e3
e1
v3
e4 C
v1 A
e2 e5 e7
v v
D4 E5
e6
v4 v5
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
2 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).
Dilihat dari bentuk busur (urutan penyebutan pasangan 2 buah simpul), graf dapat dibedakan
menjadi 2 macam :
e2 e5 e7
v v
D4 E5
e6
v4 v5
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
3 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.
e8 B e9
e1 e3
v3
e4 C
v1 A
e2 e5 e7
v v
D4 E5
e6
v4 v5
Pada Graf Berarah :
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).
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
4 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.
Contoh Graf Berbobot Tak Berarah : Contoh Graf Berbobot Berarah :
7
B 3 4 B
5 5 3
C
12 12 C
A A
6
8 6 4 8
4
D v v
E D4 E5
3 3
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.
4. SUB GRAF
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
5 Team Dosen http://www.mercubuana.ac.id
Sub graf adalah bagian dari graf. Bahkan graf itu sendiri merupakan sub graf dari dirinya
sendiri.
Contoh :
B B
C C
A A
D E
D E
gambar 4b. Graf G1. Sub graf dari graf G
gambar 4a. Graf G
B
B
C
A C
A
E
D E
D
B B
C C
A A
E E
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
6 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
Suatu Graf disebut full connected graf apabila setiap simpul dalam graf tersebut saling
berhubungan. Pada full connected grapf berlaku :
m = n(n–1) /2
dimana : n = jumlah simpul, dan m = jumlah busur
Contoh :
B
D E
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:
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
7 Team Dosen http://www.mercubuana.ac.id
1. Adjacency Matrix
2. Inverse Adjacency Matrix (hanya untuk Graf berarah)
3. Incidence Matrix
4. Vector Matrix
C
A
D E
Gambar 12.6.1. Graf G
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
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
8 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.
Jika ingin menggunakan tipe karakter (char), dapat ditulis sebagai berikut :
C
A
D E
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
9 Team Dosen http://www.mercubuana.ac.id
Gambar 6.1.2 Graf Berarah
Adjacency Matrix dari graf berarah di atas adalah :
ke
A B C D E
0 1 2 3 4
dari simpul A ada 2 b usur yang keluar, satu
dari A 0 0 1 0 1 0 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
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 :
C
A
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
10 Team Dosen http://www.mercubuana.ac.id
D E
Gambar 6.1.3. Graf Berarah
dari
A B C D E
0 1 2 3 4
Hanya ada satu busur yang menuju simpul A
menuju ke A 0 0 1 0 0 0 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
ada 3 busur yang menuju simpul E yaitu dari simpul
E 4 0 1 1 1 0 B, C dan D.
6.1.4. Adjacency Matrix Graf Berbobot Tak Berarah (Weighted Undirected Graph)
Contoh :
B 3
5
12 C
A
4 8 6
D 3 E
Gambar 6.1.4. Graf berbobot tak berarah
Adjacency Matrix Graf Berbobot Tak Berarah dari graf di atas adalah :
A B C D E
0 1 2 3 4
Simpul A berhubungan dengan simpul B dan simpul
A 0 0 5 999 4 0 D, masing-masing dengan bobot busur = 5 dan 4
B 1 5 0 3 999 12
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
11 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.
Contoh : v2
B e3
e1
v3
e4 C
v1 A
e2 e5 e7
v v
D4 E5
e6
v4 v5
gambar 12.6.1.5 Graf tak berarah
e1 e2 e3 e4 e5 e6 e7
0 1 2 3 4 5 6
A 0 1 1 0 0 0 0 0 Matrix n * m
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
12 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
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.
Contoh :
v2
B e3
e1
v3
e4 C
v1 A
e2 e5 e7
v v
D4 E5
e6
v4 v5
gambar 12.6.1.6. Graf tak berarah
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
13 Team Dosen http://www.mercubuana.ac.id
e e e e
0 1 2 3
A 0 1 2 0 0
B 1 1 3 4 0
Simpul C berhubungan dengan busur :
C 2 3 5 7 0 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
2. Sebuah graf full connected dengan 4 simpul, berapa jumlah busur yang ada?
Jawab : Jumlah busur = n(n-1)=(4*(4-1))/2=6
Soal Latihan :
1. Gambarkan Adjacency Matrix Graf berikut ini :
a. b.
B
B
C
A C
A
D E
D E
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 B C D E
0 1 2 3 4
A 0 0 1 1 0 0
B 1 0 0 1 0 1
C 2 1 1 0 1 0
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
15 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 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
16 Team Dosen http://www.mercubuana.ac.id
MODUL PERKULIAHAN
Algoritma
Pemrograman
dan Struktur
Data
Modul Standar untuk
digunakan dalam Perkuliahan
di Universitas Mercu Buana
13
Ilmu Komputer Sistem Informasi 87007 Team Dosen
Abstract Kompetensi
11. Representasi Graph Mengetahui macam-macam
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
1 Team Dosen http://www.mercubuana.ac.id
Graph dan penerapannya
B e3
e1
e4 C
v1 A
e2 e5 e6
v v
D4 E5
e7
FIRST
A B D 0
B A C E 0
C B D E 0
D A C E 0
E B C D 0
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
2 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 :
A A e1 e2 0
B B
C C
D D
0 E 0 E
Gambar 3 a. Gambar 3 b.
Simpul Vertex left info right
Gambar 3 c.
Struktur Simpul
Instruksi membuat struktur simpul :
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
3 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.
A e1 e2 0
B e1 e3 e4 0
C e3 e5 e6 0
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
4 Team Dosen http://www.mercubuana.ac.id
D e2 e5 e7 0
0 E e4 e6 e7 0
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 :
B 3
5
12 C
A
2 8 2
v v
D4 E5
7
FIRST
A B 5 D 2 0
B A 5 C 3 E 12 0
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
5 Team Dosen http://www.mercubuana.ac.id
C B 3 D 8 E 2 0
D A 2 C 8 E 7 0
E B 12 C 2 D 7 0
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
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
6 Team Dosen http://www.mercubuana.ac.id
Gambar 6. Adjacency-List Graf Berbobot Tak Berarah
6 B 3
5
14 C
A
2 12 9
v v
D4 E5
7
A B 5 D 2 0
B A 6 C 3 0
C C 9
D C 12 E 7 0
E B 14 0
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 :
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
7 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
6 B 3
5
14 C
A
2 12 9
v v
D4 E5
7
Inverse Adjacency List Graf Berarah dan Berbobot digambarkan secara sederhana :
FIRST
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
8 Team Dosen http://www.mercubuana.ac.id
A B 6 0
B A 5 E 14 0
4
C C 3 D 12 0
4
D A 2 0
E C 9 0 D 7 0
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 :
C
A
E
v
D4
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
9 Team Dosen http://www.mercubuana.ac.id
2. Gambarkan Adjacency List sebuah graf jika Adjacency Matrix graf tersebut digambarkan
sebagai berikut :
A B C D E
0 1 2 3 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
3. Gambarkan Adjacency List sebuah graf berarah jika Inverse Adjacency Matrix graf
tersebut digambarkan sebagai berikut : (buat grafnya dulu)
A B C D E
0 1 2 3 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 D 0
B A C E 0
C B D E 0
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
10 Team Dosen http://www.mercubuana.ac.id
D A C E 0
E B C D 0
5. Gambarkan sebuah graf berarah jika Inverse Adjacency List graf tersebut digambarkan
sebagai berikut : (Gambarkan grafnya)
FIRST
A B 6 C 14 0
4
B A 5 E 14 0
4
C C 3 D 12 0
4
D A 2 0
E C 9 D 7 0
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
11 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 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
12 Team Dosen http://www.mercubuana.ac.id
MODUL PERKULIAHAN
Algoritma
Pemrograman
dan Struktur
Data
Modul Standar untuk
digunakan dalam Perkuliahan
di Universitas Mercu Buana
14
Ilmu Komputer Sistem Informasi 87007 Team Dosen
Abstract Kompetensi
15. Graph traversal Mengetahui macam-macam
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
1 Team Dosen http://www.mercubuana.ac.id
16. Path terpendek Graph dan penerapannya
17. Spanning Tree
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.
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 D E F G H
0 1 2 3 4 5 6 7
A
A 0 0 1 1 0 0 0 0 0
B 1 1 0 0 1 1 0 0 0
B C C 2 1 0 0 0 0 1 1 0
D 3 0 1 0 0 0 0 0 1
D E F G E 4 0 1 0 0 0 0 0 1
F 5 0 0 1 0 1 0 0 1
G 6 0 0 1 0 0 0 0 1
H H 7 0 0 0 1 1 1 1 0
Gambar-1a
1a
Graph G
Gambar 1b.
Adjacency Matriks
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
2 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.
B C
D E F G
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.
S
6. E berhubungan dengan B dan H. B A
dan H sudah dikunjungi. Terjadi
B
keadaan buntu, kembali ke simpul
sebelum E, yaitu H. Keluarkan E D E H
dari stack. Simpan E di stack. D
B
Cetak E H A
S
7. Kembali ke H. H berhubungan A
dengan D, E, F dan G. D dan E
B
sudah dikunjungi. Tersisa F dan G.
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
4 Team Dosen http://www.mercubuana.ac.id
Kunjungi F. Simpan F di stack. F
D E F H
Cetak F. D
B
H A
S
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
5 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 D
B B
buntu. Kembali ke D. A A A
14. Sekarang berada di D. Disini juga 13 14 15
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
16
buntu, maka proses berakhir.
Top = -1
Kalau nilai Top kembali ke -1, maka
proses selesai.
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 D E F G H
0 1 2 3 4 5 6 7
A
A 0 0 1 1 0 0 0 0 0
B 1 1 0 0 1 1 0 0 0
B C C 2 1 0 0 0 0 1 1 0
D 3 0 1 0 0 0 0 0 1
D E F G E 4 0 1 0 0 0 0 0 1
F 5 0 0 1 0 1 0 0 1
G 6 0 0 1 0 0 0 0 1
2013 H
Algoritma Pemrograman dan Struktur Data Modul 01H 7 0 0 0Pusat Bahan Ajar dan eLearning
1 1 1 1 0
6 Team Dosen http://www.mercubuana.ac.id
Gambar-2a
2a
Graph G
Gambar 2b.
Adjacency Matriks
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
A
B C
D E F G
0 1 2 3 4 5
F = Front (depan)
Q A B C 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
F = Front (depan)
Q 0 1 2 R = Rear (belakang
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
7 Team Dosen http://www.mercubuana.ac.id
F R
0 1 2 3 4 5
Q A B C
F R
Proses penelusuran selengkapnya dapat diterangkan sebagai berikut :
R
1. Misal dimulai dari
simpul A. Ambil A.
0 1 2 3 4 5 6 7
Simpan A ke antrian
Q. Pointer F dan R A
Q A
menunjuk A.
F
R
2. A berhubungan
A
dengan simpul B dan
0 1 2 3 4 5 6 7
C. Ambil(kunjungi) B
dan C. Simpan ke B C Q A B C
dalam antrian. R
menunjuk yang
F
terakhir yaitu C.
R
3. Pointer F maju satu A
langkah, menunjuk B.
0 1 2 3 4 5 6 7
B ada hubungan
B C
dengan D dan E. Q A B C D E
Simpan D dan E
dalam antrian, dan D E F
pointer R menunjuk E
A R
4. Pointer F maju satu
langkah, menunjuk C.
0 1 2 3 4 5 6 7
C ada hubungan
B C
dengan F dan G. Q A B C D E F G
Simpan F dan G
dalam antrian, dan D E F G F
pointer R menunjuk G
R
5. Pointer F maju satu
langkah, menunjuk D. A
0 1 2 3 4 5 6 7
D ada hubungan
dengan H. Simpan H B Q A B C D E F G H
C
dalam antrian, dan
H
pointer R menunjuk H F
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
0 1
5
15
17
2
3
10 4 6
0 1 2 3 4
Untuk 2 buah kota (simpul) yang tidak
0 0 12 5 999 17 dihubungkan langsung oleh jalan (busur)
maka jaraknya dibuat dibuat nilai tak
1 12 0 999 15 999 terhingga yang diwakili nilai 999
2 5 999 0 999 10
3 999 15 999 0 6
4 17 999 10 6 0
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
9 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 :
0 12
0 5 0 1
2
15
17 3 3
4 6 10 6
4 3
a. 0 – 4 – 3 b. 0 – 2 – 4 – 3
c. 0 – 1 – 3
Jarak = 23 Jarak = 21
Jarak = 27
Kesimpulan :
Lintasan terpendek dari 0 ke 3 adalah 21 km, dengan lintasan : 0 – 2 – 4 – 3
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
0 1
2
20
15
2
3
6 4 4
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
10 Team Dosen http://www.mercubuana.ac.id
Gambar 4a. graf
0 1 2 3 4 0 1 2 3 4
0 0 5 2 999 15 0 0 5 2 12 15
1 5 0 999 20 999 1 5 0 7 17 13
2 2 999 0 999 6 2 2 7 0 10 6
3 999 20 999 0 4 3 12 17 10 0 4
4 15 999 6 4 0 4 8 13 6 4 0
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
0 1
5
6
2 28
4 3
19
4
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
11 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.
2013 Algoritma Pemrograman dan Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
12 Team Dosen http://www.mercubuana.ac.id