ETS Genap - Rinaltra Nabasa Simanungkalit
Nama: Rinaltra Nabasa Simanungkalit
NRP : 5025251024
Kelas Struktur Data (D)
1. Jelaskan struktur data Array. Digunakan untuk apa Array, Berikan contoh penggunaannya dalam aplikasi.
a. Struktur data Array Adalah struktur data yang dipakai untuk menyimpan banyak nilai dengan tipe data yang sama dalam 1 Variabel. Array juga dapat diatur banyaknya data yang memiliki tipe data yang sama. Setiap Nilai dari Array ditandai dengan index tertentu, dan semua data pertama di array tersebut akan mendapatkan array index 0
b. Array digunakan untuk menyimpan nilai dengan tipe data yang sama dengan jumlah elemen atau nilai yang sudah ditentukan. Array juga memungkinkan kita untuk mengambil data dialam array itu secara acak.
c. Contoh penggunaan Array dalam sebuah aplikasi Adalah
i. Sistem Data Management.
Dalam Sistem manajemen data, kebanyakan aplikasi menggunakan array untuk menampilkan daftar informasi dengan tipe data yang serupa yaitu array of character.
2. Diketahui Stack berupa Linked List dengan kondisi mula-mula Stack kosong.
Gambarkan Stack berupa Double Linked List tersebut beserta posisi penunjuknya
(pointer), jika ada perintah
a. Push(Top,60), Push(Top,40), Pop(Top,Item)
b. Push(Top,25), Pop(Top,Item), Pop(Top,Item)
c. Pop(Top,Item), Pop(Top,Item), Push(Top,50)
Jawab
a. Push(Top,60) : NULL < = > 60 < = > NULL | Top berada di 60
Push(Top,40) : NULL < = > 40 < = > 60 < = > NULL | Top berada di 40
Pop(Top,Item) : NULL < = > 60 < = > NULL | Top berada di 60
b. Push(Top,25) : NULL < = > 25 < = > NULL | Top berada di 25
Pop(Top,Item) : NULL | Tidak Ada Data
Pop(Top,Item) : NULL | Tidak Ada Data
c. Pop(Top,Item) : NULL | Tidak ada Data
Pop(Top,Item) : NULL | Tidak Ada Data
Push(Top,50) : NULL < = > 50 < = > NULL | Top berada di 50
1. Diketauhui Ekspresi berikut E = a + (2*b^3)/(f − g) + d*h
a. Ubahlah ke dalam notasi Postfix
b. Implementasikan menggunakan Stack dan buat screenshot eksekusinya.
Jawab
a. Ubahlah ke dalam notasi Postfix
b. Implementasikan menggunakan Stack dan buat screenshot eksekusinya.
Kode Stack diatas
#include <bits/stdc++.h>
using namespace
std;
int getPrecedence(char op)
{
if (op
== '^') return 3;
if (op
== '*' || op == '/') return 2;
if (op
== '+' || op == '-') return 1;
return
0;
}
stack<char> st;
cout << "Masukkan ekspresi infix: ";
getline(cin, infix);
cout << "\n" << left << setw(10) << "Symbol"
<< setw(25) << "Postfix String" << "Stack" << endl;
cout << string(55, '-') << endl;
for (char c : infix) {
if (c == ' ') continue;
if (isalnum(c)) {
postfix += c;
}
else if (c == '(') {
st.push(c);
}
else if (c == ')') {
while (!st.empty() && st.top() != '(') {
postfix += st.top();
st.pop();
}
if (!st.empty()) st.pop();
}
else {
while (!st.empty() && st.top() != '('
&& getPrecedence(st.top()) >= getPrecedence(c)) {
postfix += st.top();
st.pop();
}
st.push(c);
}
string currentStack = "";
stack<char> temp = st;
while (!temp.empty()) {
currentStack = temp.top() + currentStack;
temp.pop();
}
cout << left << setw(10) << c << setw(25) << postfix << currentStack << endl;
}
while (!st.empty()) {
if(st.top() != '(') postfix += st.top();
st.pop();
}
cout << string(55, '-') << endl;
cout << "Hasil Postfix : " << postfix << endl;
return 0;
}
Diketahui maksimum Queue = 9 elemen dengan kondisi mula-mula Queue kosong.
Gambarkan Queue beserta posisi Front dan Rear, jika ada perintah :
a. Tambah Angka 19
b. Tambah Angka 7
c. Hapus 2 Angka
d. Tambah Angka 40
e. Hapus 3 Angka
f. Tambah Angka 18
Kondisi Awal
- Perintah: -
(Awal)
- Visualisasi
Antrian [0...8]: [ , , , , , , , , ]
- Front: -1
- Rear: -1
- Keterangan:
Antrian kosong.
Langkah a
- Perintah:
Tambah 19
- Visualisasi
Antrian [0...8]: [19, , , , , , , , ]
- Front: 0
- Rear: 0
- Keterangan:
Elemen masuk, Front dan Rear menunjuk di Index 0.
Langkah b
- Perintah:
Tambah 7
- Visualisasi
Antrian [0...8]: [19, 7, , , , , , , ]
- Front: 0
- Rear: 1
- Keterangan: Rear
bergeser ke Index 1.
Langkah c
- Perintah: Hapus
2 Angka
- Visualisasi
Antrian [0...8]: [ , , , , , , , , ]
- Front: -1
- Rear: -1
- Keterangan: Semua
elemen habis dihapus (angka 19 dan 7 keluar), index Front dan Rear
kembali menjadi -1.
Langkah d
- Perintah:
Tambah 40
- Visualisasi
Antrian [0...8]: [40, , , , , , , , ]
- Front: 0
- Rear: 0
- Keterangan:
Elemen masuk, Front dan Rear menunjuk di Index 0.
Langkah e
- Perintah: Hapus
3 Angka
- Visualisasi
Antrian [0...8]: [ , , , , , , , , ]
- Front: -1
- Rear: -1
- Keterangan: Angka
40 berhasil dihapus. Karena isi antrian sudah kosong, 2 operasi hapus
lainnya gagal (Underflow).
Langkah f
- Perintah:
Tambah 18
- Visualisasi
Antrian [0...8]: [18, , , , , , , , ]
- Front: 0
- Rear: 0
- Keterangan:
Elemen masuk, Front dan Rear menunjuk di Index 0.
Studi Kasus: Antrian Layanan Akademik
Deskripsi Masalah
Di sebuah kampus, mahasiswa sering datang ke bagian layanan akademik (misalnya untuk
KRS, surat aktif kuliah, atau konsultasi administrasi). Untuk menjaga keteraturan, sistem
menggunakan antrian (queue) dengan prinsip:
FIFO (First In First Out) → yang datang lebih dulu, dilayani lebih dulu.
Sebuah sistem akademik memiliki fitur:
1. Mahasiswa mengambil nomor antrian.
2. Petugas melayani mahasiswa berdasarkan urutan.
3. Sistem dapat menampilkan antrian saat ini.
4. Sistem dapat mengecek siapa yang sedang dilayani.
5. Enqueue → Mahasiswa mengambil nomor
6. Dequeue → Mahasiswa dipanggil
7. Front → Mahasiswa yang sedang dilayani
8. Rear → Mahasiswa terakhir dalam antrian
Pertanyaan
1. Jelaskan Bagaimana Struktur data Queue digunakan dalam sistem ini
Jawab
Dalam sistem ini, FIFO diterapkan karena seperti apa yang sudah dipelajari di kelas, Queue menggunakan sistem FIFO, Sistem ini menjamin bahwa mahasiswa yang datang pertama akan dilayani terlebih dahulu baru mahasiswa di belakangnya.
2. Algoritma Menambahkan Mahasiswa (Enqueue) dan Melayani Mahasiswa (Dequeue)
Jawab
Enqueue
1. Cek Kapasitas, apakah antrian sudah penuh (untuk sistem yang dibatasi jumlah elemennya)
2. Apabila penuh, Maka program tidak akan memasukkan dan menerima mahasiswa baru
3. Apabila kosong, maka Front and rear akan menjadi -1, dan memasukkan data
4. Setiap data yang masuk, front = 0 dan rear akan melakukan rear = rear + 1
5. Input data yang masuk
Dequeue
1. Cek kekosongan, apabila kosong atau front = -1, program tidak akan melakukan apa-apa
2. Mengambil data di paling depan untuk di layani , lalu data akan dikeluarkan
3. - apabila mahasiswa yang dilayani adalah front == rear, maka front dan rear menjadi -1
- jika ada mahasiswa lain, maka front dinaikkan 1 atau front = front + 1
Program C++
#include <iostream>
#include <string>
#include <queue>
using namespace std;
int main() {
queue<string>
antrian;
string perintah;
while (true) {
cout << "\nMasukkan
Perintah: ";
cin >> perintah;
if (perintah == "TAMBAH")
{
string nama;
cin >> nama;
antrian.push(nama);
cout << "Mahasiswa
" << nama << " masuk antrian. [Enqueue]" << endl;
}
else if (perintah == "LAYANI")
{
if (!antrian.empty()) {
cout << "Melayani
mahasiswa: " << antrian.front() << " [Dequeue]" <<
endl;
antrian.pop();
} else {
cout << "Antrian
kosong!" << endl;
}
}
else if (perintah == "STATUS")
{
cout << "--- Status
Antrian ---" << endl;
if (antrian.empty()) {
cout << "Kosong" <<
endl;
} else {
cout << "Front: " <<
antrian.front() << endl;
cout << "Rear : " <<
antrian.back() << endl;
cout << "Total: " <<
antrian.size() << " orang" << endl;
}
cout << "----------------------"
<< endl;
}
else if (perintah == "KELUAR")
{
break;
}
else {
cout << "Perintah salah!
Gunakan TAMBAH, LAYANI, atau STATUS." << endl;
}
}
return 0;
}
ScreenShot
Comments
Post a Comment