Disusun Oleh :
Kelompok 8
NPM : 20081010130
NPM : 21081010017
NPM : 21081010302
Dengan ini menyatakan bahwa hasil pekerjaan yang kami serahkan sebagai bagian dari
penilaian mata kuliah Struktur Data adalah benar-benar karya orisinal kami, bukan milik
orang lain, dan tidak pernah digunakan dalam penilaian tugas yang lain dalam mata
kuliah apapun, baik secara keseluruhan ataupun sebagian, di Universitas
Pembangunan Nasional“Veteran” Jawa Timur ataupun di institusi lainnya.
II. TEORI
● Binary Search Tree (BST)
Binary Search Tree adalah struktur data yang mengadopsi konsep Binary Tree
namun terdapat aturan bahwa setiap child node sebelah kiri selalu lebih kecil
nilainya dari pada root node. Begitu pula sebaliknya, setiap child node sebelah
kanan selalu lebih besar nilainya daripada root node.
#include<iostream>
using namespace std;
struct dataBus{
string nama;
string pemberangkatan;
string tujuan;
int kursi;
};
struct dataBus bus[500];
Pada source code di atas melakukan deklarasi library dan struct. Library yang
digunakan adalah iostream. Pada struct melakukan deklarasi data bus yang terdapat
nama, pemberangkatan, tujuan, dan kursi. Untuk nama, pemberangkatan, dan tujuan
menggunakan tipe data string sedangkan untuk kursi menggunakan tipe data int.
Pada source code diatas membuat class BST yang dimana di dalam class tersebut
terdiri dari public dan private. Pada bagian diatas merupakan public pada class BST.
Pada class public melakukan deklarasi class data yang berisi deklarasi pointer kiri,
kanan, induk, dan p. Selanjutnya menggunakan fungsi void untuk input, hapus, dan
inorder.
private:
void inorderUtil(data * head){
if(head==NULL) return ;
inorderUtil(head->kiri);
cout <<
"==========================================================="
<< endl;
cout << " Kursi Bus nomor " << head -> nomor
<< "\n";
int temp = head -> nomor;
cout <<
"==========================================================="
<< endl;
cout << "\t\t DATA PENUMPANG" << endl;
cout <<
"==========================================================="
<< endl;
cout << " Nama Penumpang : " << bus[temp].nama
<< endl;
cout << " Pembrangkatan : " <<
bus[temp].pembrangkatan << endl;
cout << " Tujuan : " <<
bus[temp].tujuan << endl;
cout <<
"==========================================================="
<< endl;
cout << endl;
inorderUtil(head->kanan);
}
data * inputData(data * head, T y, data * p){
if(head == NULL){
n++;
data * temp = new data(y,p);
while(p!=NULL){
if(y<p->nomor) p->nkiri += 1;
p=p->induk;
}
return temp;
}
if(y > head->nomor) head->kanan =
inputData(head->kanan, y, head);
else if(y < head->nomor) head->kiri =
inputData(head->kiri, y, head);
return head;
}
data * cariData(data * head, T y){
if(head == NULL) return NULL;
T j = head->nomor;
if(j == y) return head;
if(j > y) return cariData(head->kiri, y);
if(j < y) return cariData(head->kanan, y);
}
int urutData(data * head, T y, int r){
if(head == NULL) return 0;
T j = head->nomor;
if(j == y) return r+1+head->nkiri;
if(j > y) return cariData(head->kiri, y, r);
if(j < y) return cariData(head->kanan, y,
r+head->nkiri+1);
}
data * hapusData(data * head, T y, data * p){
if(head == NULL) return NULL;
if(y == head->nomor){
data * l = head->kiri;
data * r = head->kanan;
while(p!=NULL){
if(y<p->nomor) p->nkiri -= 1;
p=p->induk;
}
if(l == NULL){
delete(head);
return r;
}
if(r == NULL){
delete(head);
return l;
}
while(r->kiri != NULL) r = r->kiri;
head->nomor = r->nomor;
head->kanan = hapusData(head->kanan, r->nomor,
NULL);
return head;
}
if(y < head->nomor) head->kiri =
hapusData(head->kiri, y, head);
else head->kanan = hapusData(head->kanan, y,
head);
return head;
}
Source diatas merupakan bagian private dari class BST. Pada bagian ini berisi deklarasi
dari fungsi void yang terdapat pada public.
Pada source code diatas membuat class AVL yang dimana di dalam class tersebut
terdiri dari public dan private. Pada bagian diatas merupakan public pada class BST.
Pada class public melakukan deklarasi class data yang berisi deklarasi pointer kiri dan
kanan. Selanjutnya menggunakan fungsi void untuk input, hapus, dan inorder. Selain
itu, terdapat data yang di pointer dengan cari untuk melakukan cari data.
private:
int tinggi(data * head){
if(head==NULL) return 0;
return head->tinggi;
}
data * rotasiKanan(data * head){
data * newhead = head->kiri;
head->kiri = newhead->kanan;
newhead->kanan = head;
head->tinggi = 1+max(tinggi(head->kiri),
tinggi(head->kanan));
newhead->tinggi = 1+max(tinggi(newhead->kiri),
tinggi(newhead->kanan));
return newhead;
}
Source diatas merupakan bagian private dari class BST. Pada bagian ini berisi deklarasi
dari fungsi void yang terdapat pada public.
int main(){
BST <float> t;
AVL <float> l;
if(main == 1){
input:
cout <<
"============================================================"
<< endl;
cout << "|\t\t PEMBELIAN TIKET BUS
|" << endl;
cout <<
"============================================================"
<< endl;
cout << "| 1. BST
|" << endl;
cout << "| 2. AVL
|" << endl;
cout <<
"============================================================"
<< endl;
cout << "Pilih (1/2) : "; cin >> menu2;
cin.ignore();
cout << endl;
if(menu2 == 1){
for(i = 0; i<jumlah; i++){
cout <<
"============================================================"
<< endl;
cout << "\t\t Data Penumpang
ke- " << i+1 << endl;
cout <<
"============================================================"
<< endl;
cout << " Nomor Kursi yang
dipilih : "; cin >> kursi; cin.ignore();
cout << " Nama Penumpang
: "; cin >> bus[kursi].nama;
cout << " Keberangkatan
: "; cin >> bus[kursi].pembrangkatan;
cout << " Tujuan
: "; cin >> bus[kursi].tujuan;
bus[kursi].kursi = kursi;
t.input(kursi);
cin.ignore();
cout<<endl;
}
salah:
cout <<
"==========================================================="
<< endl;
cout << "Apakah ingin kembali
ke menu awal (Y/N)"; cin >> back;
bus[kursi].kursi = kursi;
l.input(kursi);
cin.ignore();
cout<<endl;
}
salah1:
cout <<
"============================================================"
<< endl;
cout << "Apakah ingin kembali
ke menu awal (Y/N)"; cin >> back;
cout <<
"============================================================"
<< endl;
Pada bagian diatas merupakan main program ini. Source code diatas mendeklarasikan
int i, main, menu2, jumlah, kursi, dan temp. Selanjutnya melakukan deklarasi char
back. Terdapat menu utama yang diberi nama beranda. Pada beranda terdapat pilihan
beli tiket, hapus tiket, cari tiket, dan display tiket. Pilihan menu beli tiket terdapat
pilihan lagi BST dan AVL untuk melakukan input.
if(menu2 == 1){
if(kursi == bus[kursi].kursi){
t.hapus(kursi);
cout << " Data penumpang telah
dihapus" << endl;
}
else{
cout << " DATA TIDAK
DITEMUKAN!" << endl;
}
}
else if(menu2 == 2){
if(kursi == bus[kursi].kursi){
l.hapus(kursi);
cout << " Data penumpang telah
dihapus" << endl;
}
else{
cout << " DATA TIDAK
DITEMUKAN!" << endl;
}
}
cout << endl;
goto salah;
}
else{
system("cls");
cout << "Format yang dimasukan salah!" <<
endl;
goto hapus;
}
}
Pada source code diatas merupakan pilihan menu hapus tiket. Pada menu hapus
terdapat pilihan hapus menggunakan BST dan AVL.
else if(main == 3){
cari:
cout <<
"============================================================"
<< endl;
cout << "|\t\t CARI TIKET BUS
|" << endl;
cout <<
"============================================================"
<< endl;
cout << "| 1. BST
|" << endl;
cout << "| 2. AVL
|" << endl;
cout <<
"============================================================"
<< endl;
cout << "Pilih (1/2) : "; cin >> menu2;
cin.ignore();
cout << endl;
if(menu2 == 1){
if(kursi == bus[kursi].kursi){
cout <<
"============================================================"
<< endl;
cout << " Nomor Kursi " <<
kursi << endl;
cout <<
"============================================================"
<< endl;
cout << " DATA PENUMPANG" <<
endl;
cout << " Nama Penumpang : "
<< bus[kursi].nama << endl;
cout << " Keberangkatan : "
<< bus[kursi].pembrangkatan << endl;
cout << " Tujuan : "
<< bus[kursi].tujuan << endl;
}else{
cout << " DATA TIDAK
DITEMUKAN!" << endl;
}
}
else if(menu2 == 2){
if(kursi == bus[kursi].kursi){
cout <<
"============================================================"
<< endl;
cout << " Nomor Kursi " <<
kursi << endl;
cout <<
"============================================================"
<< endl;
cout << " DATA PENUMPANG" <<
endl;
cout << " Nama Penumpang : "
<< bus[kursi].nama << endl;
cout << " Keberangkatan : "
<< bus[kursi].pembrangkatan << endl;
cout << " Tujuan : "
<< bus[kursi].tujuan << endl;
}else{
cout << " DATA TIDAK
DITEMUKAN!" << endl;
}
}
cout << endl;
goto salah;
}
else{
system("cls");
cout << "Format yang dimasukan
salah!" << endl;
goto cari;
}
}
Pada source code diatas merupakan pilihan menu cari tiket. Pada menu cari terdapat
pilihan cari menggunakan BST dan AVL.
if(menu2 == 1){
system("cls");
t.inorder();
goto salah;
}
else if(menu2 == 2){
system("cls");
l.inorder();
goto salah;
}
else{
system("cls");
cout << " Format yang dimasukan salah!"
<< endl;
}
}
else{
cout << "Format yang dimasukan salah!" << endl;
goto beranda;
}
return 0;
}
Pada source code diatas merupakan pilihan menu display tiket. Pada menu display
terdapat pilihan display menggunakan BST dan AVL.
IV. SCREENSHOTS PROGRAM
Gambar diatas merupakan menu utama dari program yang kami buat. Terdapat pilihan
beli tiket, hapus tiket, cari tiket, dan display tiket.
Gambar diatas merupakan pilihan beli tiket yang menggunakan BST untuk inputnya.
Gambar diatas merupakan input dengan menggunakan BST.
Gambar diatas merupakan pilihan beli tiket yang menggunakan AVL untuk inputnya.
Gambar diatas merupakan input dengan menggunakan AVL.
Node diatas merupakan data setelah diinputkan menggunakan BST. Data yang
dimasukan selalu terdapat pada sub-tree kanan karena BST memiliki prinsip
kanan lebih besar dari kiri.
● Adelson-Velski Landis (AVL) Tree
Tree pada AVL Tree dibentuk dengan nomor: 5, 10, 15, 20, 25. Untuk
langka-langkanya sebagai berikut: