STRUKTUR DATA
SEMESTER GENAP TAHUN AKADEMIK 2018/2019
Disusun oleh :
Disusun Oleh
NAMA : Febryan Alfaridzi
NIM : 1818057
PRODI : TEKNIK INFORMATIKA S-1
Mengetahui, Menyetujui,
Kepala Laboratorium Dosen Pembimbing
Rekayasa Perangkat Lunak
KATA PENGANTAR
Dengan memanjatkan puji syukur kehadirat Tuhan Yang Maha Esa, karena
atas berkah rahmat dan karunia-Nya sehingga kami dapat menyelesaikan Laporan
Praktikum Mata Kuliah, guna persyaratan dalam menempuh mata kuliah.
Laporan ini disusun berdasarkan percobaan dan teori dasar yang ada dalam
buku panduan praktikum ,teori yang diperoleh praktikan dari perkuliahan, dan
tidak lupa yaitu Internet sehingga praktikan dapat menambah tidak hanya
menguasai teori saja namun juga memahami serta mengaplikasikannya.
Terwujudnya laporan ini, tentunya tidak lepas dari bantuan-bantuan yang
telah kami terima. Pada kesempatan ini, kami menyampaikan terima kasih yang
sebesar-besarnya kepada yang terhormat:
1. Ibu Hani Zulfia Zahro’, S.kom,M.kom selaku dosen pembimbing
Praktikum Struktur Data.
2. Bapak Joseph Agus Pranoto,ST. selaku dosen mata kuliah Struktur
Data.
3. Bapak Ali Mahmudi, B.Eng.,PhD. selaku Ketua Pelaksana Praktikum
Mata Kuliah Jurusan Teknik Informatika ITN Malang.
4. Instruktur Lab. Rekayasa Perangkat Lunak Teknik Informatika yang
telah memberi petunjuk kepada kami selama pelaksanaan praktikum.
5. Rekan-rekan yang telah membantu dalam pelaksanaan dan penyelesaian
laporan ini.
Dalam menyusun laporan ini kami menyadari bahwa laporan ini masih
memiliki kekurangan, karena itu segala kritik dan saran yang membangun akan
kami nanti demi perbaikan penyusunan laporan selanjutnya.
Harapan kami laporan praktikum ini bermanfaat bagi penulis sendiri
maupun pembaca sekalian.
Penulis
iii
DAFTAR ISI
DAFTAR GAMBAR
DAFTAR TABEL
BAB I
POINTER, STRUCTURE, REKURSIF
Jumlah Pertemuan : 2 x 50 menit
Tujuan Praktikum :
1. Praktikan mampu memahami pengertian pointer, structure, rekursif
dengan menggunakan C++.
2. Praktikan mengetahui Aturan main dari pointer,structure,rekursif.
3. Praktikan dapat mengoperasikan sebuah program menggunakan
metode pointer, structure, dan rekursif.
Tipe_data *nama_pointer;
Maka alamat_x adalah suatu variabel yang berisi alamat dimana nilai
x disimpan. Variabel alamat_x disebut variabel pointer atau sering disebut
dengan pointer saja.
Tgl:
II-2
Void *nama_pointer;
field nama, nim, alamat dan nilai. Dengan demikian akan lebih mudah untuk
membedakan keduanya.
Bentuk umum :
Struct nama_struct{
Tipe_data1 field1;
Tipe_data2 field2;
Tipe_dataN fieldN;
};
- Mahasiswa.nim = “1818057”;
- Cout << mahasiswa.nim;
1.8.2 Terminate
1.9.1 Faktorial
n! = n * (n – 1) * (n – 2) . (n – 3) * … * 3 * 2 * 1
1.9.2 Fibonacci
#include <iostream>
using namespace std;
int main(){
int *a,*b,*c=NULL;
int d = 10;
a = &d;
cout<<"Nilai d : "<<d<<" disimpan pada alamat "<<a<<endl;
cout<<"Nilai b : "<<b<<" -> disebut dangling
pointer"<<endl;
cout<<"Nilai c : "<<c<<" -> disebut null pointer";
return 0;
}
2. Tampilan Program :.
3. Analisa Program
Pertama – tama mendeklarasikan 3 buah pointer, d memiliki nilai
10 dan memiliki alamat 0xb4fd64. Ketika b ditampilkan maka yang tampil
adalah alamat nya karena belum diisi data. c merupakan null pointer yang
artinya adalah kosong.
II-7
#include <iostream>
#include <cstdlib>
using namespace std;
struct mahasiswa{
char nim[11], nama[50];
char alamat[100];
float ipk;
};
main(){
mahasiswa mhs;
cout<<"Masukkan NIM : ";cin>>mhs.nim;
fflush(stdin);
cout<<"Masukkan Nama : ";cin>>mhs.nama;
fflush(stdin);
cout<<"Alamat : ";cin>>mhs.alamat;
cout<<"IPK : ";cin>>mhs.ipk;
cout<<"================================="<<endl;
cout<<"NIM : "<<mhs.nim<<endl;
cout<<"Nama : "<<mhs.nama<<endl;
cout<<"Alamat : "<<mhs.alamat<<endl;
cout<<"IPK : "<<mhs.ipk<<endl;
}
2. Tampilan Program :.
3. Analisa Program :
Program diatas merupakan contoh penggunaan struct. Struct
mahasiswa berisi dengan elemen Nim, Nama, Alaman bertipe data char
dan Ipk bertipe data float yang kemudian Mahasiswa menjadi tipe data
untuk variabel mhs
#include <iostream>
using namespace std;
main(){
int bil;
cout<<"===Mencari Nilai Faktorial==="<<endl;
cout<<"==Dari Bilangan Desimal=="<<endl;
cout<<"======================================="<<endl;
for(bil=0; bil<=5 ;bil++){
cout<<"Hasil Faktorial ( "<<bil<<" ) =
"<<faktorial(bil);
cout<<endl;
}
}
2. Tampilan Program :
3. Analisa Program :
Program diatas adalah program untuk mencari nilai factorial
sebuah bilangan, merupakan contoh penerapan rekursif. Apabila angka <=
maka akan mereturnkan 1, tapi jika tidak maka akan mereturnkan angka *
factorial (angka – 1). Disitulah akan terjadi pemanggilan fungsi secara
terus menerus hingga kondisi if terpenuhi .
#include <iostream>
using namespace std;
main(){
int x,*y,*z;
x=1;
y=&x;
z=&x;
cout<<y<<endl;
cout<<*y<<endl;
cout<<z<<endl;
cout<<*z<<endl;
}
2. Tampilan Program :
3. Analisa Program :
Variabel x berisi data nilainya 1. y mengambil alamat dari variabel
x, maka ketika *y dikeluarkan akan menampilan data yang ada pada
alamat x. Begitupun dengan pointer z, karena sama sama mengambil
alamat dari variabel x.
II-10
#include <iostream>
using namespace std;
struct mahasiswa{
float tugas,quiz,mid,uas,akhir;
string nama,nim,kelas,jurusan;
string nilai;
};
int main(){
mahasiswa mhs;
int jumlahmahasiswa;
cout<<"DATA NILAI STRUKTUR DATA"<<endl;
cout<<"--------------------------"<<endl;
cout<<"Inputan jumlah mahasiswa : ";cin>>jumlahmahasiswa;
cout<<endl;
for(int a=1; a<=jumlahmahasiswa ;a++){
cout<<"Mahasiswa ke-"<<a<<endl;
cout<<"------------------------------------"<<endl;
cout<<"Input Nama\t\t : ";cin>>mhs.nama;
cout<<"Input NIM\t\t : ";cin>>mhs.nim;
cout<<"Input Kelas\t\t : ";cin>>mhs.kelas;
cout<<"Input Jurusan\t\t : ";cin>>mhs.jurusan;
cout<<endl;
cout<<"Input Nilai Tugas\t : ";cin>>mhs.tugas;
cout<<"Input Nilai Quiz\t : ";cin>>mhs.quiz;
cout<<"Input Nilai MID\t\t : ";cin>>mhs.mid;
cout<<"Input Nilai UAS\t\t : ";cin>>mhs.uas;
cout<<endl<<endl;
mhs.akhir = (mhs.tugas+mhs.quiz+mhs.mid+mhs.uas)/4;
cout<<"Nilai Akhir Anda\t : "<<mhs.akhir<<endl;
if(mhs.akhir >= 80 && mhs.akhir <= 100){
mhs.nilai = "A";
}
else if(mhs.akhir >= 75 && mhs.akhir <80){
mhs.nilai = "B+";
}
else if(mhs.akhir >= 70 && mhs.akhir <75){
mhs.nilai = "B";
}
else if(mhs.akhir >= 50 && mhs.akhir <70){
mhs.nilai = "C";
}
else if(mhs.akhir >= 0 && mhs.akhir <50){
mhs.nilai = "D";
}
else{
mhs.nilai = "Salah input nilai";
}
cout<<"Nilai Huruf Anda\t : "<<mhs.nilai<<endl;
cout<<"=====================================================
========"<<endl<<endl;
}
II-11
2. Tampilan Program :
3. Analisa Program :
Pertama – tama membuat struct yang berisi bermacam elemen.
Inputan jumlah mahasiswa adalah menggunakan variabel pada fungsi main
bukan menggunakan elemen pada struct. Rata – rata nilai didapat dari 4
nilai mahasiswa yang jumlahkan kemudian di bagikan dan nilai huruf
dibuat menggunakan percabangan if.
II-12
main(){
int jumlah_piring;
cout<<"=====Permainan Hanoi====="<<endl<<endl;
cout<<"Masukkan Jumlah piring: ";
cin>>jumlah_piring;
cout<<endl;
hanoi(jumlah_piring,'A','B','C');
}
2. Tampilan Program :
3. Analisa Program :
Program diatas adalah contoh implementasi rekursif pada C++.
Pemanggilan fungsi dirinya sendiri akan terus berjalan apabila kondisi n
masih tidak sama dengan 1. Fungsi akan berhenti memanggil dirinya
sendiri ketika kondisi if telah terpenuhi. Pada fungsi main, jumlah piring
merupakan inputan user dan hasil eksekusi program tergantung pada
inputan user tersebut.
I.9 Kesimpulan
1. Pointer adalah sebuah variabel yang meyimpan alamat memory, untuk
mendapatkan alamat dari sebuah variabel adalah dengan menggunakan
operator &, sedangkan untuk memanggil data yang ada di alamat tersebut
adalah menggunakan operator *.
3. Rekursif adalah fungsi yang memanggil fungsi itu sendiri dan prosesnya
terjadi secara berulang – ulang.
Tgl:
II-1
BAB II
Stack dan Queue
Jumlah Pertemuan : 2 x 60 menit
Tujuan Praktikum :
1. Praktikan dapat memahami pengertian dari Stack dan Queue
2. Agar Praktikan mengetahui dan memahami Operasi-operasi yang
digunakan di metode Stack dan Queue
3. Praktikan dapat mengoprasikan atau menerapkan metode Stack dan
Queue kedalam sebuah program.
Alat / bahan :
1. Perangkat komputer
2. Perangkat lunak: Dev C++
3. Modul Struktur Data 2019
Tgl:
II-2
Pada mulanya isi top dengan -1, karena array dalam C dimulai dari 0,
yang berarti stack adalah Kosong! Top adalah suatu variabel penanda dalam
Stack menunjukkan elemen teratas Stack sekarang. Top Of Stack akan selalu
bergerak hingga mencapai Max Of Stack sehingga menyebabkan Stack penuh.
Untuk mengambil elemen teratas dari stack, ambil dahulu nilai elemen
teratas stack dengan mengakses Top Of Stack, tumpukan nilai yang akan
diambil terlebih dahulu, baru di decrement (dikurangi) nilai Top Of Stack
sehingga jumlah elemen stack berkurang.
1. Tanda kurung : ( … )
3. Perkalian, pembagian : *, /
4. Penjumlahan, pengurangan : +, -
d) Jika sudah semua soal dibaca, pop semua isi stack dan push ke
postfix sesuai dengan urutannya.
Pada struktur antrian linier terdapat dua pintu yaitu head dan tail.
Dimana head ditempatkan pada awal array (index 0) dan tail ditempatkan
pada max -1, sehingga dalam pemrograman dibutuhkan 2 variabel head dan
tail.
operasi yang terdapat pada circular array tidak jauh berbeda dengan operasi
pada linear array.
3. Jika depan = maks dan ada elemen yang akan dihapus, maka nilai
depan = 1
4. Jika belakang = maks dan depan tidak 1, maka jika ada elemen yang
akan ditambahkan, nilai belakang = 1
1. Fungsi Is Empty
2. Fungsi Is Full
3. Fungsi Enqueue
4. Fungsi Dequeue
1. Listing Program :
#include <iostream>
#define MAXSTACK 100
using namespace std;
else
{
s->item[s->jml]=x;
++(s->jml);
}
}
int main()
{
int pil;
Stack tumpukan;
itemType data;
init(&tumpukan);
do
{
cout<<"Selamat datang di Aplikasi stack"<<endl;
cout<<"1. PUSH(Memasukan)"<<endl;
II-10
cout<<"2. POP(Mengangkat/Memanggil)"<<endl;
cout<<"3. Display(Menampilkan)"<<endl;
cout<<"4. Delete(Hapus)"<<endl;
cout<<"5. Exit"<<endl;
cout<<"Masukkan pilihan : ";cin>>pil;
cout<<"----------------------------------------------
----"<<endl;
switch(pil)
{
case 1:
cout<<"Masukkan data : ";cin>>data;
cout<<"----------------------------------------
----------"<<endl;
isi(data,&tumpukan);
break;
case 2:
ambil(&tumpukan,&data);
break;
case 3:
tampil(&tumpukan);
break;
case 4:
hapus(&tumpukan);
break;
}
}
while(pil!=5);
cout<<" Terima Kasih"<<endl;
cout<<"--------------------------------------------------
"<<endl;
return 0;
}
2. Tampilan Program :
3. Analisa Program :
Pertama user akan menginputkan pilihan, kemudian masuk ke
dalam percabangan switch. Setiap pilihan telah diisi dengan fungsi telah di
atur di luar fungsi main. Ketika mengeluarkan data yang dikeluarkan
adalah dari yang terakhir di inputkan oleh user nantinya.
#include <iostream>
#define max 8
void init(){
antrian.head = -1;
antrian.tail = -1;
}
int kosong(){
if(antrian.tail==-1){
return 1; //data kosong
}
else{
return 0; //data berisi
}
}
int penuh(){
if(antrian.tail==max-1){
return 1; //data penuh
}
else{
return 0; //data berisi
}
}
void masuk(){
int data;
cout <<"Masukkan bilangan = ";
cin >>data;
if(penuh()==0){
antrian.tail++;
antrian.data[antrian.tail]=data;
cout<<"\n"<<antrian.data[antrian.tail]<<" masuk ";
}
else{
II-12
int keluar(){
int i;
if(kosong()==1){
cout<<"Kosong cuy";
}
else{
int x=antrian.data[antrian.head+1];
for(i=antrian.head;i<antrian.tail;i++){
antrian.data[i]=antrian.data[i+1];
}
antrian.tail--;
cout <<x <<" berhasil dikeluarkan ";
return x;
}
}
void clear(){
init();
cout <<"Data telah dikosongkan";
}
void tampil(){
if(kosong()==0){
for(int i=antrian.head+1;i<=antrian.tail;i++){
cout <<antrian.data[i]<<" ";
}
}
else{
cout <<"Data masih kosong";
}
}
int main(){
int pil;
init();
cout<<"*-------------------------------*"<<endl;
cout<<"* Q u e u e ( A N T R I A N ) *"<<endl;
cout<<"*-------------------------------*"<<endl;
do{
cout<<"\n";
cout<<"\n********************************";
cout<<"\n1. Masukkan Data";
cout<<"\n2. Keluarkan Data";
cout<<"\n3. Kosongkan Data";
cout<<"\n4. Cetak Data";
cout<<"\n\nSilahkan Masukan Pilihan Anda :
";cin>>pil;
cout<<"\n";
switch (pil){
case 1:
masuk();
break;
case 2:
keluar();
II-13
break;
case 3:
clear();
break;
case 4:
tampil();
break;
default :
cout<<"\n Maaf, Tidak ada dalam
pilihan";
}
} while(pil>=1 && pil<= 4);
return 0;
}
2. Tampilan Program :
3. Analisa Program :
Data – data yang dimasukkan oleh user dapat di tampilkan dengan
memilih pilihan nomor 4. Jika user memilih mengeluarkan data, maka data
di indeks ke dua akan bergeser ke indeks pertama begitupun data yang
berada pada indeks ke-2 dan seterusnya akan bergeser ke indeks
sebelumnya.
II-14
#include <iostream>
#include <cstdlib>
#include <cstring>
using namespace std;
int main(){
char masukkan[30];
int panjang;
cout<<"Masukkan kalimat : ";gets (masukkan);
cout<<endl;
cout<<"Kalimat awal : "<<masukkan;
panjang = strlen(masukkan);
cout<<"\nDibalik jadi : ";
for(int a=panjang; a>=1 ;a--){
char stack = masukkan[a-1];
cout<<stack;
}
}
2. Tampilan Program :
3. Analisa Program :
Inputan pada masukkan kalimat adalah menggunakan tipe data
char. Agar dapat menginputkan dengan spasi maka harus menggunakan
library cstdlib. Strlen digunakan untuk mengetahui berapa jumlah karakter
inputan user tadi, kemudian digunakan untuk menampilkan karakter dari
yang terakhir sampai ke awal.
II-15
#include <iostream>
#include <windows.h>
using namespace std;
struct antri{
int data;
};
antri ant[15];
struct identitas{
char nama[20];
};
identitas id[15];
int main(){
int cek=0, y=0;
char pil;
do {
cout<<"\n|| PROGRAM BANK ||"<<endl<<endl;
cout<<"1. Masukan Antrian"<<endl;
cout<<"2. Proses Antrian"<<endl;
cout<<"3. Keluar"<<endl;
cout<<endl;
cout<<"Masukkan pilihan = ";
cin>>pil;
cout<<endl;
if(pil!='1' && pil !='2' && pil !='3' ){
system("cls");
cout<<"PILIHAN 1 - 3 WOYYY !!!!"<<endl;
}
else{
if(pil=='1'){
if(cek==15 && y==15){
cout<<"Maaf Antrian Penuh :)";
}
cout<<endl;
system("cls");
cout<<"Nama\t: ";
cin>>id[cek].nama;
cout<<endl;
cek++;
system("cls");
cout<<"Antrian Anda\t:\n\n";
for(int z=0;z<cek;z++){
cout<<"Nomor\t\t: "<<z+1;
cout<<endl;
cout<<"Nama\t\t: "<<id[z].nama<<endl;
cout<<endl<<endl;
}
cout<<endl<<endl;
system("PAUSE");
system("cls");
}
else{
II-16
if(pil=='2'){
if(cek==0)
cout<<"MASIH KOSONG ASTAGHFIRULLAHH
!!!";
else{
for(int v=0;v<cek;v++){
ant[v].data=ant[v+1].data;
}
cek--;
system("cls");
cout<<"\tProses\n\n";
cout<<"Nama\t\t:
"<<id[0].nama<<endl<<endl;
cout<<"Antrian dengan nama
"<<id[0].nama<<" berhasil di proses";
cout<<endl;
{
int b;
for(b=0;b<cek;b++)
id[b]=id[b+1];
b--;
}
}
cout<<endl;
system("PAUSE");
system("cls");
}
}
}
}while(pil!='3');
}
2. Tampilan Program :
3. Analisa Program :
Program Antrian Bank diatas merupakan contoh penerapan queue.
Setelah memilih pilihan 1, maka user akan memasukkan data nama dan
antrian akan didapatkan secara otomatis. Proses antrian yang dimaksut
adalah antrian akan di keluarkan dari antrian yang pertama diinputkan.
II.7 Kesimpulan
1. Konsep dari Stack adalah LIFO (Last In First Out) yaitu data yang terakhir
dimasukkan adalah data yang pertama keluar dan data yang pertama
dimasukkan adalah data yang terakhir keluar.
2. Konsep dari Queue adalah FIFO (First In First Out) yaitu data yang
pertama dimasukkan lah yang akan keluar pertama dan data yang terakhir
di masukkan akan di keluarkan terakhir juga.
3. Pada Stack sebutan untuk memasukkan data adalah Push dan sebutan
untuk mengeluarkan data adalah Pop. Pada Queue sebutan untuk
memasukkan data adalah Enqueue dan sebutan untuk mengeluarkan data
adalah Dequeue.
Tgl:
III-1
BAB III
SORTING
Jumlah Pertemuan : 2 x 60 menit
Tujuan Praktikum :
1. Praktikan dapat memahami pengertian dari Sorting
2. Praktikan mengetahui dan memahami cara kerja dari system sorting
3. Praktikan dapat mengoprasikan atau menerapkan metode sorting
Alat / bahan :
1. Perangkat komputer
2. Perangkat lunak: Dev C++
3. Modul Struktur Data 2019
1. Bubble Sort
2. Exchange Sort
3. Insertion Sort
4. Selection Sort
5. Quicksort
Tgl:
III-2
1. Pengecekan dimulai data ke-1 sampai dengan data ke-n (missal I &
pos)
3. Jika data pos tidak sesuai dengan kondisi maka pos = j dan j akan
selalu bertambah (j++) sampai melewati n.
#include <iostream>
using namespace std;
main(){
int NumList [5]={3,4,1,8,12};
int temp;
cout<<"Data sebelum diurutkan : ";
for (int d=0;d < 5;d++){
cout<<" "<<NumList[d];
}
cout<<endl<<endl;
for(int i=0;i<=3;i++){
cout<< "Proses "<< i+1<< " = ";
for(int x=0;x<=3;x++){
if(NumList[x]>=NumList[x+1]){
temp=NumList[x];
NumList[x]=NumList[x+1];
NumList[x+1]=temp;
}
}
for(int y=0;y<5;y++){
cout<<" "<<NumList[y];
}
cout<<endl;
}
cout<<endl;
cout<<"Data setelah diurutkan : ";
for (int d=0;d < 5;d++){
cout<<" "<<NumList[d];
}
}
2. Tampilan Program :
3. Analisa Program :
Program diatas adalah contoh sorting menggunakan metode
Bubble Sort. Pada proses 1, data pertama (3), lebih besar dari data ke dua
(1), maka terjadi pertukaran tempat sehingga data menjadi 1, 3. Begitupun
pada proses 2, 3 dan 4. Proses dari Bubble sort adalah banyaknya data – 1.
#include<iostream>
using namespace std;
main(){
int data[6]={84,69,76,86,94,91};
int tanda;
cout<<"Data Awal : ";
for(int a=0;a< 6;a++){
cout<<data[a]<<" ";
}
cout<<endl<<endl;
for(int b=0;b< 5;b++){
cout<<"Proses "<< b+1 << " = ";
for(int a=b;a<5;a++){
if(data[b]<data[a+1]){
data[b]=data[b];
}
else{
tanda=data[b];
data[b]=data[a+1];
data[b+1]=tanda;
}
}
for(int a=0;a< 6 ;a++){
cout<<data[a]<<" ";
}
cout<<endl;
}
}
2. Tampilan Program :
3. Analisa Program :
Pertama – tama mendeklarasikan variabel data dengan index array
6 dan di isi dengan data 84, 69, 76, 86, 94, 91. For pertama dimaksudkan
untuk menampilkan data dari index array. For kedua adalah For bersarang,
digunakan untuk melakukan sorting data nya.
#include <iostream>
using namespace std;
main(){
int data[5] = { 20, 34,12,5,60 }; //menampilkan data awal
cout<<"Data sebelum di sorting :";
for(int i=0;i<5;i++){
cout<<data[i]<<" ";
}
cout<<endl; //proses insertion sort
int temp,i,j;
for(i=1;i<5;i++){
temp = data[i];
for(j = i-1; j >= 0 ; j--){
if ( temp <= data[j]){
data[j+1] = data[j];
data[j] = temp;
temp = data[j];
}
}
cout<<"Proses "<< i << " = ";
for(int x=0;x<5;x++){
cout<<data[x]<<" ";
}
cout<<endl;
}
}
2. Tampilan Program :
3. Analisa Program :
Program diatas adalah program sorting menggunakan metode
Insertion Sort. Sorting seperti gabungan dari Bubble Sort dan Exchange
Sort. Proses pengurutan dimulai dari indeks ke-2 yaitu data 34 akan
ditukar dengan data 20. Pertukaran akan dilakukan jika memang perlu dan
seterusnya hingga data yang paling akhir
#include <iostream>
using namespace std;
main(){
int data[6]={32,75,69,58,21,40};
int i,pos,j,temp;
i=0;
pos=0;
j=1;
cout<<"Data Awal : ";
for(int x=0;x<=5;x++){
cout<<data[x]<<" ";
}
cout<<endl;
for(int z=0;z<=4;z++){
i=z;
pos=z;
j=z + 1;
while (j < 6){
if(data[j]<data[pos]){
pos = j;
j = j+1;
}
else{
pos = pos;
j = j+1;
}
}
if(pos!=i){
temp=data[pos];
data[pos]=data[i];
data[i]=temp;
}
cout<<"Proses "<<z+1<<" = ";
for(int x=0;x<=5;x++){
cout<<data[x]<<" ";
}
cout<<endl;
}
}
III-9
2. Tampilan Program :
3. Analisa Program :
Program diatas adalah program sorting dengan menggunakan
metode Selection Sort. For pertama digunakan untuk menampilkan data
pada index array, kemudian for kedua digunakan untuk melakukan proses
sorting nya
#include <iostream>
using namespace std;
void QuickSort(int L, int R){ //the best sort i've ever had :)
int i, j;
int mid;
i = L;
j = R;
mid = data[(L+R) / 2];
do{
while(data[i] < mid)
i++; //selama nilai Data[i] lebih kecil daripada
nilai Mid maka i bertambah 1
while (data[j] > mid)
j--; //selama nilai Data[j] lebih besar daripada
nilai Mid makan j berkurang 1
if (i <= j){ //jika I <= J maka data ditukar..
int t;
t = data[j];
data[j] = data[i];
data[i] = t;
i++;
III-10
j--;
cout<<"Quicksort ( "<<L<<", "<<R<<" ) = ";
for(int i=0;i<5;i++){
cout<<data[i]<<" ";
}
cout<<endl;
}
}
while (i < j); //melakukan perulangan selama I lebih kecil
daripada J
if (L < j)
QuickSort(L, j);
if (i < R)
QuickSort(i, R);
}
main(){
cout<<" Proses Quick Sort"<<endl;
cout<<"------------------------------------- "<<endl;
cout<<"Data awal : ";
for(int i=0;i<5;i++){
cout<<data[i]<<" ";
}
cout<<endl;
QuickSort(0,4);
}
2. Tampilan Program :
3. Analisa Program :
Program diatas adalah program sorting menggunakan metode
Quick Sort. Variabel data merupakan variabel array berisi data 23,
13,45,89, 50. Proses pertukaran data terjadi pada perulangan do-while
selama I < j
III-11
#include <iostream>
using namespace std;
int main(){
string nama[40];
int nim[20];
int banyak_aslab,tukar_nim;
string tukar_nama;
cout<<"\tLab. RPL ITN Malang"<<endl;
cout<<"Masukkan Data Aslab RPL"<<endl;
cout<<"Banyak Aslab : ";cin>>banyak_aslab;
cout<<"==============================="<<endl;
for(int a=0; a<banyak_aslab; a++){
cout<<"Data Aslab ke-"<<a+1<<endl;
cout<<"NIM\t: ";cin>>nim[a];
cout<<"NAMA\t: ";cin>>nama[a];
cout<<"---------------------"<<endl;
}
for(int x=0; x<banyak_aslab; x++){
for(int y=0; y<banyak_aslab; y++){
if(nim[y] > nim[y+1]){
tukar_nim = nim[y];
nim[y] = nim[y+1];
nim[y+1] = tukar_nim;
tukar_nama = nama[y];
nama[y] = nama[y+1];
nama[y+1] = tukar_nama;
}
else{
nim[y] = nim[y];
}
}
}
cout<<endl;
cout<<"Data setelah diurutkan :"<<endl;
for(int n=0; n<banyak_aslab; n++){
cout<<nim[n]<<" "<<nama[n]<<endl;
}
}
III-12
2. Tampilan Program :
main(){
cout<<" Proses Quick Sort"<<endl;
cout<<endl<<endl;
cout<<"Data awal : ";
for(int b=0; b<6; b++){
cout<<data[b]<<" ";
}
cout<<endl;
QuickSort(0,5);
}
III-14
2. Tampilan Program :
III.10 Kesimpulan
1. Sorting dalam C++ terdiri dari 5 macam sort yaitu Bubble Sort, Exchange
Sort, Insertion Sort, Selection Sort dan Quick Sort.
2. Sorting adalah pengelompokan sejumlah data yang tersusun secara acak
kemudian diurutkan secara Ascending maupun Descending
3. Selection Sort adalah metode dalam sorting pengurutan dengan cara
elemen terkecil atau terbesar, sesuai permintaan.
Tgl:
IV-1
BAB IV
SEARCHING
Jumlah Pertemuan : 2 x 60 menit
Tujuan Praktikum :
1. Praktikan dapat memahami pengertian dari Searching
2. Agar Praktika mengetahui dan memahami cara kerja dari system
Searching
3. Praktikan dapat mengoprasikan atau menerapkan metode
Searching
Alat / bahan :
1. Perangkat komputer
2. Perangkat lunak: Dev C++
3. Modul Struktur Data 2019
Tgl:
IV-2
1. i ← 0
4. i = j + 1, melanjutkan ke langkah ke 5
5. Kembali ke langkah 2
i = Posisi Data
x = Data yang dicari
n = Jumlah data yang tersedia
Salah satu syarat agar pencarian biner dapat dilakukan adalah data
yang tersedia sudah dalam keadaan urut. Dengan kata lain, apabila data belum
dalam keadaan urut, pencarian biner tidak dapat dilakukan. Dalam kehidupan
sehari-hari, sebenarnya kita juga sering menggunakan pencarian biner.
Misalnya saat ingin mencari suatu kata dalam kamus, Algoritma dari
pencarian biner dapat dijelaskan sebagai berikut :
IV-3
Inisialisasi awal :
Teknik ini dilakukan pada data yang sudah terurut berdasarkan kunci
tertentu. Teknik searching ini dilakukan dengan perkiraan letak data. Contoh
ilustrasi : jika kita hendak mencari suatu kata dalam buku telepon, misal yang
berawalan dengan huruf J, maka kita tidak akan mencarinya dari awal buku,
tetapi kita langsung membukanya pada 1/3 atau 1/4 dari tebal buku tersebut.
IV-4
2. Tampilan Program :
3. Analisa Program :
Program diatas merupakan program searching dengan
menggunakan metode Sequential Searching. Data cari akan dibandingkan
dengan data di setiap index. Pertama dibandingkan dengan data 1,
kemudian data 5 dan seterusnya hingga ke seluruh indeks.
main(){
int data[10] = {11,24,38,46,58,64,78,88,89,95};
int cari, awal=0, akhir=9, tengah;
int flag = 0;
cout<<"+================================+ \n";
cout<<" PROGRAM SEARCHING \n";
cout<<"+================================+ \n\n";
cout<<"Data : ";
for(int a=0; a<=9;a++){
cout<<data[a]<< " ";
}
cout<<"\n\nMasukkan data yang dicari : ";
cin>>cari;
while (awal <= akhir && flag == 0){
tengah = (awal + akhir)/2;
if ( cari == data [ tengah ] ){
flag = 1;
break;
}
else if (cari < data[tengah]){
akhir= tengah - 1;
}
else if (cari > data[tengah] ){
awal = tengah + 1;
}
}
if ( flag == 1 ){
cout<<"\nData ditemukan "<<endl;
}
else{
cout<<"\nData tidak ditemukan "<<endl;
}
}
IV-7
2. Tampilan Program :
3. Analisa Program :
Program diatas adalah program searching menggunakan metode
Binary Search. Dapat dilakukan hanya jika data telah terirut seperti data
diatas. Data cari = 30, maka yang dilakukan Searching hanya pada data
sebelah kiri.
main(){
int data[8] = {10,12,36,44,50,57,70,72};
int low, high, cari, pos, tanda = 0;
float pos1;
int N = 8;
low = 0;
high = N - 1;
cout << "Data : " << endl;
for (int x = 0; x <= 7; x++){
cout << " " << data[x];
}
cout<<endl;
cout << "=================================" << endl;
cout << "Masukkan Data Yang Ingin Dicari : ";
cin >> cari;
do{
IV-8
pos1 = ((cari-data[low])/(data[high]-
data[low]))*((high - low)+low);
pos = floor(pos1); //pembulatan nilai kebawah
if (data[pos] == cari){
tanda = 1;
break;
}
if (data[pos] > cari){
high = pos - 1;
}
else if (data[pos] < cari ){
low = pos + 1;
}
}
while (cari >= data[low] && cari <= data[high]);
if (tanda == 1){
cout << ":: Data Ditemukan ::" << endl;
}
else{
cout << ":: Data Tidak Ditemukan :: " << endl;
}
}
2. Tampilan Program :
3. Analisa Program :
Program diatas merupakan program searching dengan
menggunakan metode Interpolation Search. Variabel pos diatas digunakan
untuk pembulatan kebawah. Kemudian pos akan dibandingkan dengan
data cari (10), apabila data pos sama dengan 10. Maka tanda akan bernilai
1
IV-9
struct data{
int nim[10];
string nama[10];
int hasil_nim;
string hasil_nama;
};
data aslab;
main(){
int banyak_aslab;
int cari;
int flag = 0;
cout<<"\tLab Rpl ITN Malang"<<endl;
cout<<"Masukkan Data Aslab RPL"<<endl;
cout<<"Banyak Aslab : ";cin>>banyak_aslab;
cout<<"==================================="<<endl;
for(int a=0; a<banyak_aslab; a++){
cout<<"Data Aslab ke-"<<a+1<<endl;
cout<<"NIM\t: ";cin>>aslab.nim[a];
cout<<"NAMA\t: ";cin>>aslab.nama[a];
cout<<"----------------------\n";
}
cout<<endl;
cout<<"Masukkan NIM yang ingin dicari : ";
cin>>cari;
for(int n=0; n<banyak_aslab; n++){
if(aslab.nim[n] == cari){
flag = 1;
aslab.hasil_nim = aslab.nim[n];
aslab.hasil_nama = aslab.nama[n];
}
}
if(flag == 1){
cout<<"=============================\n";
cout<<"\tData ditemukan"<<endl;
cout<<"\t"<<aslab.hasil_nim<<"
"<<aslab.hasil_nama;
cout<<"\n=============================\n";
}
else if(flag == 0){
cout<<"=====================================\n";
cout<<"\tData tidak ditemukan"<<endl;
cout<<"=====================================\n";
}
}
IV-10
2. Tampilan Program :
3. Analisa Program :
Program diatas merupakan Searching, dibuat dengan menggunakan
metode Sequential Searching. Banyaknya aslab sifatnya dinamis,
tergantung pada berapa user menginputkan. Dalam Sequential Searching,
terdapat variabel flag untuk memberi tanda apakah data ditemukan atau
tidak. Data tiap indeks akan dibandingkan dengan data yang dicari.
Apabila data yang dicari ketemu, maka flag akan bernilai 1.
IV-11
IV.7 Kesimpulan
1. Searching dalam C++ terbagi menjadi 3 metode yaitu Sequential Search,
Binary Search dan Interpolation Search
2. Sequential Search adalah proses pencarian data dengan membandingkan
data yang ada satu per satu secara berurutan dengan data yang dicari
3. Binary Search dan Interpolation Search adalah metode Searching yang
bisa dilakukan hanya saat data telah diurutkan terlebih dahulu
Tgl:
V-1
BAB V
LINKED LIST
Jumlah Pertemuan : 2 x 60 menit
Tujuan Praktikum :
1. Praktikan dapat memahami pengertian dari linked list
2. Praktikan dapat mengetahui dan memahami cara kerja dari system
Linked List
3. Praktikan dapat mengoprasikan atau menerapkan metode Linked
List
Alat / bahan :
1. Perangkat komputer
2. Perangkat lunak: Dev C++
3. Modul Struktur Data 2019
Linked list adalah sekumpulan elemen dari data yang bertipe sama
yang saling terurut dan terhubung dengan bantuan variabel pointer, yang
setiap data didalamnya disebut node ( simpul ) menempati alokasi memorat
secara dinamis dan biasanya berupa struct yang terdiri dari beberapa field.
Linked list juga merupakan suatu cara untuk menyimpan data dengan struktur
sehingga dapat secara otomatis menciptakan suatu tempat baru untuk
menyimpan data yang diperlukan
Statis Dinamis
Tgl:
V-2
Single linked list merupakan linked list yang field pointer-nya hanya
satu buah saja dan satu arah. Serta pada akhir node, pointernya menunjuk
NULL.
1. Deklarasi Node
Struct Node{
int data;
Node *next;
};
Node *baru;
baru=new Node;
baru->data=databaru;
baru->next=NULL
Penjelasan :
Double linked list adalah linked list yang filed pointernya 2 arah, ke
node sebelum dan sesudahnya. Double linked list memiliki 3 buah field dalam
1 node yaitu, 1 untuk menyimpan data dan 2 untuk pointer ( next dan prev ).
Pointer next menunjuk pada node setelahnya dan prev menunjuk pada node
sebelumnya.
1. Deklarasi Node
struct Node{
int data;
Node *next;
Node *prev;
}
Node *baru;
baru=new Node;
baru->data=databaru;
baru->next=NULL;
baru->prev=NULL
struct Node{
int data;
Node *next;
};
Node *head;
int cek(){
if(head==NULL){
return 0;
}
else{
return 1;
}
}
void hapusDepan(){
Node *hapus;
int cap;
if (cek()==1){
if(head->next != NULL){
hapus = head;
cap = hapus->data;
head = head->next;
delete hapus;
}
else{
cap = head->data;
head = NULL;
}
cout<<"Data "<<cap<<" terhapus\n\n";
}
else cout<<"Masih kosong\n";
}
void hapusBelakang(){
Node *hapus,*temp;
int cap;
if (cek()==1){
if(head->next != NULL){
temp = head;
while(temp->next->next!=NULL){
temp = temp->next;
}
hapus = temp->next;
cap = hapus->data;
temp->next = NULL;
delete hapus;
}
else{
cap = head->data;
head = NULL;
}
cout<<"Data "<<cap<<" terhapus\n\n";
}
else cout<<"Masih kosong\n";
}
void tampil(){
Node *temp;
temp=head;
if (cek==0){
cout<<"Data Masih Kosong";
}
else if(temp==NULL){
cout<<"Data Masih Kosong"<<endl;
}
else{
while(temp!=NULL){
cout<<temp->data<<" ";
temp=temp->next;
}
}
V-6
main(){
int pilihan, data;
do{
cout<<"Single Linked List dengan Head"<<endl;
cout<<"1. Masukkan Data dari Depan"<<endl;
cout<<"2. Masukkan Data dari Belakang"<<endl;
cout<<"3. Hapus Data dari Depan"<<endl;
cout<<"4. Hapus Data dari Belakang"<<endl;
cout<<"5. Tampilkan Data"<<endl;
cout<<"6. Keluar"<<endl;
cout<<"Masukkan Pilihan Anda : ";
cin>>pilihan;
if (pilihan == 1 ){
cout<<"Masukkan Data = ";
cin>>data;
tambahdepan(data);
}
else if (pilihan == 2 ){
cout<<"Masukkan Data = ";
cin>>data;
tambahbelakang(data);
}
else if (pilihan == 3 ){
hapusDepan();
cout<<endl;
}
else if (pilihan == 4 ){
hapusBelakang();
cout<<endl;
}
else if (pilihan == 5 ){
tampil();
cout<<endl<<endl;
}
else if (pilihan == 6 ){
cout<<"Keluar dari program";
}
else{
cout<<"Pilihan tidak tersedia... \n\n";
}
}
while(pilihan!=6);
}
V-7
2. Tampilan Program :
3. Analisa Program :
Fungsi cek digunakan untuk mengecek apakah head bernilai NULL
atau tidak. Akan mereturnkan 0 jika head = NULL dan akan mereturnkan
1 jika head tidak NULL / ada isinya. Struct Node berisi elemen int data
dan *next dengan tipe data Node.
#include <iostream>
using namespace std;
struct Node
{
int data;
Node *next;
Node *prev;
};
Node *head;
V-8
int cek()
{
if(head == NULL)
{
return 0;
}
else
{
return 1;
}
}
main()
{
int pilihan, data;
do
{
cout<<"Double Linked List Dengan Head"<<endl;
cout<<"1. Masukkan Data dari Depan"<<endl;
cout<<"2. Keluar"<<endl;
cout<<"Masukkan Pilihan Anda = "; cin>>pilihan;
if (pilihan == 1)
{
cout<<"Masukkan Data = "; cin>>data;
tambahdepan(data);
}
else if(pilihan ==2)
{
cout<<"keluar dari program...";
}
else
{
cout<<"pilihan tidak tersedia... \n\n";
}
}
while(pilihan!=2);
}
V-9
2. Tampilan Program :
3. Analisa Program
Pertama – tama membuat sebuah fungsi cek yang digunakan untuk
mengecek apakah head berisi data atau NULL. Kemudian membuat fungsi
tambahdepan untuk memasukkan data. Pada fungsi main pilihan 1 berisi
fungsi tambahdepan yang telah dibuat sebelumnya
struct Node{
string data;
Node *next;
};
Node *head;
V-10
int cek(){
if(head==NULL){
return 0;
}
else{
return 1;
}
}
void hapusDepan(){
Node *hapus;
string cap;
if (cek()==1){
if(head->next != NULL){
hapus = head;
cap = hapus->data;
head = head->next;
delete hapus;
}
else{
cap = head->data;
head = NULL;
V-11
}
cout<<cap<<" terhapus\n\n";
}
else cout<<"Masih kosong\n";
}
void hapusBelakang(){
Node *hapus,*temp;
string cap;
if (cek()==1){
if(head->next != NULL){
temp = head;
while(temp->next->next!=NULL){
temp = temp->next;
}
hapus = temp->next;
cap = hapus->data;
temp->next = NULL;
delete hapus;
}
else{
cap = head->data;
head = NULL;
}
cout<<cap<<" terhapus\n\n";
}
else cout<<"Masih kosong\n";
}
void tampil(){
Node *temp;
temp=head;
if (cek==0){
cout<<"Data Masih Kosong";
}
else if(temp==NULL){
cout<<"Data Masih Kosong"<<endl;
}
else{
while(temp!=NULL){
cout<<temp->data<<"-->";
temp=temp->next;
}
}
}
main(){
int pilihan;
string data;
do{
cout<<"Program Hubungan Orang Tua Anak"<<endl;
cout<<"1. Masukkan dari Depan"<<endl;
cout<<"2. Masukkan dari Belakang"<<endl;
cout<<"3. Hapus dari Depan"<<endl;
cout<<"4. Hapus dari Belakang"<<endl;
cout<<"5. Tampilkan"<<endl;
cout<<"6. Keluar"<<endl;
cout<<"Masukkan Pilihan Anda : ";
cin>>pilihan;
V-12
if (pilihan == 1 ){
cout<<"Masukkan Nama = ";
cin>>data;
tambahdepan(data);
}
else if (pilihan == 2 ){
cout<<"Masukkan Nama = ";
cin>>data;
tambahbelakang(data);
}
else if (pilihan == 3 ){
hapusDepan();
cout<<endl;
}
else if (pilihan == 4 ){
hapusBelakang();
cout<<endl;
}
else if (pilihan == 5 ){
tampil();
cout<<endl<<endl;
}
else if (pilihan == 6 ){
cout<<"Keluar dari program";
}
else{
cout<<"Pilihan tidak tersedia... \n\n";
}
}
while(pilihan!=6);
}
2. Tampilan Program :
3. Analisa Program :
Pertama tama membuat beberapa procedure dengan nama
tambahdepan, tambahbelakang, hapusdepan, hapus belakang dan tampil.
Procedure tambahdepan dipanggil saat user menginputkan 1,
tambahbelakang dipanggil saat user menginputkan 2, hapusdepan saat
menginputkan 3, hapusbelakang saat menginputkan 4 dan tampil saat
menginputkan 5.
struct Node
{
int data;
Node *next;
Node *prev;
};
Node *head;
int cek()
{
if(head == NULL)
{
return 0;
}
else
{
return 1;
}
}
baru->next = head;
head->prev = baru;
head = baru;
}
cout<<"Data ditambahkan \n"<<endl;
}
void tampil()
{
Node *temp; temp = head;
if(cek()==1)
{
while(temp!=NULL)
{
cout<<temp->data<< ends;
temp=temp->next;
}
cout<<endl<<endl;
}
else cout<<"Tidak ada data \n" << endl;
}
void hapusdepan()
{
Node *hapus;
int cap;
if (cek()==1)
{
if(head->next != NULL)
{
hapus = head;
cap = hapus->data;
head = head->next;
V-15
head->prev = NULL;
delete hapus;
}
else
{
cap = head->data;
head = NULL;
}
cout<<"Data "<<cap<<" terhapus" << endl;
}
else
{
cout<<"Tidak ada data \n" << endl;
}
}
void hapusbelakang()
{
Node *hapus;
int cap;
if (cek()==1)
{
if(head->next != NULL)
{
hapus = head;
while(hapus->next!=NULL)
{
hapus = hapus->next;
}
cap = hapus->data;
hapus->prev->next = NULL;
delete hapus;
}
else
{
cap = head->data;
head = NULL;
}
cout<<"Data "<<cap<<" terhapus\n";
}
else
{
cout<<"Tidak ada data \n";
}
}
main()
{
int pilihan, data;
do
{
cout<<"Double Linked List Dengan Head"<<endl;
cout<<"1. Masukkan Data dari Depan"<<endl;
cout<<"2. Masukkan Data dari Belakang"<<endl;
cout<<"3. Tampilkan Data"<<endl;
cout<<"4. Hapus Data dari Depan"<<endl;
cout<<"5. Hapus Data dari Belakang"<<endl;
cout<<"6. Keluar"<<endl;
cout<<"Masukkan Pilihan Anda = "; cin>>pilihan;
V-16
if (pilihan == 1)
{
cout<<"Masukkan Data = "; cin>>data;
tambahdepan(data);
}
else if(pilihan ==2)
{
cout<<"Masukkan Data = "; cin>>data;
tambahbelakang(data);
}
else if(pilihan ==3)
{
tampil();
}
else if(pilihan ==4)
{
hapusdepan();
cout<<endl;
}
else if(pilihan ==5)
{
hapusbelakang();
cout<<endl;
}
else if(pilihan ==6)
{
cout<<"keluar dari program...";
}
else
{
cout<<"pilihan tidak tersedia... \n\n";
}
}
while(pilihan!=6);
}
2. Tampilan Program :
3. Analisa Program :
Program diatas merupakan Double Linked List. Dalam struct Node
terdapat elemen int data, *next dan *prev yang menggunakan tipe data
Node. Di dalam fungsi main, dibuat menu pilihan menggunakan
perulangan do-while yang setiap menunya sudah berisi procedure nya
masing – masing.
V.6 Kesimpulan
1. Linked List terbagi menjadi 2 yaitu Single Linked List, yang hanya
memiliki data dan *next pada Node dan Double Linked List, yang
memiliki *prev, data dan *next pada Node.
2. Linked List adalah sekumpulan elemen dari data yang bertipe sama yang
saling terurut dan terhubung dengan bantuan variabel pointer
3. Linked List dengan Array merupakan 2 hal yang berbeda. Contoh
perbedaannya adalah Array bersifat Statis sedangkan Linked List bersifat
dinamis
Tgl:
VI-1
BAB VI
TREE
Jumlah Pertemuan : 2 x 60 menit
Tujuan Praktikum :
1. Praktikan dapat memahami Pengertian dari Tree
2. Praktikan mengetahui dan memahami cara kerja dari system Tree
3. Praktikan dapat mengoprasikan atau menerapkan metode Tree
Alat / bahan :
1. Perangkat komputer
2. Perangkat lunak: Dev C++
3. Modul Struktur Data 2019
Tree merupakan salah satu bentuk struktur data tidak linear yang
menggambarkan hubungan yng bersifat hirarkis (hubungan one to many)
antara elemen – elemen. Tree bisa didefinisikan sebagai kumpulan node yang
saling terhubung satu sama lain dalam suatu kesatuan yang membentuk
layaknya struktur sebuah pohon. Struktur pohon adalah suatu cara
mempresentasikan suatu struktur hirarki (one to many) secara grafis yang
mirip sebuah pohon, walaupun pohon tersebut hanya tampak sebagai
kumpulan node – node dari atas ke bawah. Suatu struktur data yang tidak
linier yang menggambarkan hubungan yang hirarkis (one to many) dan tidak
linier antara elemen – elemennya.
Tgl:
VI-2
Binary Tree adalah tree dengan syarat bahwa tiap node hanya boleh
memiliki maksimal dua subtree dan kedua subtree tersebut harus terpisah.
Sesuai dengan definisi tersebut tiap node dalam binary tree hanya boleh
memiliki paling banyak dua child.
VI-3
Binary Search Tree adalah Binary Tree dengan sifat bahwa semua left
child harus lebih kecil daripada right child dan parentnya, Juga semua right
child harus lebih besar dari left child serta parentnya. Binary Search Tree
dibuat untuk mengatasi kelemahan pada binary tree biasa, yaitu kesulitan
dalam searching / pencarian node tertentu dalam binary tree.
e) Find : Mencari root, parent, left child atau right child dari
suatu node. (Tree tak boleh kosong)
Node *kanan;
};
{
if(root != NULL){
postOrder(root->kiri);
postOrder(root->kanan);
printf("%d ", root->data);
}
}
//fungsi utama
int main()
{
//deklarasikan variabel
int pil, data;// c;
Node *pohon; //*t;
pohon = NULL; //inisialisasi node pohon
//perulangan do-while
do
{
system("cls"); //bersihkan layar
printf("\t#PROGRAM TREE C++#");
printf("\n\t==================");
printf("\nMENU");
printf("\n----\n");
printf("1. Tambah\n");
printf("2. Lihat pre-order\n");
printf("3. Lihat in-order\n");
printf("4. Lihat post-order\n");
printf("5. Exit\n");
printf("Pilihan : ");
scanf("%d", &pil);
switch(pil)
{
//jika pil bernilai 1
case 1 :
printf("\nINPUT : ");
printf("\n-------");
printf("\nData baru : ");
scanf("%d", &data);
//panggil fungsi untuk menambah node yang
berisi data pada tree
tambah(&pohon, data);
break;
if(pohon!=NULL)
//panggil fungsi untuk mencetak data
secara inOrder
inOrder(pohon);
else
printf("Masih kosong!");
break;
2. Tampilan Program :
3. Analisa Program
Pada Program Tree diatas dideklarasikan beberapa fungsi yakni
fungsi tambah untuk melakukan penambahan node pada Tree. Fungsi pre
order untuk mengunjungi node secara pre-Order sekaligus mencetak isi
node yang telah dikunjungi dari kunjungan yang pertama. Fungsi inOrder
VI-8
class BinarySearchTree{
private:
struct tree_node{
tree_node* left;
tree_node* right;
int data;
};
tree_node* root;
public:
BinarySearchTree(){
root = NULL;
}
parent->left = t;
else
parent->right = t;
}}
void BinarySearchTree::print_preorder(){
preorder(root);
}
int main(){
BinarySearchTree b;
int ch,tmp;
while(1){
cout<<endl<<endl;
cout<<" Binary Search Tree Operations "<<endl;
cout<<" ----------------------------- "<<endl;
cout<<" 1. Insertion/Creation "<<endl;
cout<<" 2. Pre-Order Traversal "<<endl;
cout<<" 3. Exit "<<endl;
cout<<" Enter your choice : ";
cin>>ch;
switch(ch){
case 1 : cout<<" Enter Number to be inserted : ";
cin>>tmp;
b.insert(tmp);
break;
case 2 : cout<<endl;
cout<<" Pre-Order Traversal "<<endl;
cout<<" -------------------"<<endl;
b.print_preorder();
break;
case 3 :
return 0;
}}}
VI-10
2. Tampilan Program :
3. Analisa Program :
Pada Program Tree diatas terdapat beberapa fungsi diantaranya
adalah fungsi insert yang digunakan untuk memasukkan / membuat node
pada Tree, dan fungsi preorder yang digunakan untuk menampilkan data –
data yang telah diinputkan oleh user tadi.
4. Notasi Kurung
( 5 ( 3 ) ( 9 ( 8 , 10 ) ) )
VI-11
5. Notasi Tingkat
5
3
9
8
10
6. Diagram Venn
3 8 10
VI.5 Kesimpulan
1. Tree adalah Kumpulan node yang saling terhubung satu sama lain dalam
suatu kesatuan yang membentuk layaknya struktur sebuah pohon.
2. Beberapa jenis Tree antara lain Binary Tree, Full Binary Tree, Complete
Binary Tree dan Skewed Binary Tree
3. Binary Tree adalah Tree dengan syarat bahwa tiap node hanya boleh
memiliki maksimal dua sub pohon dan edua sub pohon harus terpisah
Tgl:
VII-1
BAB VII
KESIMPULAN
2. Konsep dari Stack adalah LIFO (Last In First Out) yaitu data yang terakhir
dimasukkan adalah data yang pertama keluar dan data yang pertama
dimasukkan adalah data yang terakhir keluar
3. Sorting dalam C++ terdiri dari 5 macam sort yaitu Bubble Sort, Exchange
Sort, Insertion Sort, Selection Sort dan Quick Sort
5. Linked List terbagi menjadi 2 yaitu Single Linked List, yang hanya memiliki
data dan *next pada Node dan Double Linked List, yang memiliki *prev,
data dan *next pada Node.
6. Tree adalah Kumpulan node yang saling terhubung satu sama lain dalam
suatu kesatuan yang membentuk layaknya struktur sebuah pohon
Tgl:
VII-2
DAFTAR PUSTAKA
Modul Struktur Data, Lab. Rekayasa Perangkat Lunak. ITN Malang, 2019.
Asistensi
No. Tanggal Paraf
Konsep Program Hasil Akhir
Sorting
1
Searching
Linked List
Tree
Dosen
Batas Akhir:
Dosen, Pembimbing,