Anda di halaman 1dari 33

UAS

STRUKTUR DATA DAN ALGORITMA

Dosen Pengampu :
Caesar Angga Perdana, S.kom. M.T
Disusun Oleh :
Dias Anugrah (202202110003)

Sistem Informasi
Universitas IPWIJA
2022
Nama : Dias Anugrah
NIM : 202202110003
Prodi : Sistem Informasi
UAS : Struktur data dan algoritma
1. C. String
2. E. Relas

3. A Boolean
4. B. Integer
5. E. r=12, s=21.
6. E. Homogen
7. C. Dua
8. C. Input nilai mahasiswa perkelas dan matakuliah
9. C. 20
10. D. 01B(H)

SOAL PRAKTIKUM
1. #include <iostream>
#include <vector>
using namespace std;

// Fungsi untuk mengecek apakah sebuah bilangan merupakan bilangan prima


bool isPrime(int num) {
if (num <= 1) {
return false;
}
for (int i = 2; i * i <= num; ++i) {
if (num % i == 0) {
return false;
}
}
return true;
}
double calculateAverage(const vector<int>& primes) {
int sum = 0;
for (int prime : primes) {
sum += prime;
}
return static_cast<double>(sum) / primes.size();
}
int main() {
int n;
cout << "Masukkan jumlah bilangan prima yang ingin diinput: ";
cin >> n;
vector<int> primeNumbers;
int num;
int count = 0;
cout << "Masukkan " << n << " bilangan prima: " << endl;
while (count < n) {
cin >> num;
if (isPrime(num)) {
primeNumbers.push_back(num);
count++;
} else {
cout << num << " bukan bilangan prima. Masukkan bilangan prima: " << endl;
}
}
double average = calculateAverage(primeNumbers);
cout << "Bilangan prima yang diinput: ";
for (int prime : primeNumbers) {
cout << prime << " ";
}
cout << endl;
cout << "Rata-rata bilangan prima: " << average << endl;
return 0;
}

Hasil
2. #include <iostream>
#include <vector>

using namespace std;

bool isPrime(int num) {


if (num <= 1) {
return false;
}

for (int i = 2; i * i <= num; ++i) {


if (num % i == 0) {
return false;
}
}

return true;
}

int main() {
vector<int> primes;
for (int i = 1; i <= 60; ++i) {
if (isPrime(i)) {
primes.push_back(i);
}
}

vector<int> otherArray = primes;


otherArray.push_back(67);
int searchValues[] = {23, 31, 67};
for (int value : searchValues) {
bool found = false;
for (int i = 0; i < otherArray.size(); ++i) {
if (otherArray[i] == value) {
cout << "Nilai " << value << " ditemukan pada posisi " << i << " dalam array." << endl;
found = true;
break;
}
}
if (!found) {
cout << "Nilai " << value << " tidak ditemukan dalam array." << endl;
}
}
return 0;
}

Hasil

3. #include <iostream>
#include <string>

using namespace std;

int main() {
string nim;
cout << "Masukkan NIM anda: ";
cin >> nim;
int sum = 0;
for (char digit : nim) {
if (isdigit(digit)) {
int num = digit - '0';
sum += num;
}
}
cout << "Penjumlahan dari angka-angka dalam NIM (" << nim << ") adalah: " << sum << endl;
return 0;
}

Hasil

4. Belum

5. #include <iostream>
#include <string>
#include <vector>

using namespace std;

struct Pegawai {
string nama;
int umur;
double gaji;
};

int main() {
vector<Pegawai> daftarPegawai;

for (int i = 0; i < 5; ++i) {


Pegawai pegawai;
cout << "Masukkan data pegawai ke-" << (i + 1) << ":" << endl;
cout << "Nama: ";
cin.ignore();
getline(cin, pegawai.nama);
cout << "Umur: ";
cin >> pegawai.umur;
cout << "Gaji: ";
cin >> pegawai.gaji;

daftarPegawai.push_back(pegawai);
}

double totalGaji = 0;
for (const Pegawai& pegawai : daftarPegawai) {
totalGaji += pegawai.gaji;
}

double rataRataGaji = totalGaji / daftarPegawai.size();

cout << "Rata-rata gaji dari " << daftarPegawai.size() << " pegawai adalah: " << rataRataGaji <<
endl;

return 0;
}

Hasil

6. #include <iostream>
#include <string>
#include <vector>
#include <unordered_map>

using namespace std;

struct Buku {
string judul;
string penulis;
int tahun_terbit;
};

int main() {
vector<Buku> daftarBuku;
unordered_map<int, vector<Buku>> kelompokBuku;

int n;
cout << "Masukkan jumlah buku: ";
cin >> n;
for (int i = 0; i < n; ++i) {
Buku buku;
cout << "Masukkan data buku ke-" << (i + 1) << ":" << endl;
cin.ignore();
cout << "Judul: ";
getline(cin, buku.judul);
cout << "Penulis: ";
getline(cin, buku.penulis);
cout << "Tahun Terbit: ";
cin >> buku.tahun_terbit;

daftarBuku.push_back(buku);
kelompokBuku[buku.tahun_terbit].push_back(buku);
}

cout << "\nDaftar buku berdasarkan tahun terbit:" << endl;


for (const auto& pair : kelompokBuku) {
int tahun_terbit = pair.first;
const vector<Buku>& kelompok = pair.second;

cout << "Tahun Terbit " << tahun_terbit << ":" << endl;
for (const Buku& buku : kelompok) {
cout << " Judul: " << buku.judul << ", Penulis: " << buku.penulis << endl;
}
}

return 0;
}

Hasil
7. #include <iostream>

using namespace std;

struct PersegiPanjang {
double panjang;
double lebar;

double hitungLuas() {
return panjang * lebar;
}

double hitungKeliling() {
return 2 * (panjang + lebar);
}
};

int main() {
PersegiPanjang pp;

cout << "Masukkan panjang persegi panjang: ";


cin >> pp.panjang;
cout << "Masukkan lebar persegi panjang: ";
cin >> pp.lebar;

double luas = pp.hitungLuas();


double keliling = pp.hitungKeliling();

cout << "Luas persegi panjang: " << luas << endl;
cout << "Keliling persegi panjang: " << keliling << endl;

return 0;
}

Hasil
8. #include <iostream>

using namespace std;

struct Waktu {
int jam;
int menit;
int detik;
};

Waktu tambahWaktu(const Waktu& waktu1, const Waktu& waktu2) {


Waktu hasil;
int totalDetik1 = waktu1.jam * 3600 + waktu1.menit * 60 + waktu1.detik;
int totalDetik2 = waktu2.jam * 3600 + waktu2.menit * 60 + waktu2.detik;
int totalDetikHasil = totalDetik1 + totalDetik2;

hasil.jam = totalDetikHasil / 3600;


hasil.menit = (totalDetikHasil % 3600) / 60;
hasil.detik = totalDetikHasil % 60;

return hasil;
}

int main() {
Waktu waktu1, waktu2;

cout << "Masukkan waktu pertama:" << endl;


cout << "Jam: ";
cin >> waktu1.jam;
cout << "Menit: ";
cin >> waktu1.menit;
cout << "Detik: ";
cin >> waktu1.detik;

cout << "Masukkan waktu kedua:" << endl;


cout << "Jam: ";
cin >> waktu2.jam;
cout << "Menit: ";
cin >> waktu2.menit;
cout << "Detik: ";
cin >> waktu2.detik;

Waktu hasil = tambahWaktu(waktu1, waktu2);

cout << "\nHasil penambahan waktu:" << endl;


cout << "Jam: " << hasil.jam << endl;
cout << "Menit: " << hasil.menit << endl;
cout << "Detik: " << hasil.detik << endl;

return 0;
}
Hasil

9. #include <iostream>

using namespace std;

int main() {
int size;

cout << "Masukkan ukuran array: ";


cin >> size;

int* array = new int[size];

cout << "Masukkan " << size << " nilai integer: " << endl;
for (int i = 0; i < size; ++i) {
cin >> array[i];
}

cout << "\nIsi array: ";


for (int i = 0; i < size; ++i) {
cout << array[i] << " ";
}
cout << endl;

delete[] array;

return 0;
}
Hasil

10. #include <iostream>


#include <string>

using namespace std;

struct Node {
string merek;
Node* next;

Node(const string& m) : merek(m), next(nullptr) {}


};

void tambahMerek(Node*& head, const string& merekBaru) {


Node* newNode = new Node(merekBaru);

if (head == nullptr) {
head = newNode;
} else {
Node* temp = head;
while (temp->next != nullptr) {
temp = temp->next;
}
temp->next = newNode;
}
}

void hapusMerek(Node*& head, const string& namaMerek) {


Node* current = head;
Node* prev = nullptr;

while (current != nullptr) {


if (current->merek == namaMerek) {
if (prev == nullptr) {
head = current->next;
} else {
prev->next = current->next;
}
delete current;
return;
}

prev = current;
current = current->next;
}
cout << "Merek " << namaMerek << " tidak ditemukan dalam linked list." << endl;
}

void tampilkanDaftarMerek(Node* head) {


cout << "Daftar merek kendaraan beroda empat:" << endl;
Node* current = head;
while (current != nullptr) {
cout << current->merek << endl;
current = current->next;
}
}

void hapusLinkedList(Node*& head) {


Node* current = head;
while (current != nullptr) {
Node* temp = current;
current = current->next;
delete temp;
}
head = nullptr;
}

int main() {
Node* head = nullptr;

tambahMerek(head, "Toyota");
tambahMerek(head, "Honda");
tambahMerek(head, "Suzuki");
tambahMerek(head, "Nissan");
tambahMerek(head, "Mitsubishi");

tampilkanDaftarMerek(head);

string merekDihapus;
cout << "\nMasukkan nama merek kendaraan beroda empat yang ingin dihapus: ";
cin >> merekDihapus;
hapusMerek(head, merekDihapus);

tampilkanDaftarMerek(head);

hapusLinkedList(head);

return 0;
}

Hasil
11. #include <iostream>
#include <string>
using namespace std;

struct Buku {
string penulis;
int tahun_terbit;
Buku* next;
};

void tampilkanMenu() {
cout << "================================================" << endl;
cout << "Nama : Dias Anugrah" << endl;
cout << "NIM : 202202110003" << endl;
cout << "================================================" << endl;
cout << "================================================" << endl;
cout << "======= TOKO BUKU WAWAN LANGIT SOLUSI ========" << endl;
cout << "================================================" << endl;
cout << "Pilih Menu:" << endl;
cout << "1. Insert Depan" << endl;
cout << "2. Insert Belakang" << endl;
cout << "3. Delete Depan" << endl;
cout << "4. Delete Belakang" << endl;
cout << "5. Tampilkan Data" << endl;
cout << "6. Clear" << endl;
cout << "7. Exit" << endl;
cout << "================================================" << endl;
}

void insertDepan(Buku*& head, string penulis, int tahun_terbit) {


Buku* newBuku = new Buku;
newBuku->penulis = penulis;
newBuku->tahun_terbit = tahun_terbit;
newBuku->next = head;
head = newBuku;
}

void insertBelakang(Buku*& head, string penulis, int tahun_terbit) {


Buku* newBuku = new Buku;
newBuku->penulis = penulis;
newBuku->tahun_terbit = tahun_terbit;
newBuku->next = nullptr;

if (head == nullptr) {
head = newBuku;
} else {
Buku* temp = head;
while (temp->next != nullptr) {
temp = temp->next;
}
temp->next = newBuku;
}
}

void deleteDepan(Buku*& head) {


if (head == nullptr) {
cout << "Linked list kosong." << endl;
} else {
Buku* temp = head;
head = head->next;
delete temp;
cout << "Buku di depan berhasil dihapus." << endl;
}
}

void deleteBelakang(Buku*& head) {


if (head == nullptr) {
cout << "Linked list kosong." << endl;
} else if (head->next == nullptr) {
delete head;
head = nullptr;
cout << "Buku terakhir berhasil dihapus." << endl;
} else {
Buku* temp = head;
while (temp->next->next != nullptr) {
temp = temp->next;
}
delete temp->next;
temp->next = nullptr;
cout << "Buku di belakang berhasil dihapus." << endl;
}
}

void tampilkanData(Buku* head) {


if (head == nullptr) {
cout << "Linked list kosong." << endl;
} else {
cout << "Data buku:" << endl;
Buku* temp = head;
while (temp != nullptr) {
cout << "Penulis: " << temp->penulis << ", Tahun Terbit: " << temp->tahun_terbit << endl;
temp = temp->next;
}
}
}
void clearData(Buku*& head) {
Buku* temp;
while (head != nullptr) {
temp = head;
head = head->next;
delete temp;
}
cout << "Linked list berhasil dikosongkan." << endl;
}

int main() {
Buku* head = nullptr;
int pilihan;
string penulis;
int tahun_terbit;

do {
tampilkanMenu();
cout << "Pilih: ";
cin >> pilihan;

switch (pilihan) {
case 1:
cout << "Masukkan Penulis Buku: ";
cin.ignore();
getline(cin, penulis);
cout << "Masukkan Tahun Terbit Buku: ";
cin >> tahun_terbit;
insertDepan(head, penulis, tahun_terbit);
break;
case 2:
cout << "Masukkan Penulis Buku: ";
cin.ignore();
getline(cin, penulis);
cout << "Masukkan Tahun Terbit Buku: ";
cin >> tahun_terbit;
insertBelakang(head, penulis, tahun_terbit);
break;
case 3:
deleteDepan(head);
break;
case 4:
deleteBelakang(head);
break;
case 5:
tampilkanData(head);
break;
case 6:
clearData(head);
break;
case 7:
cout << "Terima kasih!" << endl;
break;
default:
cout << "Pilihan tidak valid." << endl;
}

} while (pilihan != 7);

return 0;
}

Hasil 1

Hasil 2

Hasil 3

Hasil 4
Hasil 5

Hasil 6

Hasil 7

12. #include <iostream>


#include <string>
using namespace std;

struct Buku {
string penulis;
int tahun_terbit;
Buku* next;
};

void tampilkanMenu() {
cout << "================================================" << endl;
cout << "Nama : Dias Anugrah " << endl;
cout << "NIM : 202202110003" << endl;
cout << "================================================" << endl;
cout << "================================================" << endl;
cout << "======= TOKO BUKU WAWAN LANGIT SOLUSI ========" << endl;
cout << "================================================" << endl;
cout << "Pilih Menu:" << endl;
cout << "1. Insert Depan" << endl;
cout << "2. Insert Belakang" << endl;
cout << "3. Delete Depan" << endl;
cout << "4. Delete Belakang" << endl;
cout << "5. Tampilkan Data" << endl;
cout << "6. Clear" << endl;
cout << "7. Exit" << endl;
cout << "8. Insert Tengah" << endl;
cout << "9. Hapus Tengah" << endl;
cout << "10. Pindah ke Berikutnya/Sebelumnya" << endl;
cout << "================================================" << endl;
}

void insertDepan(Buku*& head, string penulis, int tahun_terbit) {


Buku* newBuku = new Buku;
newBuku->penulis = penulis;
newBuku->tahun_terbit = tahun_terbit;
newBuku->next = head;
head = newBuku;
}

void insertBelakang(Buku*& head, string penulis, int tahun_terbit) {


Buku* newBuku = new Buku;
newBuku->penulis = penulis;
newBuku->tahun_terbit = tahun_terbit;
newBuku->next = nullptr;

if (head == nullptr) {
head = newBuku;
} else {
Buku* temp = head;
while (temp->next != nullptr) {
temp = temp->next;
}
temp->next = newBuku;
}
}

void deleteDepan(Buku*& head) {


if (head == nullptr) {
cout << "Linked list kosong." << endl;
} else {
Buku* temp = head;
head = head->next;
delete temp;
cout << "Buku di depan berhasil dihapus." << endl;
}
}

void deleteBelakang(Buku*& head) {


if (head == nullptr) {
cout << "Linked list kosong." << endl;
} else if (head->next == nullptr) {
delete head;
head = nullptr;
cout << "Buku terakhir berhasil dihapus." << endl;
} else {
Buku* temp = head;
while (temp->next->next != nullptr) {
temp = temp->next;
}
delete temp->next;
temp->next = nullptr;
cout << "Buku di belakang berhasil dihapus." << endl;
}
}

void tampilkanData(Buku* head) {


if (head == nullptr) {
cout << "Linked list kosong." << endl;
} else {
cout << "Data buku:" << endl;
Buku* temp = head;
while (temp != nullptr) {
cout << "Penulis: " << temp->penulis << ", Tahun Terbit: " << temp->tahun_terbit << endl;
temp = temp->next;
}
}
}

void clearData(Buku*& head) {


Buku* temp;
while (head != nullptr) {
temp = head;
head = head->next;
delete temp;
}
cout << "Linked list berhasil dikosongkan." << endl;
}

void insertTengah(Buku*& head, int posisi, string penulis, int tahun_terbit) {


Buku* newBuku = new Buku;
newBuku->penulis = penulis;
newBuku->tahun_terbit = tahun_terbit;

if (posisi <= 0) {
newBuku->next = head;
head = newBuku;
} else {
Buku* temp = head;
int currentPos = 0;
while (temp != nullptr && currentPos < posisi - 1) {
temp = temp->next;
currentPos++;
}
if (temp != nullptr) {
newBuku->next = temp->next;
temp->next = newBuku;
} else {
insertBelakang(head, penulis, tahun_terbit);
}
}
}

void hapusTengah(Buku*& head, int posisi) {


if (head == nullptr) {
cout << "Linked list kosong." << endl;
} else {
if (posisi <= 0) {
deleteDepan(head);
} else {
Buku* temp = head;
int currentPos = 0;
while (temp != nullptr && currentPos < posisi - 1) {
temp = temp->next;
currentPos++;
}
if (temp == nullptr || temp->next == nullptr) {
cout << "Posisi tidak valid." << endl;
} else {
Buku* toDelete = temp->next;
temp->next = toDelete->next;
delete toDelete;
cout << "Buku di tengah berhasil dihapus." << endl;
}
}
}
}

Buku* pindahKeBerikutnya(Buku* current) {


if (current != nullptr) {
return current->next;
} else {
return nullptr;
}
}

Buku* pindahKeSebelumnya(Buku* head, Buku* current) {


if (head == nullptr || current == head) {
return nullptr;
} else {
Buku* temp = head;
while (temp != nullptr && temp->next != current) {
temp = temp->next;
}
return temp;
}
}

int main() {
Buku* head = nullptr;
int pilihan;
string penulis;
int tahun_terbit;

do {
tampilkanMenu();
cout << "Pilih: ";
cin >> pilihan;

switch (pilihan) {
case 1:
cout << "Masukkan Penulis Buku: ";
cin.ignore();
getline(cin, penulis);
cout << "Masukkan Tahun Terbit Buku: ";
cin >> tahun_terbit;
insertDepan(head, penulis, tahun_terbit);
break;
case 2:
cout << "Masukkan Penulis Buku: ";
cin.ignore();
getline(cin, penulis);
cout << "Masukkan Tahun Terbit Buku: ";
cin >> tahun_terbit;
insertBelakang(head, penulis, tahun_terbit);
break;
case 3:
deleteDepan(head);
break;
case 4:
deleteBelakang(head);
break;
case 5:
tampilkanData(head);
break;
case 6:
clearData(head);
break;
case 7:
cout << "Terima kasih!" << endl;
break;
case 8:
cout << "Masukkan Penulis Buku: ";
cin.ignore();
getline(cin, penulis);
cout << "Masukkan Tahun Terbit Buku: ";
cin >> tahun_terbit;
int posisi;
cout << "Masukkan Posisi Tengah: ";
cin >> posisi;
insertTengah(head, posisi, penulis, tahun_terbit);
break;
case 9:
cout << "Masukkan Posisi Tengah yang akan dihapus: ";
cin >> posisi;
hapusTengah(head, posisi);
break;
case 10: {
int pindah;
cout << "Pindah ke berikutnya (1) atau sebelumnya (2)? ";
cin >> pindah;
Buku* current = (pindah == 1) ? pindahKeBerikutnya(head) : pindahKeSebelumnya(head,
head);
if (current != nullptr) {
cout << "Data Buku saat ini:" << endl;
cout << "Penulis: " << current->penulis << ", Tahun Terbit: " << current->tahun_terbit
<< endl;
} else {
cout << "Tidak ada data buku saat ini atau linked list kosong." << endl;
}
break;
}
default:
cout << "Pilihan tidak valid." << endl;
}

} while (pilihan != 7);

return 0;
}

Hasil 8

Hasil 9

Hasil 10
13. #include <iostream>
#include <string>
#include <stack>

using namespace std;

int getPriority(char op) {


if (op == '+' || op == '-')
return 1;
else if (op == '*' || op == '/')
return 2;
return 0;
}

string infixToPostfix(const string& infix) {


string postfix = "";
stack<char> opStack;

for (char c : infix) {

if (isalnum(c)) {
postfix += c;
}
else if (c == '+' || c == '-' || c == '*' || c == '/') {
while (!opStack.empty() && getPriority(opStack.top()) >= getPriority(c)) {
postfix += opStack.top();
opStack.pop();
}
opStack.push(c);
}

else if (c == '(') {
opStack.push(c);
}

else if (c == ')') {
while (!opStack.empty() && opStack.top() != '(') {
postfix += opStack.top();
opStack.pop();
}
opStack.pop();
}
}

while (!opStack.empty()) {
postfix += opStack.top();
opStack.pop();
}

return postfix;
}

int main() {
string infix;
cout << "Masukkan ekspresi matematika dalam notasi infix: ";
getline(cin, infix);

string postfix = infixToPostfix(infix);


cout << "Ekspresi dalam notasi postfix: " << postfix << endl;

return 0;
}

Hasil

14. #include <iostream>


#include <string>
#include <stack>
#include <cmath>

using namespace std;

double evaluatePostfix(const string& postfix) {


stack<double> operandStack;

for (char c : postfix) {

if (isdigit(c)) {
operandStack.push(c - '0');
}

else if (c == '+' || c == '-' || c == '*' || c == '/') {


double operand2 = operandStack.top();
operandStack.pop();
double operand1 = operandStack.top();
operandStack.pop();

switch (c) {
case '+':
operandStack.push(operand1 + operand2);
break;
case '-':
operandStack.push(operand1 - operand2);
break;
case '*':
operandStack.push(operand1 * operand2);
break;
case '/':
operandStack.push(operand1 / operand2);
break;
}
}
}

return operandStack.top();
}

int main() {
string postfix;
cout << "Masukkan ekspresi matematika dalam notasi postfix: ";
getline(cin, postfix);

double result = evaluatePostfix(postfix);


cout << "Hasil evaluasi ekspresi: " << result << endl;

return 0;
}

Hasil

15. #include <iostream>


#include <queue>

using namespace std;

void tampilkanElemen(queue<int> antrian) {


if (antrian.empty()) {
cout << "Antrian kosong." << endl;
} else {
cout << "Elemen pertama dari antrian: " << antrian.front() << endl;
cout << "Elemen terakhir dari antrian: " << antrian.back() << endl;
}
}

int main() {
queue<int> antrian;

antrian.push(10);
antrian.push(20);
antrian.push(30);

tampilkanElemen(antrian);

antrian.pop();

tampilkanElemen(antrian);

return 0;
}

Hasil

16. #include <iostream>


#include <queue>

using namespace std;

void tampilkanAntrian(queue<int> antrian) {


while (!antrian.empty()) {
cout << antrian.front() << " ";
antrian.pop();
}
cout << endl;
}

int main() {
queue<int> antrian1, antrian2;
int n1, n2;

cout << "Masukkan jumlah elemen untuk antrian 1: ";


cin >> n1;
cout << "Masukkan elemen untuk antrian 1: ";
for (int i = 0; i < n1; ++i) {
int elemen;
cin >> elemen;
antrian1.push(elemen);
}

cout << "Masukkan jumlah elemen untuk antrian 2: ";


cin >> n2;
cout << "Masukkan elemen untuk antrian 2: ";
for (int i = 0; i < n2; ++i) {
int elemen;
cin >> elemen;
antrian2.push(elemen);
}

queue<int> antrianGabungan = antrian1;


while (!antrian2.empty()) {
antrianGabungan.push(antrian2.front());
antrian2.pop();
}

cout << "Isi antrian gabungan: ";


tampilkanAntrian(antrianGabungan);

return 0;
}

Hasil

17. #include <iostream>

using namespace std;

