Pemrograman Algoritma Dan Struktur Data TI
Pemrograman Algoritma Dan Struktur Data TI
MODUL PERKULIAHAN
Pemrograman
Algoritma
Struktur Data
01
Ilmu Komputer Tehnik Informatika 87042 Tim Dosen
Abstract Kompetensi
Pengenalan Bahasa C++ Mampu menggunakan IDE Borland C++
Konstanta dan tipe data dalam C++ Mampu membuat program console
Mencetak nilai konstanta bilangan integer sederhana dalam Bahasa C++ dan
dan float serta string dalam C++ mencetak konstanta bilangan, karakter dan
Memberi nilai ke dalam variabel bilangan string dalam Bahasa C++
integer dan float dalam C++ Mampu memberi nilai ke dalam variabel
bertipe data bilangan integer dan float
serta menampilkan nilai variabel bilangan
integer dan float
STRUKTUR DASAR C++
1. Pendahuluan
Algoritma adalah urutan aksi-aksi yang dinyatakan dengan jelas dan tidak rancu
untuk memecahkan suatu masalah dalam rentang waktu tertentu. Setiap aksi harus
dapat dikerjakan dan mempunyai efek tertentu.
Algoritma dapat dituliskan dengan banyak cara, mulai dari menggunakan bahasa
alami yang digunakan sehari-hari, simbol grafik bagan alir, sampai menggunakan bahasa
pemograman seperti bahasa C atau C++.
2. C dan C++
3. Mengenal C++
C++ merupakan perluasan bahasa C dengan tambahan fasilitas kelas (Class).
Program C++ berupa sekumpulan fungsi. Bahkan program utama juga berbentuk
fungsi, yaitu fungsi main().
Kode C++ bersifat case sensitive, artinya membedakan antara huruf kapital dengan
huruf kecil.
Bahasa C dan C++ merupakan bahasa yang sangat populer dalam dunia
pengembangan perangkat lunak. Kedua bahasa ini digolongkan ke dalam bahasa
tingkat menengah (middle level language).
Keistimewaan dari bahasa C++ adalah karena bahasa ini mendukung pemrograman
berarah objek atau yang lebih sering dikenal dengan istilah Object Oriented
Programming (OOP).
2015 Pemrograman Algoritma Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
2 Tim Dosen http://www.mercubuana.ac.id
Bahasa C
Bahasa C++
#include <iostream.h>
//Protopype fungsi
tipe_data nama_fungsi(parameter1,parameter2,..);
//Fungsi utama
void main()
{
statemen_yang_akan_dilakukan;
...
return 0;
}
//Implementasi fungsi
tipe_data nama_fungsi(parameter1,parameter2,...)
{
statemen_yang_akan_dilakukan;
...
}
Contoh1 :
2015 Pemrograman Algoritma Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
3 Tim Dosen http://www.mercubuana.ac.id
#include<iostream.h>
int main()
{
cout <<"Selamat menggunakan C++";
return 0;
}
Keterangan:
#include adalah sebuah prosesor pengarah yang mengatakan kepada kompiler untuk
meletakan kode dari header file iostream.h kedalam program. Fungsi cout memerlukan
file iostream.h.
Main adalah nama judul fungsi.
Tanda () digunakan untuk mengapit argumen fungsi yaitu nilai yang akan dilewatkan ke
fungsi.
Tanda { pada fungsi main() menyatakan awal eksekusi program. Adapun } pada fungsi
main() menyatakan akhir eksekusi program.
Pemakaian fungsi cout dipakai untuk menampilkan text di layar monitor anda.
memakai tanda atau symbol <<, yang diketahui sebagai operator pemasukan (insertion
operators). Tanda tersebut mengatakan kepada kompiler agar segera menghasilkan
output sesuai dengan input anda.
”Selamat menggunakan C++“ adalah suatu pernyataan yang diapit oleh tanda petik
ganda. Setiap pernyataan harus diakhiri dengan tanda titik koma (;).
return 0 maksudnya pada baris ini juga ada kode yang memerintahkan fungsi main
kembali ke 0. Pada saat satu kali kembali.
Contoh 2:
#include <iostream.h>
int main()
{
int x, y, z;
cout <<“Masukkan bilangan kesatu:“;
cin >> x;
cout <<“Masukkan bilangan kedua:“;
cin >> y;
z = x + y;
cout << ”Jadi hasil penjumlahannya adalah: ” << z;
return 0;
}
2015 Pemrograman Algoritma Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
4 Tim Dosen http://www.mercubuana.ac.id
Hasil Eksekusi :
1. Komentar :
Komentar merupakan bagian yang penting dalam program.
Komentar tidak akan mempengaruhi terhadap jalannya program karena
komentar tidak ikut dieksekusi pada saat proses kompilasi.
Fungsi komentar antara lain:
1. Menjelaskan tujuan / fungsi program
2. Memudahkan saat program dibuat atau direvisi
3. Menjelaskan keterangan-keterangan lain tentang kegunaan sejumlah
pernyataan dalam program.
a. Menggunakan tanda //
Pada C++ suatu komentar diawali dengan dua tanda garis miring (//). Semua
tulisan yang terletak sesudah tanda // hingga akhir baris dengan sendirinya akan
diperlakukan sebagai keterangan. Tanda ini digunakan untuk menuliskan
komentar yang banyaknya hanya satu baris.
b. Menggunakan tanda /*.....*/
Tanda ini dapat digunakan untuk menuliskan komentar yang banyaknya satu
baris atau lebih. Bentuk ini bermanfaat untuk mengabaikan sejumlah pernyataan
yang telah dibuat oleh pemrograman karena suatu alasan misalnya sedang
melacak kesalahan.
2. Identifier
Identifier (pengenalan) adalah suatu nama yang biasa dipakai dalam pemrograman
untuk menyatakan variabel, konstanta bernama, tipe data, fungsi, label, objek.
Indentifikasi dilakukan untuk mempermudah proses penanganan data atau nilai.
Ketentuan penulisan identifier:
a. Tidak boleh berupa angka atau diawali dengan karakter yang berupa angka.
b. Tidak boleh mengandung spasi.
c. Tidak boleh menggunakan karakter-karakter simbol ( #, @, ?, $, dll).
d. Tidak boleh menggunakan kata kunci (keyword) yang terdapat pada C++.
2015 Pemrograman Algoritma Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
5 Tim Dosen http://www.mercubuana.ac.id
e. Nama identifier sebaiknya disesuaikan dengn kebutuhannya artinya jangan
sampai orang lain bingung hanya karena salah satu penamaan identifier.
Contoh identifier:
int bilangan_bulat;
long X2;
int A[5]
const int MAX=5;
int A=10, B=15, C=25;
3. Tipe Data
Tipe data berfungsi untuk merepresentasikan jenis dari sebuah nilai yang terdapat dalam
program. Dalam C++ terdapat beberapa tipe data dasar yang telah didefinisikan yaitu:
1. Tipe bilangan bulat (integer)
Digunakan untuk data-data angka yang tidak mengandung angka dibelakang koma.
Misalnya 3, 21, 78.
contoh:
#include <iostream.h>
int main()
{
int x; //mendeklarasikan variabel x dengn tipe data int
x=3; //melakukan assigment terhadap variabel x
cout <<“Nilai x adalah “<<x;
return 0;
}
2015 Pemrograman Algoritma Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
6 Tim Dosen http://www.mercubuana.ac.id
3. Tipe Logika (boolean)
Tipe ini merepresentasikan data-data yang hanya mengandung dua buah nilai, yaitu
nilai logika (boolean) yang terdiri dari nilai benar (direpresentasikan dengan nilai 1) dan
nilai salah (direpresentasikan dengan nilai 0).
2015 Pemrograman Algoritma Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
7 Tim Dosen http://www.mercubuana.ac.id
{
struct MAHASISWA
{
char NIM[15];
char Nama[20];
char Alamat[30];
char Kota[15];
}A;
strcpy(A.NIM,"01500024");
strcpy(A.Nama,"Susi Susanti");
strcpy(A.Alamat,"Jl.Raya Meruya Selatan");
strcpy(A.Kota,"Jakarta");
cout<<A.NIM<<endl;
cout<<A.Nama<<endl;
cout<<A.Alamat<<endl;
cout<<A.Kota<<endl;
return 0;
Hasil Eksekusi :
b. Enumerasi
Tipe Enumerasi adalah tipe data yang nilainya terbatas pada nilai-nilai yang telah
didefinisikan saja. Tipe enumerasi digunakan untuk membentuk tipe data yang nilainya
pasti.
Deklarasinya:
enum nama_tipe{nilai1, nilai2,....};
Contoh pendefinisian tipe enumerasi:
enum JENIS_KELAMIN{Pria, Wanita};
enum HARI{Minggu, Senin, Selasa, Rabu, Kamis, Jumat, Sabtu};
2015 Pemrograman Algoritma Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
8 Tim Dosen http://www.mercubuana.ac.id
contoh :
#include<iostream.h>
#include<string.h>
enum JENIS_KELAMIN{Pria, Wanita};
int main()
{
struct MAHASISWA
{
char NIM[15];
char Nama[20];
char Alamat[30];
char Kota[15];
JENIS_KELAMIN gender;
}A;
strcpy(A.NIM,"01500024");
strcpy(A.Nama,"Susi Susanti");
strcpy(A.Alamat,"Jl.Raya Meruya Selatan");
strcpy(A.Kota,"Jakarta");
A.gender=Wanita;
cout<<"NIM : "<<A.NIM<<endl;
cout<<"Nama : "<<A.Nama<<endl;
cout<<"Alamat : "<<A.Alamat<<endl;
cout<<"Kota : "<<A.Kota<<endl;
cout<<"Jenis Kelamin : "<<A.gender<<endl;
return 0;
}
Hasil Eksekusi :
2015 Pemrograman Algoritma Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
9 Tim Dosen http://www.mercubuana.ac.id
Latihan :
2015 Pemrograman Algoritma Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
10 Tim Dosen http://www.mercubuana.ac.id
Daftar Pustaka
Andri Kristanto, Algoritma & Pemrograman dengan C++ Edisi 2, Graha Ilmu, Yogyakarta,
2009.
Moh. Sjukani, Algoritma & Struktur Data dengan C, C++ dan JAVA, Mitra Wacana Media,
Bandung, 2004.
2015 Pemrograman Algoritma Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
11 Tim Dosen http://www.mercubuana.ac.id
MODUL PERKULIAHAN
Pemrograman
Algoritma
Struktur Data
02
Ilmu Komputer Tehnik Informatika 87042 Tim Dosen
Abstract Kompetensi
Operator || dan && dalam bahasa C++ Mampu menggunakan operator || (OR)
dan && (AND) dan melakukan kombinasi
Proses konversi dari multi conditions antara berbagai operator tersebut.
menjadi nested if
Mampu melakukan konversi dari multi
conditions menjadi nested if
OPERATOR C++
Operator adalah simbol yang mengolah nilai pada operand dan menghasilkan satu nilai
baru.
Operator dapat dikelompokan menjadi 4 bagian yaitu:
1. Operator Assignment
2. Operator Unary
3. Operator Binary
4. Operator Ternary
1. Operator Assignment
Adalah operator yang berfungsi untuk memasukkan (assign) nilai ke dalam suatu
variabel ataupun konstanta. Operator ini dilambangkan dengan tanda sama dengan (=)
Contoh:
MyChar = 'C';
MyString = "Rahasia C++";
MyInteger = 24;
MyDouble = 22.021;
2. Operator Unary
Adalah operator yang hanya melibatkan sebuah operand. Yang termasuk ke dalam tabel
operator unary antara lain:
+ Positif +7
- Negatif -7
++ Incremen C++
-- decremen C--
Increment adalah suatu penambahan nilai yang terjadi pada sebuah variabel.
Operator yang digunakan untuk melakukan increment adalah operator ++.
Ada dua jenis increment dalam C++ yaitu pre-increment dan post-increment.
Pre-increment artinya melakukan penambahan nilai sebelum suatu variabel itu
diproses. Post-incremen artinya melakukan proses terlebih dahulu sebelum
dilakukan penambahan nilai.
2015 Pemrograman Algoritma Struktur Data Modul 02 Pusat Bahan Ajar dan eLearning
2 Tim Dosen http://www.mercubuana.ac.id
Decrement merupakan kebalikan dari proses increment, yaitu menurunkan
(mengurangi) nilai dari suatu variabel. Operator yang digunakan untuk melakukan
decrement adalah operator --. Decrement juga dibagi 2 yaitu pre-decrement dan
post-decrement.
Contoh :
#include <vcl.h>
#pragma hdrstop
#include <iostream.h>
#include <conio.h>
void main()
{
int A; //mendeklarasikan variabel
A = 5;
cout<<"Contoh melakukan pre-increment \n";
cout<<"Nilai A awal adalah : "<<A<<endl;
cout<<"Nilai ++A adalah :"<<++A<<endl;
cout<<"Nilai A akhir adalah:"<<A<<endl;
cout<<'\n'<<endl;
cout<<"Contoh melakukan pre-decrement \n";
cout<<"Nilai A awal adalah : "<<A<<endl;
cout<<"Nilai --A adalah :"<<--A<<endl;
cout<<"Nilai A akhir adalah:"<<A<<endl;
cout<<'\n'<<endl;
//mengubah nilai A menjadi 10
A = 10;
cout<<"Contoh melakukan post-increment \n";
cout<<"Nilai A awal adalah : "<<A<<endl;
cout<<"Nilai A++ adalah :"<<A++<<endl;
cout<<"Nilai A akhir adalah:"<<A<<endl;
cout<<'\n'<<endl;
cout<<"Contoh melakukan post-decrement \n";
cout<<"Nilai A awal adalah : "<<A<<endl;
cout<<"Nilai A-- adalah :"<<A--<<endl;
cout<<"Nilai A akhir adalah:"<<A<<endl;
cout<<'\n'<<endl;
getch();
}
2015 Pemrograman Algoritma Struktur Data Modul 02 Pusat Bahan Ajar dan eLearning
3 Tim Dosen http://www.mercubuana.ac.id
Hasil Eksekusi :
3. Operator Binary
Adalah operator yang digunakan dalam operasi yang melibatkan dua buah operand.
Operator Binary dikelompokan menjadi 4 jenis yaitu:
a. Operator Aritmatika
b. Operator Logika
c. Operator Relasional
d. Operator Bitwise
a. Operator Aritmatika
Adalah operator yang digunakan untuk melakukan operasi-operasi aritmatika seperti
penjumlahan, pengurangan, dan sebagainya.
Operator Keterangan
* Perkalian
/ Pembagian
% Modulus atau sisa bagi
+ Penjumlahan
- Pengurangan
Contoh :
2015 Pemrograman Algoritma Struktur Data Modul 02 Pusat Bahan Ajar dan eLearning
4 Tim Dosen http://www.mercubuana.ac.id
#include <vcl.h>
#pragma hdrstop
#include <iostream.h>
#include <conio.h>
int main()
{
int X = 10, Y = 3;
int jumlah, kurang, kali, bagi, sisa_bagi;
jumlah = X + Y;
kurang = X - Y;
kali = X * Y;
bagi = X / Y;
sisa_bagi= X % Y;
cout<<X<<" + "<<Y<<" = "<<jumlah<<endl;
cout<<X<<" - "<<Y<<" = "<<kurang<<endl;
cout<<X<<" * "<<Y<<" = "<<kali<<endl;
cout<<X<<" / "<<Y<<" = "<<bagi<<endl;
cout<<X<<" % "<<Y<<" = "<<sisa_bagi<<endl;
getch();
}
Hasil eksekusi :
b. Operator Logika
Adalah operator yang digunakan untuk melakukan operasi dimana nilai yang
dihasilkan dari operasi tersebut hanya bernilai benar (true / 1) atau salah (false / 0).
Nilai ini biasa disebut dengan boolean. Yang termasuk operator logika antara lain:
1. Operator AND (&&)
2015 Pemrograman Algoritma Struktur Data Modul 02 Pusat Bahan Ajar dan eLearning
5 Tim Dosen http://www.mercubuana.ac.id
hanya akan menghasilkan nilai 1 (benar) jika semua operand-nya bernilai benar,
namun jika tidak maka operasi tersebut akan menghasikan nilai 0 (salah).
2. Operator OR (||)
hanya akan menghasilkan nilai 0 (salah) jika semua operand-nya bernilai salah,
namun jika tidak maka operasi tersebut akan menghasilkan nilai 1 (benar).
#include <vcl.h>
#pragma hdrstop
#include<iostream.h>
#include<conio.h>
int main()
{
cout<<"Logika AND"<<endl;
cout<<" 1 AND 1 = "<<(1&&1)<<endl;
cout<<" 1 AND 0 = "<<(1&&0)<<endl;
cout<<" 0 AND 1 = "<<(0&&1)<<endl;
cout<<" 0 AND 0 = "<<(0&&0)<<endl;
cout<<endl;
cout<<"Logika OR"<<endl;
cout<<" 1 OR 1 = "<<(1||1)<<endl;
cout<<" 1 OR 0 = "<<(1||0)<<endl;
cout<<" 0 OR 1 = "<<(0||1)<<endl;
cout<<" 0 OR 0 = "<<(0||0)<<endl;
cout<<endl;
cout<<"Logika NOT"<<endl;
cout<<" NOT 1 = "<<(!1)<<endl;
cout<<" NOT 0 = "<<(!0)<<endl;
getch();
}
Hasil Eksekusi :
2015 Pemrograman Algoritma Struktur Data Modul 02 Pusat Bahan Ajar dan eLearning
6 Tim Dosen http://www.mercubuana.ac.id
c. Operator Relasional
Adalah operator yang digunakan untuk menentukan relasi atau hubungan dari dua
buah operand. Operator ini banyak digunakan untuk melakukan pengecekan sebuah
ekspresi (kondisi) dalam struktur percabangan.
OperatorJenis Operasi
> Lebih besar
< Lebih kecil
>= Lebih besar atau sama dengan
<= Lebih kecil atau sama dengan
== Sama dengan
!= Tidak sama dengan
Contoh :
#include <vcl.h>
#pragma hdrstop
#include<iostream.h>
#include<conio.h>
int main()
{
int nilai;
//memasukkan bilangan bulat
cout<<" Masukkan sebuah bilangan bulat : ";
cin>>nilai;
2015 Pemrograman Algoritma Struktur Data Modul 02 Pusat Bahan Ajar dan eLearning
7 Tim Dosen http://www.mercubuana.ac.id
if (nilai % 2 == 0)
cout<<nilai<<" adalah bilangan Genap"<<endl;
else
cout<<nilai<<" adalah bilangan Ganjil"<<endl;
getch();
}
Hasil eksekusi :
d. Operator Bitwise
Adalah operator yang digunakan untuk melakukan operasi-operasi yang berhubungan
dengan pemanipulasian bit.
Yang termasuk dalam operator bitwise anta lain:
Operator Keterangan
<< Shift left
>> shift right
&& operasi bit AND
|| Operasi bit OR
^ Operasi bit XOR
~ Operasi bit NOT
Operator & berguna untuk melakukan operasi ”DAN” pada tataran bit.
1001 9
1010 10
1000 8
2015 Pemrograman Algoritma Struktur Data Modul 02 Pusat Bahan Ajar dan eLearning
8 Tim Dosen http://www.mercubuana.ac.id
Operator | berguna untuk melakukan operasi ”ATAU” pada tataran bit.
1001 9
1010 10
1011 11
Operator ^ berguna untuk melakukan operasi ”ATAU EKSKLUSIF” pada tataran bit.
1001 9
1010 10
0011 3
Operator ~ memberikan hasil dengan masing-masing bit berupa kebalikan dari bit
operand.
1011 1001
0100 0110
Operator << (geser kiri) berfungsi untuk menggeser bit-bit ke kiri.
contoh: 29 << 1 memberikan nilai hasil 58
0001 1101 29
0011 1010 58
Operator << (geser kanan) berfungsi untuk menggeser bit-bit ke kanan.
contoh: 29 << 1 memberikan nilai 14
0001 1101 29
0000 1110 14
Contoh :
#include <vcl.h>
#pragma hdrstop
#include<iostream.h>
#include<conio.h>
int main()
{
int x=64;
int y= 1;
cout<<" NOT "<<x<<" = "<< ~x<<endl;
cout<<x<<" OR "<<y<<" = "<<(x|y)<<endl;
cout<<x<<" AND "<<y<<" = "<<(x&y)<<endl;
cout<<x<<" XOR "<<y<<" = "<<(x^y)<<endl;
cout<<x<<" GESER KIRI "<<y<<" = "<<(x<<y)<<endl;
cout<<x<<" GESER KANAN "<<y<<" = "<<(x>>y)<<endl;
getch();
}
2015 Pemrograman Algoritma Struktur Data Modul 02 Pusat Bahan Ajar dan eLearning
9 Tim Dosen http://www.mercubuana.ac.id
Hasil eksekusi :
4. Operator Ternary
Adalah operator yang digunakan dalam operasi yang melibatkan tiga buah operand.
Bentuk umum:
Contoh :
#include <vcl.h>
#pragma hdrstop
#include<iostream.h>
#include<conio.h>
int main()
{
int angka;
cout<<"Masukkan bilangan: ";
cin>>angka;
(angka %2 ==0) ? (cout<<angka<<" adalah bilangan Genap \n") :
(cout<<angka<<" adalah bilangan Ganjil \n");
getch();
}
Hasil eksekusi :
2015 Pemrograman Algoritma Struktur Data Modul 02 Pusat Bahan Ajar dan eLearning
10 Tim Dosen http://www.mercubuana.ac.id
Latihan :
1. Buatlah program untuk menentukan bilangan positif atau negatif dengan menggunakan
operator ternary!
2. Buatlah program untuk menentukan nilai mahasiswa lulus atau tidak lulus (nilai lulus jika
>= 65) dengan menggunakan operator ternary!
3. Buatlah program untuk menghitung menghitung luas persegi panjang (panjang * lebar)
dengan inputan dari user
4. Buatlah program untuk menghitung menghitung Keliling lingkaran (2 * PI * jari-jari),
Dengan inputan dari user!
2015 Pemrograman Algoritma Struktur Data Modul 02 Pusat Bahan Ajar dan eLearning
11 Tim Dosen http://www.mercubuana.ac.id
Daftar Pustaka
Andri Kristanto, Algoritma & Pemrograman dengan C++ Edisi 2, Graha Ilmu, Yogyakarta,
2009.
Moh. Sjukani, Algoritma & Struktur Data dengan C, C++ dan JAVA, Mitra Wacana Media,
Bandung, 2004.
2015 Pemrograman Algoritma Struktur Data Modul 02 Pusat Bahan Ajar dan eLearning
12 Tim Dosen http://www.mercubuana.ac.id
MODUL PERKULIAHAN
Pemrograman
Algoritma
Struktur Data
03
Ilmu Komputer Tehnik Informatika 87042 Tim Dosen
Abstract Kompetensi
Struktur Kondisi IF Mampu menggunakan struktur kondisi
IF dalam bahasa pemrograman C++.
Struktur Kondisi Switch Case
Mampu menggunakan struktur kondisi
Switch Case dalam bahasa pemrograman
C++.
PERCABANGAN (DECISION)
Decision digunakan untuk memilih salah satu alternatif jawaban yang tepat dari pilihan
yang ada.
Suatu pemilihan statemen yang akan dieksekusi dimana pemilihan tersebut didasarkan
atas kondisi tertentu.
Statemen yang terdapat dalam sebuah blok percabangan akan dieksekusi jika kondisi
yang didefinisikan terpenuhi (bernilai benar) Artinya jika kondisi tidak terpenuhi (bernilai
salah) maka statemen tersebut tidak ikut dieksekusi atau akan diabaikan oleh compiler.
Hasil Eksekusi :
2015 Pemrograman Algoritma Struktur Data Modul 03 Pusat Bahan Ajar dan eLearning
2 Tim Dosen http://www.mercubuana.ac.id
2. Struktur dua kondisi (perintah if – else)
if (kondisi)
{
statemen_jika_kondisi_terpenuhi;
}
else
{
statemen_jika_kondisi_tidak_terpenuhi;
}
Contoh :
#include <vcl.h>
#pragma hdrstop
#include <iostream.h>
#include <conio.h>
void main()
{
int nilai;
cout<<"Masukkan sebuah bilangan bulat: ";
cin>>nilai;
if (nilai %2 == 0)
{
cout<<nilai <<" adalah bilangan genap";
}
else
{
cout<<nilai <<" adalah bilangan ganjil";
}
getch();
}
Hasil eksekusi :
2015 Pemrograman Algoritma Struktur Data Modul 03 Pusat Bahan Ajar dan eLearning
3 Tim Dosen http://www.mercubuana.ac.id
3. Struktur tiga kondisi (perintah multiple if – else)
Percabangan jenis ini merupakan perluasan dari struktur yang memiliki dua
kondisi diatas yaitu dengan menyisipkan satu atau lebih kondisi ke dalamnya.
Bentuk umum:
if (kondisi1)
{
statemen_jika_kondisi1_terpenuhi;
}
else if (kondisi2)
{
statemen_jika_kondisi2_terpenuhi;
}
else if (kondisi3)
{
statemen_jika_kondisi3_terpenuhi;
}
....
else
{
statemen_jika_semua_kondisi_tidak_terpenuhi;
}
Contoh 1:
#include <vcl.h>
#pragma hdrstop
#include <iostream.h>
2015 Pemrograman Algoritma Struktur Data Modul 03 Pusat Bahan Ajar dan eLearning
4 Tim Dosen http://www.mercubuana.ac.id
#include <conio.h>
void main()
{
int nilai; //memasukkan bilangan bulat
cout<<"Masukkan sebuah bilangan yang akan diperiksa : ";
cin>>nilai; //pengecek bilangan apakah habis dibagi dua atau tidak
if (nilai > 0)
{
cout<<nilai<< " adalah bilangan positif ";
}
else if (nilai < 0)
{
cout<<nilai<< " adalah bilangan negatif ";
}
else
{
cout<< " Anda memasukkan bilangan NOL ";
}
getch();
}
Hasil Eksekusi :
Contoh 2 :
2015 Pemrograman Algoritma Struktur Data Modul 03 Pusat Bahan Ajar dan eLearning
5 Tim Dosen http://www.mercubuana.ac.id
#include <vcl.h>
#pragma hdrstop
#include <iostream.h>
#include <conio.h>
void main()
{
int nilai;
char huruf;
cout<<"Masukkan nilai : " ;
cin>>nilai;
if ((nilai>=81) && (nilai<=100))
huruf='A';
else
if ((nilai>=71) && (nilai<=80))
huruf='B';
else
if ((nilai>=61) && (nilai<=70))
huruf='C';
else
if ((nilai>=51) && (nilai<=60))
huruf='D';
else
huruf='E';
cout<<"Jadi nilai huruf yang didapat adalah: "<<huruf;
getch();
}
Hasil eksekusi :
2015 Pemrograman Algoritma Struktur Data Modul 03 Pusat Bahan Ajar dan eLearning
6 Tim Dosen http://www.mercubuana.ac.id
Latihan :
Buatlah program untuk menentukan huruf, dengan ketentuan sebagai
berikut:
Jika karakter >=’A’ dan karakter <=’Z’ maka Karakter yang Anda masukkan adalah
huruf besar.
Jika karakter >=’a’ dan karakter <=’z’ maka Karakter yang Anda masukkan adalah
huruf kecil.
Jika karakter >=’0’ dan karakter <=’9’ maka Karakter yang Anda masukkan adalah
Angka.
Jika bukan semuanya berarti Karakter yang Anda masukkan adalah bukan
alphanumeric.
Jawab :
#include <vcl.h>
#pragma hdrstop
//Program menentukan karakter
#include <iostream.h>
#include <conio.h>
void main()
{
char karakter;
cout<<"Masukkan sebuah karakter: ";
cin>>karakter;
if (karakter >= 'A' && karakter <= 'Z')
cout<<"Masukkan Anda adalah huruf besar";
else if (karakter >= 'a' && karakter <= 'z')
cout<<"Masukkan Anda adalah huruf kecil";
else if (karakter >= '0' && karakter <= '9')
cout<<"Masukkan Anda adalah angka";
else
cout<<"Masukkan Anda bukan alphanumeric";
getch();
}
2015 Pemrograman Algoritma Struktur Data Modul 03 Pusat Bahan Ajar dan eLearning
7 Tim Dosen http://www.mercubuana.ac.id
Hasil Eksekusi :
4. Perintah switch
Perintah ini memiliki bentuk switch – case yang digunakan untuk pilihan berjumlah
banyak.
Perintah switch tidak dianjurkan pada pilihan yang melibatkan jangkauan nilai (range)
tetapi dianjurkan pada pilihan berupa konstanta dan banyak misalnya untuk memilih
menu.
Bentuk umum:
switch (pernyataan)
{
case nilai_1:
blok_pernyataan1;
break;
case nilai_2:
blok_pernyataan2;
break;
…
2015 Pemrograman Algoritma Struktur Data Modul 03 Pusat Bahan Ajar dan eLearning
8 Tim Dosen http://www.mercubuana.ac.id
default:
blok_pernyataan_n;
}
Cara kerjanya:
1. switch akan mengevaluasi pilihan dan apabila isinya sama dengan nilai_1,
maka blok pernyataan 1 akan dijalankan sampai menemukan perintah break untuk
kemudian keluar dari blok switch.
2. Bila pilihan tidak sama isinya dengan nilai_1, maka akan dicocokkan lagi dengan
nilai_2. dan apabila isinya sama dengan nilai_2, maka blok pernyataan 2 akan
dijalankan sampai menemukan perintah break untuk kemudian keluar dari blok
switch.
3. Terakhir, apabila isi pilihan tidak sesuai dengan nilai_1, nilai_2 dan seterusnya maka
secara otomatis yang dijalankan adalah blok pernyataan default.
Contoh :
#include <vcl.h>
#pragma hdrstop
#include <iostream.h>
#include <conio.h>
void main()
{
{
int bil;
cout<<"Masukkan sebuah angka (1 .. 7): ";
cin>>bil;
switch (bil)
{
case 1:
cout<<"Hari ke - "<<bil<<"adalah MINGGU";
break;
case 2:
cout<<"Hari ke - "<<bil<<" adalah SENIN";
break;
case 3:
cout<<"Hari ke - "<<bil<<"adalah SELASA";
break;
case 4:
cout<<"Hari ke - "<<bil<<"adalah RABU";
break;
case 5:
cout<<"Hari ke - "<<bil<<"adalah KAMIS";
break;
case 6:
cout<<"Hari ke - "<<bil<<"adalah JUMAT";
break;
case 7:
cout<<"Hari ke - "<<bil<<"adalah SABTU";
break;
2015 Pemrograman Algoritma Struktur Data Modul 03 Pusat Bahan Ajar dan eLearning
9 Tim Dosen http://www.mercubuana.ac.id
default:
cout<<"Kode tidak ada";
}
getch();
}
}
Hasil eksekusi :
Soal Latihan :
2015 Pemrograman Algoritma Struktur Data Modul 03 Pusat Bahan Ajar dan eLearning
10 Tim Dosen http://www.mercubuana.ac.id
Daftar Pustaka
Andri Kristanto, Algoritma & Pemrograman dengan C++ Edisi 2, Graha Ilmu, Yogyakarta,
2009.
Moh. Sjukani, Algoritma & Struktur Data dengan C, C++ dan JAVA, Mitra Wacana Media,
Bandung, 2004.
2015 Pemrograman Algoritma Struktur Data Modul 03 Pusat Bahan Ajar dan eLearning
11 Tim Dosen http://www.mercubuana.ac.id
MODUL PERKULIAHAN
Pemrograman
Algoritma
Struktur Data
04
Ilmu Komputer Tehnik Informatika 87042 Tim Dosen
Abstract Kompetensi
Struktur perulangan dengan for, Mampu menggunakan struktur
do‐while dan while perulangan dengan for, do‐while dan
Pengaplikasian struktur perulangan while dalam Bahasa Pemrograman C++
untuk memecahkan soal‐soal Mampu memanfaatkan struktur
matematika dan fisika perulangan untuk memecahkan soal‐soal
matematika dan fisika
PERULANGAN (LOOPING)
1. Pernyataan While
Pada pernyataan while, pengecekan terhadap loop dilakukan dibagian awal (sebelum
tubuh loop). Bentuk umum :
while (kondisi)
pernyataan;
Perulangan ini banyak digunakan bila jumlah perulangannya belum diketahui. Proses
perulangan akan terus berlanjut selama kondisinya bernilai benar (true) dan akan
berhenti bila kondisinya bernilai salah.
Contoh :
#include <vcl.h>
#pragma hdrstop
#include <iostream.h>
#include <conio.h>
void main()
{
int x;
x = 1; /* awal variabel */
while (x <= 10) /* Batas akhir perulangan */
{
cout<<"Bahasa C++ "<<endl;
x ++; /* variabel x ditambah dengan 1 */
}
getch();
}
Hasil Eksekusi :
2015 Pemrograman Algoritma Struktur Data Modul 04 Pusat Bahan Ajar dan eLearning
2 Tim Dosen http://www.mercubuana.ac.id
Keterangan :
Pada perulangan while, proses atau perintah mencetak kata-kata “BAHASA C++”
akan terus dilakukan selama variabel x masih kurang atau sama dengan 10. Setiap
kali melakukan perulangan, nilai dari variabel x akan bertambah 1.
Contoh 2:
#include <vcl.h>
#pragma hdrstop
#include <iostream.h>
#include <conio.h>
void main()
{
int i = 0;
while (i != 99)
{
cout<<" Masukkan Sebuah Bilangan : ";
cin>>i;
cout<<"Bilangan Anda adalah= "<<i<<endl;
}
getch();
}
Hasil eksekusi :
Ket :
Program minta inputan dari user dengan tipe integer
Selama user belum memasukkan nilai 99 maka program akan terus melooping.
Looping akan berhenti jika user telah memasukkan angka 99.
2015 Pemrograman Algoritma Struktur Data Modul 04 Pusat Bahan Ajar dan eLearning
3 Tim Dosen http://www.mercubuana.ac.id
2. Pernyatan Do .. While…
Contoh :
#include <vcl.h>
#pragma hdrstop
#include <iostream.h>
#include <conio.h>
void main()
{
int x; x = 1;
do
{
cout<<"BAHASA C++ "<<endl; x ++;
}
while(x <= 10);
getch();
}
Hasil eksekusi :
2015 Pemrograman Algoritma Struktur Data Modul 04 Pusat Bahan Ajar dan eLearning
4 Tim Dosen http://www.mercubuana.ac.id
3. Pernyataan For
Struktur perulangan for biasa digunakan untuk mengulang suatu proses yang telah
diketahui jumlah perulangannya. Dari segi penulisannya, struktur perulangan for
tampaknya lebih efisien karena susunannya lebih simpel dan sederhana.
Bentuk umum perulangan for:
Hasil Eksekusi :
2015 Pemrograman Algoritma Struktur Data Modul 04 Pusat Bahan Ajar dan eLearning
5 Tim Dosen http://www.mercubuana.ac.id
4. FOR BERSARANG (NESTED FOR)
For bersarang dapat melibatkan lebih dari satu variabel namun yang jelas satu
diantaranya akan digunakan sebagai indeks perulangan.
Bentuk umum:
for( variabel1=nilai_awal; kondisi1; variabel1++){
for( variabel2=nilai_awal; kondisi2; variabel2++){
for( variabel3=nilai_awal; kondisi3; variabel3++){
Statemen_statemen yang akan diulang;
….
}
}
}
Contoh 1 :
#pragma hdrstop
#include <iostream.h>
#include <conio.h>
#include <iomanip.h>
int main()
{
int x,y; for (x=1; x<=10; x++)
{
for (y=1; y<=10; y++)
{
cout<<setw(4)<<x*y<<" ";
}
cout<<"\n";
}
getch();
}
Hasil eksekusi :
2015 Pemrograman Algoritma Struktur Data Modul 04 Pusat Bahan Ajar dan eLearning
6 Tim Dosen http://www.mercubuana.ac.id
Contoh 2 :
#pragma hdrstop
#include <iostream.h>
#include <conio.h>
#include <iomanip.h>
int main()
{
int x,y ; for (x=1; x<=10; x++)
{
for (y=1; y<=x; y++)
{
cout<<setw(4)<<x*y<<" ";
}
cout<<"\n";
}
getch();
}
Hasil eksekusi :
Contoh 3:
#pragma hdrstop
#include <iostream.h>
#include <conio.h>
#include <iomanip.h>
int main()
{
int b,a,e;
char u[26]= "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
2015 Pemrograman Algoritma Struktur Data Modul 04 Pusat Bahan Ajar dan eLearning
7 Tim Dosen http://www.mercubuana.ac.id
cout<<"Masukan Angka : ";
cin>>b;
for(a = b-1; a>=0; a--){
cout<<u[a]<<" ";}
getch();
}
Hasil eksekusi :
Contoh 4 :
#pragma hdrstop
#include <iostream.h>
#include <conio.h>
#include <iomanip.h>
int main()
{
int a,b,e;
char u[26]= "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
cout<<"Masukan Angka : ";
cin>>e;
for(b = 0; b< e; b++){
for(a = 0; a<= b; a++){
cout<<u[a]<<" ";}
cout<<endl;}
getch();
}
Hasil eksekusi :
2015 Pemrograman Algoritma Struktur Data Modul 04 Pusat Bahan Ajar dan eLearning
8 Tim Dosen http://www.mercubuana.ac.id
Contoh program faktorial :
#include <vcl.h>
#pragma hdrstop
#include <iostream>
#include<conio.h>
using namespace std;
long faktorial(int m)
{
if (m == 0) return 1;
else return m * faktorial(m - 1);
}
int main()
{
int n = 3; cout << n << "! = "
<< faktorial(n) << endl;
n = 6;
cout << n << "! = "
<< faktorial(n) << endl;
getch();
}
2015 Pemrograman Algoritma Struktur Data Modul 04 Pusat Bahan Ajar dan eLearning
9 Tim Dosen http://www.mercubuana.ac.id
Hasil eksekusi :
Soal Latihan :
1. Buatlah program dengan menggunakan while dengan tampilan sbb:
3. Buatlah program untuk menampilkan deret bilangan genap antara 2 sampai 30, dengan
menggunakan for
4. Buatlah program untuk menampilkan deret bilangan ganjil antara 11 sampai 50
5. Buatlah program untuk menampilkan deret bilangan genap antara 3 sampai 50
2015 Pemrograman Algoritma Struktur Data Modul 04 Pusat Bahan Ajar dan eLearning
10 Tim Dosen http://www.mercubuana.ac.id
Daftar Pustaka
Andri Kristanto, Algoritma & Pemrograman dengan C++ Edisi 2, Graha Ilmu, Yogyakarta,
2009.
Moh. Sjukani, Algoritma & Struktur Data dengan C, C++ dan JAVA, Mitra Wacana Media,
Bandung, 2004.
2015 Pemrograman Algoritma Struktur Data Modul 04 Pusat Bahan Ajar dan eLearning
11 Tim Dosen http://www.mercubuana.ac.id
MODUL PERKULIAHAN
Pemrograman
Algoritma
Struktur Data
05
Ilmu Komputer Tehnik Informatika 87042 Tim Dosen
Abstract Kompetensi
Function Dalam Bahasa C Mampu membuat program yang
mengandung void function dan typed
function
Function (Fungsi)
Fungsi adalah satu blok kode yang dapat melakukan tugas tertentu atau satu blok
instruksi yang dieksekusi ketika dipanggil dari bagian lain dalam suatu program. Sebuah
fungsi berisi sejumlah pernyataan yang dikemas dalam sebuah nama. Nama tersebut
selanjutnya dapat dipanggil berkali-kali di beberapa tempat dalam program. Keuntungan
pembuatan fungsi secara umum adalah :
Fungsi tanpa nilai balik (return Value) digunakan untuk melakukan proses-proses yang
tidak menghasilkan nilai, seperti melakukan pengulangan, proses pengesetan nilai
ataupun yang lainnya.
Fungsi semacam ini tipe kembaliannya akan diisi dengan nilai void.
2015 Pemrograman Algoritma Struktur Data Modul 05 Pusat Bahan Ajar dan eLearning
2 Tim Dosen http://www.mercubuana.ac.id
Bentuk umumnya:
Void_nama_fungsi(parameter1, parameter2,..)
{
Statemen_yang_akan_dieksekusi;
...
}
Contoh :
#include <vcl.h>
#pragma hdrstop
#include<iostream.h>
#include<conio.h>
void tulis(void)
{
int j;
for (j=0;j<10;j++)
{
cout<<"Belajar Bahasa C++"<<endl;
}
}
main(void)
{
tulis();
getch();
}
Hasil eksekusi :
2015 Pemrograman Algoritma Struktur Data Modul 05 Pusat Bahan Ajar dan eLearning
3 Tim Dosen http://www.mercubuana.ac.id
2. Fungsi Dengan Nilai Balik
Fungsi dengan nilai balik yaitu fungsi yang digunakan untuk melakukan proses-proses
yang berhubungan dengan nilai. Adapun cara pendefinisiannya adalah dengan menuliskan
tipe data dari nilai yang akan dikembalikan didepan nama fungsi.
Bentuk umum:
Contoh :
#include <vcl.h>
#pragma hdrstop
#include<iostream.h>
#include<conio.h>
#include<iostream.h>
LuasBujurSangkar(int sisi)
{
int L;
L = sisi * sisi;
return L;
}
main()
{
int s, Luas;
cout<<"Masukkan nilai sisi : ";
cin>>s;
Luas=LuasBujurSangkar(s);
cout<<"Luas Bujur Sangkar adalah "<<Luas;
getch();
}
2015 Pemrograman Algoritma Struktur Data Modul 05 Pusat Bahan Ajar dan eLearning
4 Tim Dosen http://www.mercubuana.ac.id
Hasil Eksekusi :
Parameter adalah suatu variabel yang berfungsi untuk menampung nilai yang akan
dikirimkan ke dalam fungsi. Parameter itu sendiri terbagi dua macam yaitu:
Parameter formal adalah variabel yang ada pada daftar parameter dalam definisi
fungsi.
Parameter aktual adalah parameter (tidak selamanya menyatakan variabel) yang
digunakan dalam pemanggilan fungsi.
Contoh :
#include <vcl.h>
#pragma hdrstop
#include<iostream.h>
#include<conio.h>
int TambahSatu(int X)
{
X = X + 1;
return X;
}
main()
{
int bilangan;
cout<<"Masukkan sebuah bilangan : ";
cin>>bilangan;
cout<<"Nilai akhirnya adalah "<<TambahSatu(bilangan);
getch();
}
2015 Pemrograman Algoritma Struktur Data Modul 05 Pusat Bahan Ajar dan eLearning
5 Tim Dosen http://www.mercubuana.ac.id
Hasil Eksekusi :
Melewatkan Parameter
Ada 2 cara melewatkan Parameter yaitu:
1. Berdasarkan nilai (pass by value).
2. Berdasarkan referensi (pass by reference).
Contoh :
#include <vcl.h>
#pragma hdrstop
#include<iostream.h>
#include<conio.h>
void Kali2(int& X)
{
X = X * 2;
cout<<"Nilai didalam fungsi adalah: "<<X<<endl;
}
main()
{
int bilangan;
cout<<"Masukkan sebuah bilangan : ";
cin>>bilangan;
cout<<endl;
cout<<"Nilai awal : "<<bilangan<<endl; //memanggil nilai awal
Kali2(bilangan); //memangggil fungsi Kali2
cout<<"Nilai akhirnya adalah "<<bilangan<<endl;
getchar();
}
2015 Pemrograman Algoritma Struktur Data Modul 05 Pusat Bahan Ajar dan eLearning
6 Tim Dosen http://www.mercubuana.ac.id
Hasil Eksekusi :
#include <vcl.h>
#pragma hdrstop
#include<iostream.h>
#include<conio.h>
void Kali2(int& X)
{
X = X * 2;
cout<<"Nilai didalam fungsi adalah: "<<X<<endl;
}
main()
{
int bilangan;
cout<<"Masukkan sebuah bilangan : ";
cin>>bilangan;
cout<<endl;
cout<<"Nilai awal : "<<bilangan<<endl; //memanggil nilai awal
Kali2(bilangan); //memangggil fungsi Kali2
cout<<"Nilai akhirnya adalah "<<bilangan<<endl;
getch();
}
2015 Pemrograman Algoritma Struktur Data Modul 05 Pusat Bahan Ajar dan eLearning
7 Tim Dosen http://www.mercubuana.ac.id
#include <vcl.h>
#pragma hdrstop
#include<iostream.h>
#include<conio.h>
void Kali2(int& X);
main()
{
int bilangan;
cout<<"Masukkan sebuah bilangan : ";
cin>>bilangan;
cout<<endl;
cout<<"Nilai awal : "<<bilangan<<endl; //memanggil nilai awal
Kali2(bilangan); //memangggil fungsi Kali2
cout<<"Nilai akhirnya adalah "<<bilangan<<endl;
getch();
}
void Kali2(int& X)
{
X = X * 2;
cout<<"Nilai didalam fungsi adalah: "<<X<<endl;
}
Hasil eksekusi :
2015 Pemrograman Algoritma Struktur Data Modul 05 Pusat Bahan Ajar dan eLearning
8 Tim Dosen http://www.mercubuana.ac.id
Soal Latihan :
Program :
#include <vcl.h>
#pragma hdrstop
#include <iostream.h>
#include <conio.h>
int Tambah (int a, int b)
{
int r;
r = a + b;
return (r);
}
int main()
{
int z;
z = Tambah(5,3);
cout<<"Hasilnya = " <<z<<endl;
getch();
}
Program :
#include <vcl.h>
#pragma hdrstop
#include<iostream.h>
#include<conio.h>
float Tambah(float x, float y);
float Kurang(float x, float y);
float Kali(float x, float y);
float Bagi(float x, float y);
int main()
{
2015 Pemrograman Algoritma Struktur Data Modul 05 Pusat Bahan Ajar dan eLearning
9 Tim Dosen http://www.mercubuana.ac.id
int x,y;
cout<<"Masukan nilai pertama:"; cin>>x;
cout<<"Masukan nilai kedua:"; cin>>y;
cout<<"Hasil Penjumlahan:"<<Tambah(x,y)<<endl;
cout<<"Hasil Pengurangan:"<<Kurang(x,y)<<endl;
cout<<"Hasil Perkalian:"<<Kali(x,y)<<endl;
cout<<"Hasil Pembagian:"<<Bagi(x,y)<<endl;
getch();
}
float Tambah(float x, float y)
{
return (x+y);
}
float Kurang(float x, float y)
{
return (x-y);
}
float Kali(float x, float y)
{
return (x*y);
}
float Bagi(float x, float y)
{
return (x/y);
}
2015 Pemrograman Algoritma Struktur Data Modul 05 Pusat Bahan Ajar dan eLearning
10 Tim Dosen http://www.mercubuana.ac.id
3. Buatlah program menggunakan fungsi untuk menghitung luas persegi panjang dan luas
bujur sangkar!
Program :
#include <vcl.h>
#pragma hdrstop
#include<iostream.h>
#include<conio.h>
LuasBujurSangkar(int sisi)
{
int L;
L = sisi * sisi;
return L;
}
LuasPersegiPanjang(int panjang, int lebar)
{
int L;
L = panjang * lebar;
return L;
}
main()
{
int s,p,l, Luas;
cout<<"Menghitung Luas Bujur Sangkar"<<endl;
cout<<"Masukkan nilai sisi : "; cin>>s;
Luas=LuasBujurSangkar(s);
cout<<"Luas Bujur Sangkar adalah "<<Luas<<endl;
cout<<endl;
cout<<"Menghitung Luas Persegi Panjang"<<endl;
cout<<"Masukkan panjang : "; cin>>p;
cout<<"Masukkan lebar : "; cin>>l;
Luas=LuasPersegiPanjang(p,l);
cout<<"Luas Bujur Sangkar adalah "<<Luas<<endl;
getch();
}
2015 Pemrograman Algoritma Struktur Data Modul 05 Pusat Bahan Ajar dan eLearning
11 Tim Dosen http://www.mercubuana.ac.id
Hasil eksekusi
//Program tukar
#include <vcl.h>
#pragma hdrstop
#include<iostream.h>
#include<conio.h>
void tukar(int& X, int& Y);
main()
{
int a,b;
cout<<"Masukkan bilangan pertama: ";
cin>>a;
cout<<"Masukkan bilangan kedua: ";
cin>>b;
cout<<endl;
cout<<"Sebelum ditukar (): "<<endl;
cout<<"Nilai pertama = "<<a<<endl;
cout<<"Nilai kedua = "<<b<<endl;
cout<<endl;
tukar(a,b);
cout<<"Sesudah ditukar () adalah "<<endl;
cout<<"Nilai pertama = "<<a<<endl;
cout<<"Nilai kedua = "<<b<<endl;
cout<<endl;
2015 Pemrograman Algoritma Struktur Data Modul 05 Pusat Bahan Ajar dan eLearning
12 Tim Dosen http://www.mercubuana.ac.id
getch();
}
void tukar(int& X, int& Y)
{
int Z;
Z = X;
X = Y;
Y = Z;
}
Hasil eksekusi :
2015 Pemrograman Algoritma Struktur Data Modul 05 Pusat Bahan Ajar dan eLearning
13 Tim Dosen http://www.mercubuana.ac.id
Daftar Pustaka
Andri Kristanto, Algoritma & Pemrograman dengan C++ Edisi 2, Graha Ilmu, Yogyakarta,
2009.
Indra Yatini B, Flowchart, Algoritma, dan Pemrograman Menggunakan Bahasa C++ Builder,
Graha Ilmu, Yogyakarta, 2010.
2015 Pemrograman Algoritma Struktur Data Modul 05 Pusat Bahan Ajar dan eLearning
14 Tim Dosen http://www.mercubuana.ac.id
MODUL PERKULIAHAN
Pemrograman
Algoritma
Struktur Data
06
Ilmu Komputer Tehnik Informatika 87042 Tim Dosen
Abstract Kompetensi
Fungsi Rekursif Mampu menjelaskan konsep fungsi
rekursif
Mampu mengimplementasikan masalah
matematika yang solusinya bersifat
rekursif dengan program yang
mengandung fungsi rekursif
Fungsi Rekursif
Rekursif berarti suatu proses yang memanggil dirinya sendiri. Dalam rekursif
sebenarnya terkandung pengertian prosedur atau fungsi. Perbedaannya adalah bahwa
rekursif bisa memanggil ke dirinya sendiri, tetapi prosedur atau fungsi harus dipanggil lewat
pemanggil prosedur atau fungsi.
Rekursif merupakan teknik pemrograman yang penting, dan beberapa bahasa
pemrograman modern mendukung keberadaan proses rekursif ini. Pemanggilan prosedur
atau fungsi ke dirinya sendiri bisa berarti proses yang berulang yang tidak bisa diketahui
kapan akan berakhir. Dalam pemakaian sehari-hari, rekursi merupakan teknik pemrograman
yang berdaya guna untuk digunakan pada pekerjaan pemrograman dengan
mengekspresikannya ke dalam suku-suku dari program lain dengan menambahkan langkah-
langkah sejenis. Contoh paling sederhana dari proses rekursi adalah menghitung nilai
faktorial dari bilangan bulat. Nilai faktorial, secara rekursif dapat ditulis sebagai :
0! = 1
N! = N x (N-1)!, Untuk N > 0
FAKTORIAL (0) = 1 1)
FAKTORIAL (N) = N * FAKTORIAL (N-1) 2)
Persamaan 1) yang tidak bersifat rekursif, disebut nilai awal. Setiap fungsi rekursi paling
sedikit mempunyai 1 (satu) nilai awal; jika tidak, fungsi tersebut tidak bisa dihitung secara
eksplisit.
1. Faktorial :
#include <vcl.h>
#pragma hdrstop
#include <iostream>
#include <conio.h>
2015 Pemrograman Algoritma Struktur Data Modul 06 Pusat Bahan Ajar dan eLearning
2 Tim Dosen http://www.mercubuana.ac.id
using namespace std;
//mendefinisikan Fungsi Faktorial
int Faktorial(int X)
{
if (X==1)
return (1);
return X * Faktorial(X-1); //memanggil dirinya sendiri
}
// Fungsi Utama
int main()
{
int Bilangan,Hasil;
cout<<"Masukkan Bilangan Yang Akan Dihitung : ";
cin>>Bilangan;
//Memanggil Fungsi Faktorial
Hasil=Faktorial(Bilangan);
//Menampilkan Hasil
cout<<Bilangan<<" ! = "<<Hasil;
getch();
}
Hasil Eksekusi :
2015 Pemrograman Algoritma Struktur Data Modul 06 Pusat Bahan Ajar dan eLearning
3 Tim Dosen http://www.mercubuana.ac.id
2. Faktorial
#include <vcl.h>
#pragma hdrstop
#include <iostream.h>
#include <conio.h>
long factorial(long a)
{
if (a>1)
return (a*factorial(a-1));
else
return(1);
}
int main ()
{
long L;
cout<<"Masukkan nilai : ";
cin>>L;
cout<< "!" << L << " = " << factorial (L);
getch();
}
3. Program Pangkat :
//Pangkat
#include <vcl.h>
#pragma hdrstop
#include <iostream.h>
2015 Pemrograman Algoritma Struktur Data Modul 06 Pusat Bahan Ajar dan eLearning
4 Tim Dosen http://www.mercubuana.ac.id
#include <conio.h>
double Pangkat(double A, int N)
{
if (N==0)
return 1;
else
return A * Pangkat(A, N-1);
}
void main ()
{
int A,N;
cout<<"Masukkan nilai = "; cin>>A;
cout<<"Pangkat berapa = "; cin>>N;
cout<<"Hasil Pangkat = "<<Pangkat(A,N);
getch();
}
Hasil Eksekusi :
Latihan :
1. Buat program untuk menghitung deret S = 1+2+3+4+5+….+N menggunakan
Function Rekursi
2. Buat program untuk menghitung deret S = 2+4+6+8+10+….+2N menggunakan
Function Rekursi
3. Buat program untuk menghitung 10 deret Fibonacci dengan menggunakan Function
Rekursi:
1 1 2 3 5 8 13 21 34 55
2015 Pemrograman Algoritma Struktur Data Modul 06 Pusat Bahan Ajar dan eLearning
5 Tim Dosen http://www.mercubuana.ac.id
Jawab :
//Deret
#include <vcl.h>
#pragma hdrstop
#include <iostream.h>
#include <conio.h>
int S(int n)
{
if (n==1)
return (1);
else
return (n + S(n-1));
}
main ()
{
int n;
cout<<”Masukkan n = “; cin>>n;
cout<<”Deret S = 1 + 2 + 3 + 4 + 5 + …+ n \n”;
cout<<”Jumlah Deret S = “<<S(n);
getch();
}
Hasil Eksekusi :
2015 Pemrograman Algoritma Struktur Data Modul 06 Pusat Bahan Ajar dan eLearning
6 Tim Dosen http://www.mercubuana.ac.id
No. 2
//Deret
#include <vcl.h>
#pragma hdrstop
#include <iostream.h>
#include <conio.h>
int S(int n)
{
if (n==1)
return (2);
else
return (2*n + S(n-1));
}
main ()
{
int n;
cout<<"Masukkan n = "; cin>>n;
cout<<"Deret S = 2 + 4 + 6 + 8 + 10 + ...+ n \n";
cout<<"Jumlah Deret S = "<<S(n);
getch();
}
2015 Pemrograman Algoritma Struktur Data Modul 06 Pusat Bahan Ajar dan eLearning
7 Tim Dosen http://www.mercubuana.ac.id
Hasil Eksekusi :
2015 Pemrograman Algoritma Struktur Data Modul 06 Pusat Bahan Ajar dan eLearning
8 Tim Dosen http://www.mercubuana.ac.id
Daftar Pustaka
Andri Kristanto, Algoritma & Pemrograman dengan C++ Edisi 2, Graha Ilmu, Yogyakarta,
2009.
Indra Yatini B, Flowchart, Algoritma, dan Pemrograman Menggunakan Bahasa C++ Builder,
Graha Ilmu, Yogyakarta, 2010.
Moh. Sjukani, Algoritma & Struktur Data dengan C, C++ dan JAVA, Mitra Wacana Media,
Bandung, 2004.
2015 Pemrograman Algoritma Struktur Data Modul 06 Pusat Bahan Ajar dan eLearning
9 Tim Dosen http://www.mercubuana.ac.id
MODUL PERKULIAHAN
Pemrograman
Algoritma
Struktur Data
07
Ilmu Komputer Tehnik Informatika 87042 Tim Dosen
Abstract Kompetensi
Array satu dimensi dan Mampu membuat program untuk
Array dua dimensi menginisialisasi array satu dimensi
dan array dua dimensi.
Mampu membuat program untuk
mengisi elemen array satu dimensi
dan array dua dimensi menggunakan
struktur perulangan.
ARRAY
Array adalah himpunan elemen (variabel) dengan tipe data yang sama dan disimpan
secara berurutan dalam memori yang ditandai dengan memberikan indeks pada suatu nama
variabel.
Elemen-elemen Array
0 1 2 3 4
Nama Array
Bagian kosong di atas merepresentasikan elemen array, dalam kasus ini adalah
nilai integer. Angka 0 – 4 merupakan indeks dan selalu dimulai dari 0. Seperti
penggunaan variabel pada umumnya, array harus dideklarasikan terlebih dahulu,
dengan format sebagai berikut :
Inisialisasi Array
Ketika mendeklarasikan array lokal (didalam fungsi), jika tidak diberikan nilai maka isi
dari array tidak akan ditentukan (undetermined) sampai nilai diberikan. Jika
mendeklarasikan array global array (di luar semua fungsi) maka isi dari array akan
diinisialisasikan sebagai 0 :
2015 Pemrograman Algoritma Struktur Data Modul 07 Pusat Bahan Ajar dan eLearning
2 Tim Dosen http://www.mercubuana.ac.id
0 1 2 3 4
Suhu 0 0 0 0 0
Atau dideklarasikan dengan memberikan nilai array yang dituliskan dalam kurung
kurawal :
0 1 2 3 4
name [index]
Maka dari contoh sebelumnya nama yang digunakan untuk mengakses masing-masing
elemen :
Suhu
Misalkan akan disimpan nilai 75 pada elemen ke tiga, maka instruksinya : Suhu[2] = 28;
Dan jika nilai elemen ke tiga tadi akan diberikan ke variabel a, maka dapat dituliskan :
a = Suhu[2];
contoh 1:
//contoh Array
#include <vcl.h>
#pragma hdrstop
#include<iostream.h>
#include<conio.h>
void contoh()
{
float Suhu[5]= {27.5, 28, 29, 30.5, 27};
for (int i=0; i<5; i++)
2015 Pemrograman Algoritma Struktur Data Modul 07 Pusat Bahan Ajar dan eLearning
3 Tim Dosen http://www.mercubuana.ac.id
cout<<"Suhu [" <<i<< "] = "<<Suhu[i]<<endl;
}
void main()
{
contoh();
getchar();
}
Hasil Eksekusi :
Contoh 2:
Buat program nilai dan jumlahkan nilai tersebut, kemudian hitung jumlahnya dan nilai rata-
rata dari 5 buah bilangan yang dimasukkan
#include <vcl.h>
#pragma hdrstop
#include<iostream.h>
#include<conio.h>
void main()
{
int daf_nilai[5];
int i,jum;
float rata;
for (i=1; i<=5; i++)
{
cout<<"Masukkan nilai tes ke-" <<i<< " : ";
cin>>daf_nilai[i];
}
jum = 0 ;
for (i=1;i<=5;i++)
2015 Pemrograman Algoritma Struktur Data Modul 07 Pusat Bahan Ajar dan eLearning
4 Tim Dosen http://www.mercubuana.ac.id
jum = jum + daf_nilai[i];
rata = jum / 5;
cout<<"Jumlah : "<<jum<<endl;
cout<<"Rata-rata : "<<rata<<endl;
getch();
}
Hasil eksekusi :
2. Array Multidimensi
Array multidimensi dapat dianggap sebagai “array dari array”. Contoh array 2
dimensi dapat dibayangkan sebagai table berdimensi 2 yang tersusun dari elemen-
elemennya, semua bertipe sama.
Contoh :
suhu 0 1 2 3 4
Array suhu menyatakan array dua dimensi berukuran 3 x 5 elemen bertipe integer. Cara
mendeklarasikan dalam bahasa C ++ adalah ;
Sedangkan cara untuk menunjuk pada salah satu elemennya bisa dilakukan dengan
menyebutkan nama array diikuti dengan alamat sel menurut baris dan kolomnya,
misalnya :
2015 Pemrograman Algoritma Struktur Data Modul 07 Pusat Bahan Ajar dan eLearning
5 Tim Dosen http://www.mercubuana.ac.id
Array multidimensi tidak hanya terbatas pada array dimensi 2 saja tetapi dapat berupa
array dimensi 3 dan seterusnya.
Suatu saat kita mungkin perlu untuk menjadikan array sebagai parameter sebuah
fungsi. Dalam C/C++ tidak memungkinkan untuk mengirimkan nilai seluruh blok memori
sebagai parameter fungsi, tetapi kita dapat mengirimkan alamat awalnya.
Agar sebuah fungsi dapat menerima array sebagai parameter, cara yang dilakukan
adalah menentukan tipe dan nama array (tanpa menentukan banyak elemen) dalam
parameter fungsi saat fungsi dideklarasikan.
Contoh :
Void coba_array (int array1[])
Prosedur acak akan menerima sebuah parameter bertipe integer dengan nama
p_array, untuk mengirimkan sebuah array yang dideklarasikan sebagai :
Int array [40];
Cukup memanggil fungsi dengan statement :
Coba_array (array);
Contoh :
#include <vcl.h>
#pragma hdrstop
#include<iostream.h>
#include<conio.h>
void array (int data[], int panjang)
{
for (int n=0; n<panjang; n++)
cout<< data[n] << " ";
cout<<endl;
}
void main()
{
int array1[]={5,10,15};
int array2[]={2,4,6,8,10};
array(array1,3);
array(array2,5);
getchar();
}
2015 Pemrograman Algoritma Struktur Data Modul 07 Pusat Bahan Ajar dan eLearning
6 Tim Dosen http://www.mercubuana.ac.id
Hasil Eksekusi :
Seperti kita lihat pada program di atas, parameter pertama (int data[ ]) menerima
sebarang array yang tipenya int, berapapun panjangnya. Untuk itu perlu ditambahkan
parameter yang kedua untuk memberitahu panjang array yang dikirim. Nilai ini kemudian
dapat dipakai pada statement perulangan for untuk menampilkan elemen array sesuai
banyaknya. Dalam deklarasi fungsi juga diperbolehkan untuk memasukkan array
multidimensi. Format untuk menyertakan array berbeda dengan format parameter array
dimensi satu. Contoh deklarasi parameter array dimensi 3:
Perhatikan kurung siku pertama [ ] dibiarkan kosong sementara yang lainnya harus
ditentukan. Hal ini karena compiler dalam fungsi harus dapat menentukan berapa besar
array pada dimensi tambahan.
Untuk bisa mengetahui lebih jelas tentang sifat-sifat array sebagai parameter sebuah
fungsi kita perlu memahami lebih lanjut tentang operasi pointer.
Latihan :
Buat program C++ untuk menampilkan 5 nama Mahasiswa yang diinput melalui keyboard.
#include <vcl.h>
#pragma hdrstop
#include<iostream.h>
#include<conio.h>
void data_mahasiswa()
{
string nama [5];
int indeks;
for (indeks=1; indeks <=5; indeks++)
{
cout<<"Masukkan nama mahasiswa ke-"<<indeks<<" : ";
cin >> nama[indeks];
2015 Pemrograman Algoritma Struktur Data Modul 07 Pusat Bahan Ajar dan eLearning
7 Tim Dosen http://www.mercubuana.ac.id
}
clrscr();
cout <<" Daftar Nama Mahasiswa " << endl;
cout <<"--------------------- " << endl;
cout <<"No | Nama Mahasiswa " << endl;
cout <<"--------------------- " << endl;
for (indeks=1; indeks <=5; indeks++)
{
cout << indeks << '\t' << nama[indeks]<<endl;
}
}
void main()
{
clrscr();
data_mahasiswa();
getch();
}
2015 Pemrograman Algoritma Struktur Data Modul 07 Pusat Bahan Ajar dan eLearning
8 Tim Dosen http://www.mercubuana.ac.id
Soal :
Dari program latihan di atas kembangkan sehingga dapat menyimpan ‘Umur’ dan ‘Jenis
Kelamin’ dari mahasiswa. Untuk umur adalah yang berumur di atas 20 tahun saja.
Kemudian tambahkan program tersebut untuk menghitung rata-rata umur dari semua
mahasiswa yang dimasukkan.
Programnya :
#include <vcl.h>
#pragma hdrstop
#include<iostream.h>
#include<conio.h>
void data_mahasiswa()
{
string nama [5];
int umur [5];
char jenis[5];
int indeks;
int x;
float jumlah, rata;
for (indeks=1; indeks <=5; indeks++)
{
cout<<"Masukkan nama mahasiswa ke-"<<indeks<<" : ";
cin >> nama[indeks];
cout<<"Masukkan umur mahasiswa ke-"<<indeks<<" : ";
cin >> umur[indeks];
cout<<"Masukkan jenis mahasiswa ke-"<<indeks<<" : ";
cin >> jenis[indeks];
}
clrscr();
cout <<" Daftar Nama Mahasiswa " << endl;
cout <<"-------------------------- " << endl;
cout <<"No | Nama | Umur | Jenis " << endl;
cout <<"-------------------------- " << endl;
x=umur[0];
for (indeks=1; indeks <=5; indeks++)
if (umur[indeks] > x)
2015 Pemrograman Algoritma Struktur Data Modul 07 Pusat Bahan Ajar dan eLearning
9 Tim Dosen http://www.mercubuana.ac.id
x=umur[indeks];
for (indeks=1; indeks <=5; indeks++)
{
if (umur[indeks]>=17)
cout << indeks << '\t' << nama[indeks]<<'\t'<<umur[indeks]<<'\t'<<jenis[indeks]<<endl;
}
jumlah = 0;
for (indeks=1; indeks <=5; indeks++)
jumlah = jumlah + umur[indeks];
rata = jumlah/indeks;
cout<<endl;
cout<<"umur yang paling tua = "<<x<<endl;
cout<<endl;
cout<<"Jumlah Umur = "<<jumlah<<endl;
cout<<"Rata-rata = "<<rata<<endl;
}
void main()
{
clrscr();
data_mahasiswa();
getch();
}
2015 Pemrograman Algoritma Struktur Data Modul 07 Pusat Bahan Ajar dan eLearning
10 Tim Dosen http://www.mercubuana.ac.id
Hasil Eksekusinya adalah :
2015 Pemrograman Algoritma Struktur Data Modul 07 Pusat Bahan Ajar dan eLearning
11 Tim Dosen http://www.mercubuana.ac.id
Daftar Pustaka
Andri Kristanto, Algoritma & Pemrograman dengan C++ Edisi 2, Graha Ilmu, Yogyakarta,
2009.
Indra Yatini B, Flowchart, Algoritma, dan Pemrograman Menggunakan Bahasa C++ Builder,
Graha Ilmu, Yogyakarta, 2010.
Moh. Sjukani, Algoritma & Struktur Data dengan C, C++ dan JAVA, Mitra Wacana Media,
Bandung, 2004.
2015 Pemrograman Algoritma Struktur Data Modul 07 Pusat Bahan Ajar dan eLearning
12 Tim Dosen http://www.mercubuana.ac.id
MODUL PERKULIAHAN
Pemrograman
Algoritma
Struktur Data
09
Ilmu Komputer Informatika 87042 Tim Dosen
Abstract Kompetensi
Pointer Mampu menggunakan pointer untuk
Linked List mengalokasikan memori secara dinamis.
Mampu menjelaskan konsep linked‐list.
Mampu mengimplementasikan linked‐
list dalam sebuah program sampai
dengan menambah node‐node baru dan
list traversal.
POINTER dan LINKED LIST
I. POINTER
Pointer adalah tipe data yang digunakan untuk menunjuk ke suatu data. Suatu variabel
yang bertipe pointer (variabel pointer) tidak berisi data, melainkan berisi alamat suatu data.
Di dalam komputer setiap lokasi data mempunyai alamat yang khas. Gambar berikut contoh
suatu pointer yang menunjuk ke suatu data.
Pointer Variabel X
Berdasarkan kondisi di atas, dimungkinkan untuk mengakses data pada variabel X melalui
Pointer.
Pointer biasa digunakan sehubungan dengan pembentukan variabel dinamis. Variabel
Dinamis adalah variabel yang bisa dialokasikan di dalam memori atau dihapus dari memori
ketika program dieksekusi. Hal seperti ini banyak dipakai pada struktur data seperti linked
list dan pohon biner.
double *p;
2015 Pemrograman Algoritma Struktur Data Modul 08 Pusat Bahan Ajar dan eLearning
2 Tim Dosen http://www.mercubuana.ac.id
struct RekamanBuku
{
string judul;
string pengarang;
int jumlah;
}
struct RekamanBuku *novel;
Pada contoh ini, novel adalah variabel pointer yang menunjuk ke tipe struktur
RekamanBuku. Gambarannya seperti berikut :
novel judul
pengarang
jumlah
Supaya suatu variabel pointer menunjuk ke suatu variabel data, penugasan seperti
berikut diperlukan :
Variabel_pointer = &variabel_data
Untuk melihat cara pengaksesan data melalui pointer, cobalah kode novel.cpp berikut :
2015 Pemrograman Algoritma Struktur Data Modul 08 Pusat Bahan Ajar dan eLearning
3 Tim Dosen http://www.mercubuana.ac.id
using namespace std;
struct RekamanBuku
{
string judul;
string pengarang;
int jumlah;
};
int main()
{
struct RekamanBuku *novel, buku;
2015 Pemrograman Algoritma Struktur Data Modul 08 Pusat Bahan Ajar dan eLearning
4 Tim Dosen http://www.mercubuana.ac.id
1.3. MENGGUNAKAN VARIABEL DINAMIS
novel judul
?
pengarang
?
? jumlah
//program ptrdata.cpp
#include <vcl.h>
#pragma hdrstop
#include <iostream>
#include <conio.h>
#include <string>
using namespace std;
struct RekamanBuku
{
string judul;
string pengarang;
int jumlah;
};
int main()
{
2015 Pemrograman Algoritma Struktur Data Modul 08 Pusat Bahan Ajar dan eLearning
5 Tim Dosen http://www.mercubuana.ac.id
struct RekamanBuku *novel;
Bila suatu variabel dinamis tidak diperlukan lagi, memori yang digunakannya bisa
dihapus. Perintah yang diperlukan untuk keperluan tersebut berupa prosedur delete.
Perintahnya adalah :
Deletevariabel_pointer;
2015 Pemrograman Algoritma Struktur Data Modul 08 Pusat Bahan Ajar dan eLearning
6 Tim Dosen http://www.mercubuana.ac.id
Keadaan awal :
novel
novel
Contoh penggunaan delete terdapat pada program ptrdata.cpp, yaitu diletakkan setelah
variabel dinamis tidak diperlukan lagi.
Array juga dapat dipesan secara dinamis melalui new. Contoh kode program
dinamis.cpp
2015 Pemrograman Algoritma Struktur Data Modul 08 Pusat Bahan Ajar dan eLearning
7 Tim Dosen http://www.mercubuana.ac.id
int main()
{
struct RekamanBuku *novel;
// Buat variabel dinamis berupa array dan atur agar ditunjuk oleh novel
novel = new RekamanBuku[5];
novel[1].judul = "Octopussy";
novel[1].pengarang = "Ian Flemmings";
novel[1].jumlah = 2;
novel[3].judul = "Twilight";
novel[3].pengarang = "Stephenie Meyer";
novel[3].jumlah = 3;
2015 Pemrograman Algoritma Struktur Data Modul 08 Pusat Bahan Ajar dan eLearning
8 Tim Dosen http://www.mercubuana.ac.id
Hasil eksekusi program :
Hal yang terpenting dalam menggunakan array dinamis adalah penyebutan jumlah elemen
array dilakukan dengan menuliskan jumlah elemen dalam tanda [ ]. Pada program di atas :
menyatakan bahwa jumlah elemen array yang diciptakan dan ditunjuk oleh novel sebanyak
5 buah. Gambaran setelah pernyataan di atas dijalankan dapat dilihat pada gambar berikut :
novel
novel[0]
novel[1]
novel[2]
novel[3]
novel[4]
2015 Pemrograman Algoritma Struktur Data Modul 08 Pusat Bahan Ajar dan eLearning
9 Tim Dosen http://www.mercubuana.ac.id
II. KONSEP LINKED LIST
Linked List (Senarai Berantai) adalah jenis struktur data yang berisi kumpulan data
yang disusun secara linear dengan setiap data disimpan dalam sebuah simpul dan
antara satu simpul dengan simpul lain dihubungkan melalui pointer.
Struktur data ini mempunyai bentuk dasar dengan sifat data disisipkan ke dalam
senarai melalui salah satu ujungnya. Gambar 7. Menunjukkan keadaan dalam linked list
apabila secara berturut-turut nama Amir, Bakdi, Cintya dan Dhanu dimasukkan ke dalam
linked list.
pertama
2015 Pemrograman Algoritma Struktur Data Modul 08 Pusat Bahan Ajar dan eLearning
10 Tim Dosen http://www.mercubuana.ac.id
2. Operasi Dasar Dalam Linked List (Senarai Berantai)
Operasi dasar pada Linked List berupa :
INSERT( ), menyatakan operasi untuk memasukkan data ke dalam linked list
pada posisi yang ditunjuk oleh pointer pertama. Operasi ini biasa dinyatakan
dengan insert(S, d) atau biasa disingkat insert(d). S menyatakan linked list dan d
menyatakan item data yang dimasukkan ke dalam linked list S.
FIND( ), menyatakan operasi untuk mencari suatu data dalam linked list. Operasi
ini biasa dinyatakan dengan fungsi find(pendahulu, x). nilai baliknya berupa true
kalau data yang dicari (yaitu x) ada; atau false kalau data yang dicari tidak ada.
Pada saat nilai balik bernilai true, pendahulu menunjuk simpul yang berada tepat
sebelum simpul yang berisi data yang dicari.
REMOVE( ), menyatakan operasi untuk menghilangkan sebuah simpul dari
linked list. Operasi ini biasa dinyatakan dengan remove(S, x) atau remove(x)
saja.
2015 Pemrograman Algoritma Struktur Data Modul 08 Pusat Bahan Ajar dan eLearning
11 Tim Dosen http://www.mercubuana.ac.id
Daftar Pustaka
Abdul Kadir, Teori dan Aplikasi STRUKTUR DATA menggunakan C++, CV. ANDI OFFSET,
Yogyakarta, 2013.
Andri Kristanto, Algoritma & Pemrograman dengan C++ Edisi 2, Graha Ilmu, Yogyakarta,
2009.
Moh. Sjukani, Algoritma & Struktur Data dengan C, C++ dan JAVA, Mitra Wacana Media,
Bandung, 2004.
2015 Pemrograman Algoritma Struktur Data Modul 08 Pusat Bahan Ajar dan eLearning
12 Tim Dosen http://www.mercubuana.ac.id
MODUL PERKULIAHAN
Pemrograman
Algoritma
Struktur Data
10
Ilmu Komputer Informatika 87042 Tim Dosen
Abstract Kompetensi
List traversal secara rekursif Mampu membuat program yang secara
Penyisipan node di awal dan di tengah rekursif melakukan list traversal
linked‐list. Mampu membuat program yang
melakukan penyisipan node di awal dan
di tengah linked‐list.
LIST TRAVERSAL
Traversal atau kunjungan simpul list sesuai urutan untuk memproses setiap simpul
tepat satu kali. Algoritma traversal, menggunakan variabel penuding PTR untuk menuding
simpul yang sedang di proses saat ini. Karena itu LINK(PTR) akan menuding simpul berikut
dalam list.
Statement PTR := LINK(PTR) akan menggerakkan penuding ke simpul berikutnya.
PTR
Gambar 1.
2015 Pemrograman Algoritma Struktur Data Modul 09 Pusat Bahan Ajar dan eLearning
2 Tim Dosen http://www.mercubuana.ac.id
Melakukan Traversal Simpul list, sambil setiap kali memeriksa apakah informasi dalam
simpul yang tengah dikunjungi tersebut sama dengan ITEM.
Dalam algoritma ini diperlukan 2 buah pemeriksaan pada setiap putaran yaitu :
1. Memeriksa apakah telah sampai pada akhir dari list, yakni dengan memeriksa apakah
PTR = NULL.
2. Memeriksa apakah ITEM telah ditemukan lokasinya, yakni dengan memeriksa apakah
INFO(PTR) = ITEM
ALGORITMA
SEARCH(INFO, LINK, START, ITEM, LOC)
1. PTR := START.
2. Kerjakan langkah 3 dalam hal PTR <> NULL :
3. Jika INFO(PTR) = ITEM, maka :
LOC := PTR, exit.
Bila tidak
PTR := LINK(PTR).
4. LOC := NULL. (Pencarian gagal)
5. Exit.
ALGORITMA
SRCHSL(INFO, LINK, START, ITEM, LOC)
1. PTR := START.
2. Kerjakan langkah 3 dalam hal PTR <> NULL :
3. Jika INFO(PTR) < ITEM, maka :
PTR := LINK(PTR).
Bila tidak jika ITEM = INFO(PTR), maka :
2015 Pemrograman Algoritma Struktur Data Modul 09 Pusat Bahan Ajar dan eLearning
3 Tim Dosen http://www.mercubuana.ac.id
LOC := PTR, dan exit. (pencarian sukses)
Bila tidak :
LOC := NULL, and exit.
4. LOC := NULL.
5. Exit.
Contoh :
// Konstruktor
Simpul(string xkode, string xnama)
{
kode = xkode;
nama = xnama;
berikut = NULL;
}
void display()
{
cout << kode << " : "
<< nama << endl;
}
};
class SenaraiBerantai
{
private:
Simpul* pertama;
2015 Pemrograman Algoritma Struktur Data Modul 09 Pusat Bahan Ajar dan eLearning
4 Tim Dosen http://www.mercubuana.ac.id
public:
// Konstruktor
SenaraiBerantai()
{
pertama = NULL;
}
// Destruktor
~SenaraiBerantai()
{
// Mencari data Nilai balik berupa true kalau yang dicari ketemu
// Dalam hal ini, pendahulu merupakan simpul yang terletak di depan simpul yang dicari
bool find(Simpul* &pendahulu, Simpul* &posisiData, string x)
{
posisiData = pertama;
pendahulu = NULL;
bool ditemukan = false;
while (posisiData != NULL)
{
2015 Pemrograman Algoritma Struktur Data Modul 09 Pusat Bahan Ajar dan eLearning
5 Tim Dosen http://www.mercubuana.ac.id
string kode = posisiData->kode;
if (kode.compare(x) == 0)
{
ditemukan = true;
break; // Keluar dari while
}
pendahulu = posisiData;
posisiData = posisiData->berikut;
}
return ditemukan;
}
// Mencari data Nilai balik berupa NULL kalau yang dicari tidak ketemu
Simpul* find(string x)
{
Simpul* pendahulu;
Simpul* posisiData;
bool ditemukan = find(pendahulu, posisiData, x);
if (! ditemukan)
return NULL;
else
return posisiData;
}
2015 Pemrograman Algoritma Struktur Data Modul 09 Pusat Bahan Ajar dan eLearning
6 Tim Dosen http://www.mercubuana.ac.id
return false;
}
if (pendahulu == NULL)
{
// Menampilkan data
void display(void)
{
cout << "Isi senarai berantai:" << endl;
Simpul* penunjuk = pertama;
while (penunjuk != NULL)
{
penunjuk->display();
penunjuk = penunjuk->berikut;
}
}
};
int main()
{
SenaraiBerantai senarai;
2015 Pemrograman Algoritma Struktur Data Modul 09 Pusat Bahan Ajar dan eLearning
7 Tim Dosen http://www.mercubuana.ac.id
senarai.insert("AGN", "Agnes Monica");
cout << "Keadaan awal:" << endl;
senarai.display();
senarai.remove("RIN");
cout << endl;
cout << "Setelah RIN dihapus:" << endl;
senarai.display();
// Cari RIN
string dicari = "RIN";
cout << endl;
cout << "Pencarian " << dicari << endl;
Simpul* posisiData = senarai.find(dicari);
if (posisiData == NULL)
cout << dicari << " tidak ditemukan." << endl;
else
{
cout << "Hasil pencarian:" << endl;
posisiData->display();
}
// Cari FAR
dicari = "FAR";
cout << endl;
cout << "Pencarian " << dicari << endl;
posisiData = senarai.find(dicari);
if (posisiData == NULL)
cout << dicari << " tidak ditemukan." << endl;
else
{
cout << "Hasil pencarian:" << endl;
posisiData->display();
}
getch();
}
2015 Pemrograman Algoritma Struktur Data Modul 09 Pusat Bahan Ajar dan eLearning
8 Tim Dosen http://www.mercubuana.ac.id
2015 Pemrograman Algoritma Struktur Data Modul 09 Pusat Bahan Ajar dan eLearning
9 Tim Dosen http://www.mercubuana.ac.id
Daftar Pustaka
Andri Kristanto, Algoritma & Pemrograman dengan C++ Edisi 2, Graha Ilmu, Yogyakarta,
2009.
Moh. Sjukani, Algoritma & Struktur Data dengan C, C++ dan JAVA, Mitra Wacana Media,
Bandung, 2004.
2015 Pemrograman Algoritma Struktur Data Modul 09 Pusat Bahan Ajar dan eLearning
10 Tim Dosen http://www.mercubuana.ac.id
MODUL PERKULIAHAN
Pemrograman
Algoritma
Struktur Data
11
Ilmu Komputer Informatika 87042 Tim Dosen
Abstract Kompetensi
ADT Stack Mampu menjelaskan yang dimaksud
Implementasi stack dengan array dengan ADT stack
Implementasi stack dengan linked‐list Mampu membuat program yang
mengimplementasikan stack dengan
array
ADT STACK
kosong
A Berisi 3
B Diambil 1
A dari puncak
Tumpukan memiliki sifat Last In First Out (LIFO). Artinya, data yang terakhir kali
dimasukkan/disisipkan akan menjadi data yang pertama kali keluar. Pada contoh di atas,
yang berisi tumpukan A, B, dan C jelas terlihat bahwa C adalah data yang terakhir kali
ditumpukkan. Jika terjadi operasi pengambilan data maka C adalah data yang akan keluar
terlebih dulu.
2015 Pemrograman Algoritma Struktur Data Modul 09 Pusat Bahan Ajar dan eLearning
2 Tim Dosen http://www.mercubuana.ac.id
II. OPERASI DASAR PADA TUMPUKAN
- PUSH adalah operasi untuk memasukkan data ke dalam tumpukan. Operasi ini
biasa dinyatakan dengan push(T,d). T menyatakan tumpukan dan d menyatakan item
data yang disisipkan ke dalam tumpukan T.
- POP adalah operasi untuk mengambil data dari tumpukan. Operasi ini biasa
dinyatakan dengan pop(T). Dalam hal ini data teratas dari tumpukan T akan
dikeluarkan dan menjadi nilai balik pop. Itulah sebabnya, penggunaan pop sering
dituangkan dalam bentuk pernyataan :
2015 Pemrograman Algoritma Struktur Data Modul 09 Pusat Bahan Ajar dan eLearning
3 Tim Dosen http://www.mercubuana.ac.id
III. APLIKASI TUMPUKAN
Aplikasi Tumpukan (Stack) sangat banyak, beberapa penerapan Tumpukan diantaranya
adalah :
Membalik String.
Jika kita memproses suatu string dimulai dari yang paling kiri dan menaruh ke
tumpukan karakter per karakter maka karakter paling kiri akan berada pada posisi
paling bawah dalam tumpukan. Kalau kemudian, karakter dalam tumpukan diambil
satu persatu dan disusun dari kiri ke kanan maka string akan terbentuk dengan
susunan terbalik terhadap aslinya, seperti diperlihatkan pada gambar di bawah ini.
di proses ketumpokan N
2015 Pemrograman Algoritma Struktur Data Modul 09 Pusat Bahan Ajar dan eLearning
4 Tim Dosen http://www.mercubuana.ac.id
9. Tampilkan digit
10. End-While
Tumpukan dapat dibuat dengan berbagai cara. Salah satu cara yaitu, menggunakan
Vector. Dalam hal ini, jumlah data
#include <vcl.h>
#pragma hdrstop
#include <iostream>
#include <string>
#include <vector>
using namespace std;
class Tumpukan
{
private:
vector<string> tumpukan;
int puncak;
public:
// Konstruktor
Tumpukan(int ukuran) : puncak(-1)
{
tumpukan.resize(ukuran); // Ukuran vector
2015 Pemrograman Algoritma Struktur Data Modul 09 Pusat Bahan Ajar dan eLearning
5 Tim Dosen http://www.mercubuana.ac.id
}
2015 Pemrograman Algoritma Struktur Data Modul 09 Pusat Bahan Ajar dan eLearning
6 Tim Dosen http://www.mercubuana.ac.id
stack.push("Agnes Monica");
// Kosongkan isi tumpukan dan tampilkan
while (! stack.empty())
{
string nama = stack.pop();
cout << nama << endl;
}
getchar();
}
2015 Pemrograman Algoritma Struktur Data Modul 09 Pusat Bahan Ajar dan eLearning
7 Tim Dosen http://www.mercubuana.ac.id
Daftar Pustaka
Andri Kristanto, Algoritma & Pemrograman dengan C++ Edisi 2, Graha Ilmu, Yogyakarta,
2009.
Indra Yatini B, Flowchart, Algoritma, dan Pemrograman Menggunakan Bahasa C++ Builder,
Graha Ilmu, Yogyakarta, 2010.
Moh. Sjukani, Algoritma & Struktur Data dengan C, C++ dan JAVA, Mitra Wacana Media,
Bandung, 2004.
2015 Pemrograman Algoritma Struktur Data Modul 09 Pusat Bahan Ajar dan eLearning
8 Tim Dosen http://www.mercubuana.ac.id
MODUL PERKULIAHAN
Pemrograman
Algoritma
Struktur Data
12
Ilmu Komputer Teknik Informatika 87042 Tim Dosen
Abstract Kompetensi
Mampu membuat program yang
Implementasi Stack dengan linked‐list
mengimplementasikan stack dengan
linked‐list
IMPLEMENTASI STACK DENGAN
LINKED LIST
// Konstruktor
SimpulTumpukan(char data);
};
class ListTumpukan
{
private:
SimpulTumpukan* puncak;
public:
ListTumpukan();
virtual ~ListTumpukan();
void push(char data);
bool empty();
char pop();
};
2015 Pemrograman Algoritma Struktur Data Modul 11 Pusat Bahan Ajar dan eLearning
2 Tim Dosen http://www.mercubuana.ac.id
// Konstruktor
SimpulTumpukan::SimpulTumpukan(char data)
{
SimpulTumpukan::data = data;
SimpulTumpukan::berikut = NULL;
}
ListTumpukan::ListTumpukan()
{
ListTumpukan::puncak = NULL;
}
// Destruktor
ListTumpukan::~ListTumpukan()
{
// Menghapus semua simpul
SimpulTumpukan* penunjukHapus;
while (puncak != NULL)
{
penunjukHapus = puncak;
puncak = puncak->berikut;
delete penunjukHapus;
}
}
2015 Pemrograman Algoritma Struktur Data Modul 11 Pusat Bahan Ajar dan eLearning
3 Tim Dosen http://www.mercubuana.ac.id
// empty() (Bersifat publik)
// Menghasilkan true kalau tumpukan dalam keadaan kosong
bool ListTumpukan::empty()
{
return puncak == NULL;
}
SimpulTumpukan* ptrData;
char data;
ptrData = puncak;
data = puncak->data;
puncak = puncak->berikut;
delete ptrData;
return data;
}
int main()
{
ListTumpukan tumpukan;
tumpukan.push('A');
tumpukan.push('B');
tumpukan.push('C');
tumpukan.push('D');
2015 Pemrograman Algoritma Struktur Data Modul 11 Pusat Bahan Ajar dan eLearning
4 Tim Dosen http://www.mercubuana.ac.id
// Ambil isi tumpukan
cout << "Isi tumpukan dari atas ke bawah:" << endl;
char karakter;
while (! tumpukan.empty())
{
karakter = tumpukan.pop();
cout << karakter << endl;
}
getch();
}
Hasil eksekusi :
Double Linked List adalah jenis linked list yang memiliki 2 buah pointer. Pointer pertama
dipakai untuk menunjuk ke simpul berikutnya dan pointer kedua digunakan untuk
menunjuk ke simpul pendahulunya.
2015 Pemrograman Algoritma Struktur Data Modul 11 Pusat Bahan Ajar dan eLearning
5 Tim Dosen http://www.mercubuana.ac.id
char data;
SimpulGanda* berikut;
SimpulGanda* sebelum;
// Konstruktor
SimpulGanda(char data);
};
class ListGanda
{
private:
SimpulGanda* pertama;
SimpulGanda* terakhir;
public:
ListGanda();
virtual ~ListGanda();
void insertFirst(char data);
void insertLast(char data);
bool insertAfter(char kunci, char data);
bool empty();
char removeFirst();
char removeLast();
bool removeKey(char data);
void displayForward();
void displayBackward();
};
// Konstruktor
SimpulGanda::SimpulGanda(char data)
{
// Konstruktor
SimpulGanda::data = data;
SimpulGanda::berikut = NULL;
SimpulGanda::sebelum = NULL;
}
// Konstruktor
ListGanda::ListGanda()
{
// Konstruktor
2015 Pemrograman Algoritma Struktur Data Modul 11 Pusat Bahan Ajar dan eLearning
6 Tim Dosen http://www.mercubuana.ac.id
ListGanda::pertama = NULL;
ListGanda::terakhir = NULL;
}
// Destruktor
ListGanda::~ListGanda()
{
// Destruktor
// Menghapus semua simpul
SimpulGanda* penunjukHapus;
while (pertama != NULL)
{
penunjukHapus = pertama;
pertama = pertama->berikut;
delete penunjukHapus;
}
}
// insertFirst() (Bersifat publik)
// Menyisipkan data ke dalam senarai
// sehingga akan ditunjuk oleh pertama
void ListGanda::insertFirst(char data)
{
// Buat simpul baru dan isikan Karakter ke dalam simpul
SimpulGanda* ptrBaru = new SimpulGanda(data);
// Atur penunjuk ke simpul
if (empty())
terakhir = ptrBaru;
else
pertama->sebelum = ptrBaru;
ptrBaru->berikut = pertama;
ptrBaru->sebelum = NULL;
pertama = ptrBaru;
}
// insertLast() (Bersifat publik)
// Menyisipkan data ke akhir senarai
void ListGanda::insertLast(char data)
{
2015 Pemrograman Algoritma Struktur Data Modul 11 Pusat Bahan Ajar dan eLearning
7 Tim Dosen http://www.mercubuana.ac.id
// Buat simpul baru dan isikan karakter ke dalam simpul
SimpulGanda* ptrBaru = new SimpulGanda(data);
// Atur penunjuk ke simpul
if (empty())
pertama = ptrBaru;
else
{
terakhir->berikut = ptrBaru;
ptrBaru->sebelum = terakhir;
}
ptrBaru->berikut = NULL;
terakhir = ptrBaru;
}
// insertAfter() (Bersifat publik)
// Menyisipkan data ke sesudah kunci kunci
bool ListGanda::insertAfter(char kunci, char data)
{
char ditemukan = false;
// Cari posisi Key
SimpulGanda* ptrData = pertama;
while (ptrData != NULL)
{
if (ptrData->data == kunci)
{
ditemukan = true;
break;
}
ptrData = ptrData->berikut;
}
// Cek kalau tidak ditemukan
if (! ditemukan)
{
return false;
}
// Buat simpul baru dan isikan data ke dalam simpul
SimpulGanda* ptrBaru = new SimpulGanda(data);
2015 Pemrograman Algoritma Struktur Data Modul 11 Pusat Bahan Ajar dan eLearning
8 Tim Dosen http://www.mercubuana.ac.id
// Atur penunjuk ke simpul
if (ptrData == terakhir)
{
ptrBaru->berikut = NULL;
terakhir = ptrBaru;
}
else
{
ptrBaru->berikut = ptrData->berikut;
ptrData->berikut->sebelum = ptrBaru;
}
ptrBaru->sebelum = ptrData;
ptrData->berikut = ptrBaru;
return true;
}
// empty() (Bersifat publik)
// Menghasilkan true kalau senarai kosong atau false kalau tidak kosong
bool ListGanda::empty()
{
return pertama == NULL;
}
// removeFirst() (Bersifat publik)
// Menghapus data pada simpul yang ditunjuk oleh pertama
char ListGanda::removeFirst()
{
if (empty())
{
cout << "Tumpukan sudah kosong" << endl;
return 0;
}
char data = pertama->data;
SimpulGanda* ptrData = pertama;
if (pertama->berikut == NULL)
terakhir = NULL;
else
pertama->berikut->sebelum = NULL;
2015 Pemrograman Algoritma Struktur Data Modul 11 Pusat Bahan Ajar dan eLearning
9 Tim Dosen http://www.mercubuana.ac.id
pertama = pertama->berikut;
delete ptrData;
return data;
}
// removeLast() (Bersifat publik)
// Menghapus data pada simpul yang ditunjuk oleh terakhir
char ListGanda::removeLast()
{
if (empty())
{
cout << "Tumpukan sudah kosong" << endl;
return 0;
}
char data = terakhir->data;
SimpulGanda* ptrData = terakhir;
if (pertama->berikut == NULL)
pertama = NULL;
else
terakhir->sebelum->berikut = NULL;
terakhir = terakhir->sebelum;
delete ptrData;
return data;
}
// removeKey() (Bersifat publik)
// Menghapus simpul yang sesuai dengan kunci
// Hasil true kalau data dihapus false kalau tak ada yang dihapus
bool ListGanda::removeKey(char data)
{
SimpulGanda* ptrData = pertama;
while (ptrData->data != data)
{
ptrData = ptrData->berikut;
if (ptrData == NULL)
{
return false;
2015 Pemrograman Algoritma Struktur Data Modul 11 Pusat Bahan Ajar dan eLearning
10 Tim Dosen http://www.mercubuana.ac.id
}
}
if (ptrData == pertama)
pertama = ptrData->berikut;
else
ptrData->sebelum->berikut = ptrData->berikut;
if (ptrData == terakhir)
terakhir = ptrData->sebelum;
else
ptrData->berikut->sebelum = ptrData->sebelum;
delete ptrData;
return true;
}
// displayForward() (Bersifat publik)
// Menampilkan isi senarai dari pertama ke terakhir
void ListGanda::displayForward()
{
cout << "Dari pertama ke terakhir: " << endl;
SimpulGanda* ptrData = pertama;
while (ptrData != NULL)
{
cout << ptrData->data;
ptrData = ptrData->berikut;
}
cout << endl; // Pindah baris
}
// displayBackward() (Bersifat publik)
// Menampilkan isi senarai dari terakhir ke pertama
void ListGanda::displayBackward()
{
cout << "Dari terakhir ke pertama: " << endl;
SimpulGanda* ptrData = terakhir;
while (ptrData != NULL)
{
cout << ptrData->data;
ptrData = ptrData->sebelum;
2015 Pemrograman Algoritma Struktur Data Modul 11 Pusat Bahan Ajar dan eLearning
11 Tim Dosen http://www.mercubuana.ac.id
}
cout << endl; // Pindah baris
}
int main()
{
ListGanda senarai;
senarai.insertFirst('A');
senarai.insertFirst('B');
senarai.insertFirst('C');
senarai.insertFirst('D');
senarai.insertFirst('E');
senarai.displayForward();
cout << "Penyisipan X dan Y: " << endl;
senarai.insertLast('X');
senarai.insertLast('Y');
senarai.displayBackward();
senarai.displayForward();
senarai.removeKey('C');
cout << "Setelah C diambil:" << endl;
senarai.displayForward();
karakter = senarai.removeLast();
cout << "Karakter terkanan yang diambil: " << endl;
senarai.displayForward();
getch();
}
2015 Pemrograman Algoritma Struktur Data Modul 11 Pusat Bahan Ajar dan eLearning
12 Tim Dosen http://www.mercubuana.ac.id
Hasil eksekusi :
2015 Pemrograman Algoritma Struktur Data Modul 11 Pusat Bahan Ajar dan eLearning
13 Tim Dosen http://www.mercubuana.ac.id
Daftar Pustaka
Abdul Kadir, Teori dan Aplikasi Struktur Data Menggunakan C++, Penerbit Andi,
Yogyakarta, 2013
Andri Kristanto, Algoritma & Pemrograman dengan C++ Edisi 2, Graha Ilmu, Yogyakarta,
2009.
Moh. Sjukani, Algoritma & Struktur Data dengan C, C++ dan JAVA, Mitra Wacana Media,
Bandung, 2004.
2015 Pemrograman Algoritma Struktur Data Modul 11 Pusat Bahan Ajar dan eLearning
14 Tim Dosen http://www.mercubuana.ac.id
MODUL PERKULIAHAN
Pemrograman
Algoritma
Struktur Data
13
Ilmu Komputer Informatika 87042 Tim Dosen
Abstract Kompetensi
Mampu menjelaskan yang dimaksud
ADT Queue dengan ADT queue
Implementasi queue dengan array linear Mampu membuat program yang
dan sirkular mengimplementasikan queue dengan
Implementasi queue dengan linked‐list array linear dan sirkular.
Mampu membuat program yang
mengimplementasikan Queue dengan
linked‐list
ADT (Abstrack Data Type) QUEUE
I. ADT QUEUE
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 :
2015 Pemrograman Algoritma Struktur Data Modul 12 Pusat Bahan Ajar dan eLearning
2 Tim Dosen http://www.mercubuana.ac.id
dari suatu queue yang kosong.
3. Full, merupakan prosedur untuk mengetahui apakah Queue penuh atau tidak.
Prosedur ini hanya berlaku untuk queue yang jumlahnya terbatas.
Karena antrian merupakan suatu kumpulan data, maka tipe data yang sesuai untuk
menyajikan antrian adalah menggunakan array atau list (senarai berantai).
keluar masuk
A B C D E F
belakang
gambar 1. Contoh antrian dengan 6 elemen
keluar masuk
A B C D E F G H
belakang
gambar 2. Contoh penambahan antrian dengan 2 elemen
2015 Pemrograman Algoritma Struktur Data Modul 12 Pusat Bahan Ajar dan eLearning
3 Tim Dosen http://www.mercubuana.ac.id
Gambar 3 menunjukkan antrian dengan penghapusan elemen A dan B, sehingga gambar 1
menjadi :
depan
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
terdapat dalam struktur. Variabel first menunjukkan posisi elemen pertama dalam array,
dan variabel last menunjukkan posisi elemen terakhir dalam array.
2015 Pemrograman Algoritma Struktur Data Modul 12 Pusat Bahan Ajar dan eLearning
4 Tim Dosen http://www.mercubuana.ac.id
void initialize_queue ( Tqueue *Pqueue)
{
Pqueue -> firs = 0;
Pqueue -> last = -1;
Pqueue -> number_of_items = 0;
}
2015 Pemrograman Algoritma Struktur Data Modul 12 Pusat Bahan Ajar dan eLearning
5 Tim Dosen http://www.mercubuana.ac.id
Contoh program antrian :
// Contoh antrian
#include <vcl.h>
#pragma hdrstop
#include <iostream>
#include <string>
#include <conio.h>
#include <vector>
using namespace std;
class Antrian
{
private:
vector<string> data;
int depan, belakang;
int maksElemen;
public:
// Konstruktor
Antrian(int ukuran)
{
depan = 0;
belakang = 0;
maksElemen = ukuran;
data.resize(ukuran); // Ukuran vector
}
// Memasukkan data ke antrian
// Nilai balik tidak ada
void insert(string x)
{
int posisiBelakang;
// Geser belakang ke posisi berikutnya
if (belakang == maksElemen)
posisiBelakang = 1;
else
posisiBelakang = belakang + 1;
// Cek belakang apa sama dengan Depan
if (posisiBelakang == depan)
2015 Pemrograman Algoritma Struktur Data Modul 12 Pusat Bahan Ajar dan eLearning
6 Tim Dosen http://www.mercubuana.ac.id
cout << "Antrian penuh" << endl;
else
{
belakang = posisiBelakang;
// Masukkan data
data[belakang] = x;
}
}
string remove(void)
{
if (empty())
{
cout << "Antrian kosong" << endl;
return "";
}
if (depan == maksElemen)
depan = 1;
else
depan = depan + 1;
return data[depan];
}
bool empty(void)
{
if (depan == belakang)
return true;
else
return false;
}
};
int main()
{
int ukuran = 10;
Antrian daftar(ukuran); // Buat objek
// Masukkan 5 buah nama
daftar.insert("Aminudin");
daftar.insert("Zaskia");
2015 Pemrograman Algoritma Struktur Data Modul 12 Pusat Bahan Ajar dan eLearning
7 Tim Dosen http://www.mercubuana.ac.id
daftar.insert("Rina Melati");
daftar.insert("Farhan");
daftar.insert("Agnes Monica");
// Kosongkan isi antrian dan tampilkan
while (! daftar.empty())
{
string nama = daftar.remove();
cout << nama << endl;
}
getch();
}
Hasil eksekusi :
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 :
2015 Pemrograman Algoritma Struktur Data Modul 12 Pusat Bahan Ajar dan eLearning
8 Tim Dosen http://www.mercubuana.ac.id
struct queueNode
{
char data;
struct queueNode *nextPtr;
};
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.
2015 Pemrograman Algoritma Struktur Data Modul 12 Pusat Bahan Ajar dan eLearning
9 Tim Dosen http://www.mercubuana.ac.id
Daftar Pustaka
Andri Kristanto, Algoritma & Pemrograman dengan C++ Edisi 2, Graha Ilmu, Yogyakarta,
2009.
Indra Yatini B, Flowchart, Algoritma, dan Pemrograman Menggunakan Bahasa C++ Builder,
Graha Ilmu, Yogyakarta, 2010.
Moh. Sjukani, Algoritma & Struktur Data dengan C, C++ dan JAVA, Mitra Wacana Media,
Bandung, 2004.
2015 Pemrograman Algoritma Struktur Data Modul 12 Pusat Bahan Ajar dan eLearning
10 Tim Dosen http://www.mercubuana.ac.id
MODUL PERKULIAHAN
Pemrograman
Algoritma
Struktur Data
14
Ilmu Komputer Teknik Informatika 87042 Tim Dosen
Abstract Kompetensi
Mampu menjelaskan yang dimaksud
ADT Binary Tree dengan ADT Binary Tree
Mampu mengimplementasikan binary
tree menggunakan linked‐list
Mampu mengimplementasikan operasi
dan manipulasi terhadap binary tree
ADT Binary Tree
B C D 1
E F G H I J 2
K L M 3
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)
2015 Pemrograman Algoritma Struktur Data Modul 13 Pusat Bahan Ajar dan eLearning
2 Tim Dosen http://www.mercubuana.ac.id
Contoh anak D adalah H, I, J
Orangtua D adalah A
Anak dari orang tua yang sama (saudara sekandung) disebut sibling misal H,I,J.
DERAJAT (DEGREE) SUATU POHON
Adalah derajat maksimum dari suatu simpul dalam pohon.
Contoh derajat pohon dalam gambar diatas adalah 3.
Nenek Moyang dari dari suatu simpul adalah seluruh simpul-simpul yang ada sepanjang
lintasan dari akar sampai simpul tersebut.
Contoh nenek moyang dari M adalah A, D dan H.
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)
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 :
1. n ( Jumlah Simpul atau Node )
2. k ( Derajat Pohon)
2015 Pemrograman Algoritma Struktur Data Modul 13 Pusat Bahan Ajar dan eLearning
3 Tim Dosen http://www.mercubuana.ac.id
JUMLAH NON ZERO LINK = n - 1
DATA
Child-k
Child –1 ……
Pohon 3 - ary :
B
C D
E F G H I J
2015 Pemrograman Algoritma Struktur Data Modul 13 Pusat Bahan Ajar dan eLearning
4 Tim Dosen http://www.mercubuana.ac.id
A
C
Pohon biner dengan subtree kiri kosong
D
E
B C
D
E F G
Adalah pohon biner yang mempunyai simpul dengan nomor urut 1 sampai dengan n.
2015 Pemrograman Algoritma Struktur Data Modul 13 Pusat Bahan Ajar dan eLearning
5 Tim Dosen http://www.mercubuana.ac.id
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
5. No berapa anak kanan dari simpul ke 180 ?…..ada dilevel berapa anak tersebut.
6. No. berapa orang tua dari simpul ke 83 ? … ada dilevel berapa orangtua tsb
2015 Pemrograman Algoritma Struktur Data Modul 13 Pusat Bahan Ajar dan eLearning
6 Tim Dosen http://www.mercubuana.ac.id
Kedalaman minimal dari pohon biner adalah :
Contoh bila n = 15
Maka kedalamannya minimal = 2 Log 15 + 1
= Log 15 + 1
Log 2
= 1.17 / 0.3 + 1 = 3 + 1
= 4
SKEWED TREE
Binary Tree yang semua nodenya (kecuali leaf/daun) hanya memiliki satu child.
Adalah Pohon biner yang miring kekiri atau kekanan, atau dengan kata lain pohon biner
dengan subtree kiri kosong atau subtree kanan kosong.
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.
2015 Pemrograman Algoritma Struktur Data Modul 13 Pusat Bahan Ajar dan eLearning
7 Tim Dosen http://www.mercubuana.ac.id
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
2015 Pemrograman Algoritma Struktur Data Modul 13 Pusat Bahan Ajar dan eLearning
8 Tim Dosen http://www.mercubuana.ac.id
Daftar Pustaka
Andri Kristanto, Algoritma & Pemrograman dengan C++ Edisi 2, Graha Ilmu, Yogyakarta,
2009.
Indra Yatini B, Flowchart, Algoritma, dan Pemrograman Menggunakan Bahasa C++ Builder,
Graha Ilmu, Yogyakarta, 2010.
Moh. Sjukani, Algoritma & Struktur Data dengan C, C++ dan JAVA, Mitra Wacana Media,
Bandung, 2004.
2015 Pemrograman Algoritma Struktur Data Modul 13 Pusat Bahan Ajar dan eLearning
9 Tim Dosen http://www.mercubuana.ac.id
MODUL PERKULIAHAN
Pemrograman
Algoritma
Struktur Data
14
Ilmu Komputer Teknik Informatika 87042 Tim Dosen
Abstract Kompetensi
Mampu mengimplementasikan traversal
ADT Binary Tree pre‐order, in‐order dan post‐order.
Mampu mengimplementasikan program
yang melakukan pencarian pada binary tree
ADT Binary Tree
I. PENELUSURAN POHON BINER ( Binary Tree Traversal )
1. Inorder Traversal
A + B
Contoh
Tulislah hasil penelusuran pohon biner berikut ini bila ditelusuri secara INORDER.
+ 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
2015 Pemrograman Algoritma Struktur Data Modul 14 Pusat Bahan Ajar dan eLearning
2 Tim Dosen http://www.mercubuana.ac.id
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
+ C
A B
Langkah-langkahnya :
1. Telusuri Subtree(sub pohon) Kiri
2. Telusuri Subtree(Sub pohon) Kanan
3. Proses Simpul akar
maka akan diperoleh persamaan POSTORDERnya adalah: A B + C *
2015 Pemrograman Algoritma Struktur Data Modul 14 Pusat Bahan Ajar dan eLearning
3 Tim Dosen http://www.mercubuana.ac.id
SOAL latihan
1. Buat Persamaan INORDER, PREORDER, DAN POST ORDER dari Tree Berikut :
* /
A - *
+
7 E F G
C D
A B / C * D E ** F / + 2 –
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.
2015 Pemrograman Algoritma Struktur Data Modul 14 Pusat Bahan Ajar dan eLearning
4 Tim Dosen http://www.mercubuana.ac.id
~ 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.
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
2015 Pemrograman Algoritma Struktur Data Modul 14 Pusat Bahan Ajar dan eLearning
5 Tim Dosen http://www.mercubuana.ac.id
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
15
9
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
2015 Pemrograman Algoritma Struktur Data Modul 14 Pusat Bahan Ajar dan eLearning
6 Tim 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.
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.
2015 Pemrograman Algoritma Struktur Data Modul 14 Pusat Bahan Ajar dan eLearning
7 Tim Dosen http://www.mercubuana.ac.id
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
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.
2015 Pemrograman Algoritma Struktur Data Modul 14 Pusat Bahan Ajar dan eLearning
8 Tim Dosen http://www.mercubuana.ac.id
13
Contoh program :
#include <vcl.h>
#pragma hdrstop
#include <iostream>
#include <string>
#include <conio.h>
using namespace std;
class SimpulPohon
{
public:
char data;
SimpulPohon* induk;
SimpulPohon* kiri;
SimpulPohon* kanan;
// Konstruktor
SimpulPohon(char karakter);
};
class PohonBiner
{
private:
SimpulPohon* akar;
bool sisip(SimpulPohon* &ortu, SimpulPohon* ptrBaru);
SimpulPohon* cari(SimpulPohon* &akar, char data);
string inOrder(SimpulPohon* ptrSimpul);
string preOrder(SimpulPohon* ptrSimpul);
string postOrder(SimpulPohon* ptrSimpul);
void hapusSemuaSimpul(SimpulPohon* ptrSimpul);
public:
PohonBiner();
~PohonBiner();
bool sisip(char data);
bool cari(char data);
2015 Pemrograman Algoritma Struktur Data Modul 14 Pusat Bahan Ajar dan eLearning
9 Tim Dosen http://www.mercubuana.ac.id
bool hapus(char data);
string inOrder();
string preOrder();
string postOrder();
};
// Konstruktor SimpulPohon
SimpulPohon::SimpulPohon(char data)
{
SimpulPohon::data = data;
SimpulPohon::induk = NULL;
SimpulPohon::kiri = NULL;
SimpulPohon::kanan = NULL;
}
// Konstruktor PohonBiner
PohonBiner::PohonBiner()
{
PohonBiner::akar = NULL;
}
// Destruktor PohonBiner
PohonBiner::~PohonBiner()
{
hapusSemuaSimpul(akar);
}
// sisip (Bersifat privat)
// Untuk menyisipkan simpul ke pohon
// Nilai balik: true = Berhasil disisipkan
// false = Gagal karena data kembar
bool PohonBiner::sisip(SimpulPohon* &ortu, SimpulPohon* ptrBaru)
{
if (ptrBaru->data == ortu->data)
{
delete ptrBaru; // Hapus karena sudah ada
return false;
}
else
if (ptrBaru->data < ortu->data)
2015 Pemrograman Algoritma Struktur Data Modul 14 Pusat Bahan Ajar dan eLearning
10 Tim Dosen http://www.mercubuana.ac.id
if (ortu->kiri == NULL)
{
ortu->kiri = ptrBaru;
ptrBaru->induk = ortu;
return true;
}
else
return sisip(ortu->kiri, ptrBaru);
else // Berarti lebih dari
if (ortu->kanan == NULL)
{
ortu->kanan = ptrBaru;
ptrBaru->induk = ortu;
return true;
}
else
return sisip(ortu->kanan, ptrBaru);
}
// sisip (Bersifat publik)
// Untuk menyisipkan data ke pohon
// Nilai balik: true = Berhasil disisipkan
// false = Gagal karena data kembar
bool PohonBiner::sisip(char data)
{
SimpulPohon* ptrBaru = new SimpulPohon(data);
if (akar == NULL)
{
akar = ptrBaru;
return true;
}
else
return sisip(akar, ptrBaru);
}
// cari (Bersifat privat)
// Untuk mencari data data
// Nilai balik: true: ketemu
2015 Pemrograman Algoritma Struktur Data Modul 14 Pusat Bahan Ajar dan eLearning
11 Tim Dosen http://www.mercubuana.ac.id
// false: tidak ketemu
// argumen Akar menyatakan akar dari subpohon
// untuk pencarian
SimpulPohon* PohonBiner::cari(SimpulPohon* &akar, char data)
{
if (akar == NULL)
return NULL;
else
if (data == akar->data)
return akar;
else
if (data < akar->data)
return cari(akar->kiri, data);
else
return cari(akar->kanan, data);
}
// cari (Bersifat publik)
// Menghasilkan : true: kalau data ketemu
// false: kalau tidak ketemu
bool PohonBiner::cari(char data)
{
if (cari(akar, data) == NULL)
return false;
else
return true;
}
// hapus (Bersifat publik)
// Nilai balik: false = Data tidak ketemu
// true = Data berhasil dihapus
bool PohonBiner::hapus(char data)
{
SimpulPohon* simpulDihapus = cari(akar, data);
if (simpulDihapus == NULL)
{
return true;
}
2015 Pemrograman Algoritma Struktur Data Modul 14 Pusat Bahan Ajar dan eLearning
12 Tim Dosen http://www.mercubuana.ac.id
if (simpulDihapus->kanan == NULL)
if (simpulDihapus->kiri == NULL)
{
// Simpul yang akan dihapus berkedudukan
// sebagai daun (tidak punya anak)
if (simpulDihapus == akar)
akar = NULL;
else
if (simpulDihapus->induk->kiri == simpulDihapus)
// Kalau yang dihapus adalah anak kiri ortunya
simpulDihapus->induk->kiri = NULL;
else
// Kalau yang dihapus adalah anak kanan ortunya
simpulDihapus->induk->kanan = NULL;
}
else
{
// Simpul yang akan dihapus memiliki anak di sebelah kiri saja
if (simpulDihapus == akar)
{
akar = simpulDihapus->kiri;
akar->induk = NULL;
}
else
{
// Kalau bukan akar
if (simpulDihapus->induk->kiri == simpulDihapus)
{
// Merupakan anak kiri dari ortunya
simpulDihapus->induk->kiri = simpulDihapus->kiri;
simpulDihapus->kiri->induk = simpulDihapus->induk;
}
else
{
// Merupakan anak kanan dari ortunya
simpulDihapus->induk->kanan = simpulDihapus->kiri;
2015 Pemrograman Algoritma Struktur Data Modul 14 Pusat Bahan Ajar dan eLearning
13 Tim Dosen http://www.mercubuana.ac.id
simpulDihapus->kiri->induk = simpulDihapus->induk;
}
}
}
else
if (simpulDihapus->kiri == NULL)
{
// Simpul yang akan dihapus mempunyai anak di sebelah kanan saja
if (simpulDihapus == akar)
{
akar = simpulDihapus->kanan;
akar->induk = NULL;
}
else // Kalau bukan akar
if (simpulDihapus->induk->kiri == simpulDihapus)
{
// Simpul dihapus adalah anak kiri ortunya
simpulDihapus->induk->kiri = simpulDihapus->kanan;
simpulDihapus->kanan->induk = simpulDihapus->induk;
}
else
{
// Simpul dihapus adalah anak kanan ortunya
simpulDihapus->induk->kanan = simpulDihapus->kanan;
simpulDihapus->kanan->induk = simpulDihapus->induk;
}
}
else
{
// Simpul yang dihapus memiliki dua buah subpohon
// -- Cari pengganti/suksesor simpul yang akan dihapus
SimpulPohon* suksesor = simpulDihapus->kanan;
while (suksesor->kiri != NULL)
suksesor = suksesor->kiri;
// -- Putuskan suksesor dari pohon
if (suksesor->induk->kiri == suksesor)
2015 Pemrograman Algoritma Struktur Data Modul 14 Pusat Bahan Ajar dan eLearning
14 Tim Dosen http://www.mercubuana.ac.id
{
// Suksesor sebagai anak kiri dari induknya
suksesor->induk->kiri = suksesor->kanan;
if (suksesor->kanan != NULL)
suksesor->kanan->induk = suksesor->induk;
}
else
{
// Suksesor sebagai anak kanan dari induknya
suksesor->induk->kanan = suksesor->kanan;
if (suksesor->kanan != NULL)
suksesor->kanan->induk = suksesor->induk;
}
// Data pada suksesor disalin ke simpul yang akan dihapus
simpulDihapus->data = suksesor->data;
// Ubah simpul yang ditunjuk oleh suksesor ke SimpulDihapus
simpulDihapus = suksesor;
}
delete simpulDihapus;
return true;
}
// InOrder (bersifat privat)
// Menampilkan data secara inorder
string PohonBiner::inOrder(SimpulPohon* ptrSimpul)
{
string hasil = "";
if (ptrSimpul != NULL)
{
if (ptrSimpul->kiri != NULL)
hasil = hasil + inOrder(ptrSimpul->kiri);
hasil = hasil + ptrSimpul->data;
if (ptrSimpul->kanan != NULL)
hasil = hasil + inOrder(ptrSimpul->kanan);
}
return hasil;
}
2015 Pemrograman Algoritma Struktur Data Modul 14 Pusat Bahan Ajar dan eLearning
15 Tim Dosen http://www.mercubuana.ac.id
// InOrder (bersifat publik)
// Menampilkan data secara inorder
string PohonBiner::inOrder()
{
return inOrder(akar);
}
// PreOrder (bersifat privat)
// Menampilkan data secara preorder
string PohonBiner::preOrder(SimpulPohon* ptrSimpul)
{
string hasil = "";
if (ptrSimpul != NULL)
{
hasil = hasil + ptrSimpul->data;
if (ptrSimpul->kiri != NULL)
hasil = hasil + preOrder(ptrSimpul->kiri);
if (ptrSimpul->kanan != NULL)
hasil = hasil + preOrder(ptrSimpul->kanan);
}
return hasil;
}
// PreOrder (bersifat publik)
// Menampilkan data secara preorder
string PohonBiner::preOrder()
{
return preOrder(akar);
}
// PostOrder (bersifat privat)
// Menampilkan data secara postorder
string PohonBiner::postOrder(SimpulPohon* ptrSimpul)
{
string hasil = "";
if (ptrSimpul != NULL)
{
if (ptrSimpul->kiri != NULL)
hasil = hasil + postOrder(ptrSimpul->kiri);
2015 Pemrograman Algoritma Struktur Data Modul 14 Pusat Bahan Ajar dan eLearning
16 Tim Dosen http://www.mercubuana.ac.id
if (ptrSimpul->kanan != NULL)
hasil = hasil + postOrder(ptrSimpul->kanan);
hasil = hasil + ptrSimpul->data;
}
return hasil;
}
// PostOrder (bersifat publik)
// Menampilkan data secara postorder
string PohonBiner::postOrder()
{
return postOrder(akar);
}
// HapusSemuaSimpul (Bersifat privat)
// Untuk menghapus semua simpul
void PohonBiner::hapusSemuaSimpul(SimpulPohon* ptrSimpul)
{
if (ptrSimpul != NULL)
{
hapusSemuaSimpul(ptrSimpul->kiri);
hapusSemuaSimpul(ptrSimpul->kanan);
delete ptrSimpul;
}
}
int main()
{
PohonBiner pohon;
string dataNama = "KEBUNMAIYA";
// Memasukkan karakter-karakter yang ada di dataNama ke Pohon
for (unsigned int i = 0; i < dataNama.length(); i++)
{
if (pohon.sisip(dataNama[i]) == false)
cout << "Data " << dataNama[i]
<< " sudah ada" << endl;
else
cout << "Data " << dataNama[i]
<< " disimpan" << endl;
2015 Pemrograman Algoritma Struktur Data Modul 14 Pusat Bahan Ajar dan eLearning
17 Tim Dosen http://www.mercubuana.ac.id
}
cout << "InOrder: "
<< pohon.inOrder() << endl;
cout << "PreOrder: "
<< pohon.preOrder() << endl;
cout << "PostOrder: "
<< pohon.postOrder() << endl;
// Menghapus A, N dan K
pohon.hapus('A');
pohon.hapus('N');
pohon.hapus('K');
cout << "Setelah A, N dan K dihapus: " << endl
<< "PreOrder: "
<< pohon.preOrder() << endl;
getch();
Hasil eksekusi :
2015 Pemrograman Algoritma Struktur Data Modul 14 Pusat Bahan Ajar dan eLearning
18 Tim Dosen http://www.mercubuana.ac.id
Daftar Pustaka
Andri Kristanto, Algoritma & Pemrograman dengan C++ Edisi 2, Graha Ilmu, Yogyakarta,
2009.
Moh. Sjukani, Algoritma & Struktur Data dengan C, C++ dan JAVA, Mitra Wacana Media,
Bandung, 2004.
2015 Pemrograman Algoritma Struktur Data Modul 14 Pusat Bahan Ajar dan eLearning
19 Tim Dosen http://www.mercubuana.ac.id