struct Node {
int data;
Node* next;

Node(int value) : data(value), next(nullptr) {}


};
class Queue {
private:
Node* front;
Node* rear;

public:
Queue() : front(nullptr), rear(nullptr) {}

void enqueue(int value) {


Node* newNode = new Node(value);

if (rear == nullptr) {
front = rear = newNode;
} else {
rear->next = newNode;
rear = newNode;
}
}

void dequeue() {
if (front == nullptr) {
cout << "Antrian kosong." << endl;
return;
}

Node* temp = front;


front = front->next;
delete temp;

if (front == nullptr) {
rear = nullptr;
}
}

void display() {
if (front == nullptr) {
cout << "Antrian kosong." << endl;
return;
}

cout << "Isi antrian: ";


Node* current = front;
while (current != nullptr) {
cout << current->data << " ";
current = current->next;
}
cout << endl;
}
};

int main() {
Queue antrian;

antrian.enqueue(10);
antrian.enqueue(20);
antrian.enqueue(30);

antrian.display();

antrian.dequeue();

antrian.display();

return 0;
}
Hasil

18. BELUM
19. BELUM

20. Postorder = BADELOUTNIC

#include <iostream>
using namespace std;

class TreeNode {
public:
char data;
TreeNode* left;
TreeNode* right;

TreeNode(char val) {
data = val;
left = nullptr;
right = nullptr;
}
};

int findRootIndex(string inorder, int start, int end, char rootData) {


for (int i = start; i <= end; i++) {
if (inorder[i] == rootData) {
return i;
}
}
return -1;
}

TreeNode* buildTreeFromInorderAndPostorder(string inorder, int inStart, int inEnd,


string postorder, int postStart, int postEnd) {
if (inStart > inEnd || postStart > postEnd) {
return nullptr;
}

char rootData = postorder[postEnd];


TreeNode* root = new TreeNode(rootData);

int rootIndexInorder = findRootIndex(inorder, inStart, inEnd, rootData);


int leftSubtreeSize = rootIndexInorder - inStart;

root->left = buildTreeFromInorderAndPostorder(inorder, inStart, rootIndexInorder - 1,


postorder, postStart, postStart + leftSubtreeSize - 1);
root->right = buildTreeFromInorderAndPostorder(inorder, rootIndexInorder + 1, inEnd,
postorder, postStart + leftSubtreeSize, postEnd - 1);

return root;
}

void postorderTraversal(TreeNode* root) {


if (root) {
postorderTraversal(root->left);
postorderTraversal(root->right);
cout << root->data << " ";
}
}

int main() {
string inorder = "ABCDEILNOTU";
string postorder = "BADELOUTNIC";

TreeNode* root = buildTreeFromInorderAndPostorder(inorder, 0, inorder.length() - 1,


postorder, 0, postorder.length() - 1);

cout << "Postorder Traversal: ";


postorderTraversal(root);

return 0;
}

Hasil
Inourder = ABCDEILNOTU
#include <iostream>
using namespace std;

class TreeNode {
public:
char data;
TreeNode* left;
TreeNode* right;

TreeNode(char val) {
data = val;
left = nullptr;
right = nullptr;
}
};

int findRootIndex(string inorder, int start, int end, char rootData) {


for (int i = start; i <= end; i++) {
if (inorder[i] == rootData) {
return i;
}
}
return -1;
}

TreeNode* buildTreeFromInorder(string inorder, int inStart, int inEnd) {


if (inStart > inEnd) {
return nullptr;
}

int mid = (inStart + inEnd) / 2;


TreeNode* root = new TreeNode(inorder[mid]);

root->left = buildTreeFromInorder(inorder, inStart, mid - 1);


root->right = buildTreeFromInorder(inorder, mid + 1, inEnd);

return root;
}

void postorderTraversal(TreeNode* root) {


if (root) {
postorderTraversal(root->left);
postorderTraversal(root->right);
cout << root->data << " ";
}
}

int main() {
string inorder = "ABCDEILNOTU";

TreeNode* root = buildTreeFromInorder(inorder, 0, inorder.length() - 1);


cout << "Postorder Traversal: ";
postorderTraversal(root);

return 0;
}

Anda mungkin juga menyukai