Evaluasi Tengah Semester - Struktur Data

 

Evaluasi Tengah Semester - Struktur Data

Nama: Elba Galuh H.
NRP: 5025251025


1. Jelaskan struktur data Array. Digunakan untuk apa Array, serta berikan contoh penggunaannya dalam aplikasi.

Pengertian Array

Array adalah struktur data yang digunakan untuk menyimpan sekumpulan elemen dengan tipe data yang sama dalam satu variabel. Data dalam array disimpan secara berurutan dan dapat diakses menggunakan indeks.

Kegunaan Array

  • Menyimpan banyak data dengan tipe yang sama
  • Mempermudah pengolahan data
  • Akses data secara cepat menggunakan indeks

Contoh Penggunaan

  • Menyimpan nilai siswa
  • Mencatat data suhu harian
  • Matriks dalam perhitungan matematika

2. Diketahui Stack berupa Linked List dengan kondisi mula-mula Stack kosong. Gambarkan Stack berupa Double Linked List tersebut beserta posisi penunjuknya (pointer).

a. Push(Top,60), Push(Top,40), Pop(Top,Item)

Push(Top,60)

Top

[ X | 60 | X ]

Push(Top,40)

Top

[ X | 40 | • ] ⇄ [ • | 60 | X ]

Pop(Top,Item) → hapus 40

Top

[ X | 60 | X ]

b. Push(Top,25), Pop(Top,Item), Pop(Top,Item)

Push(Top,25)

Top

[ X | 25 | • ] ⇄ [ • | 60 | X ]

Pop(Top,Item) → hapus 25

Top
 
[ X | 60 | X ]

Pop(Top,Item) → hapus 60

Top → NULL
(Stack kosong)

c. Pop(Top,Item), Pop(Top,Item), Push(Top,50)

Pop(Top,Item)

Top → NULL
(Underflow)

Pop(Top,Item) 

Top → NULL
(Underflow)

Push(Top,50)

Top

[ X | 50 | X ]

3. Diketahui Ekspresi berikut E = a + (2·b³)/(f − g) + d·h

  • Ubahlah ke dalam notasi Postfix
  • Implementasikan menggunakan Stack dan buat screenshot eksekusinya.

Konversi Infix ke Postfix

  1. (2·b³) → 2 b 3 ^ ∗
  2. (f − g) → f g −
  3. (2·b³)/(f − g) → 2 b 3 ^ ∗ f g − /
  4. a + (2·b³)/(f − g) → a 2 b 3 ^ ∗ f g − / +
  5. (d·h) → d h ∗
  6. a + (2·b³)/(f − g) + d·h → a 2 b 3 ^ ∗ f g − / + d h ∗ +


Implementasi Stack

Code:

#include <iostream>
#include <stack>
#include <string>
using namespace std;

int precedence(char op) {
if(op == '+' || op == '-') return 1;
if(op == '*' || op == '/') return 2;
if(op == '^') return 3;
return 0;
}

string infixToPostfix(string s) {
stack<char> st;
string result;

for(char c : s) {
if(isalnum(c)) result += c;
else if(c == '(') st.push('(');
else if(c == ')') {
while(st.top() != '(') {
result += st.top();
st.pop();
}
st.pop();
} else {
while(!st.empty() && precedence(st.top()) >= precedence(c)) {
result += st.top();
st.pop();
}
st.push(c);
}
}

while(!st.empty()) {
result += st.top();
st.pop();
}

return result;
}

int main() {
string expr = "a+(2*b^3)/(f-g)+d*h";
cout << "Infix: " << expr << endl;
cout << "Postfix: " << infixToPostfix(expr) << endl;
return 0;
}

Output:

Source Code: Konversi Infix Ke Postfix



4. Diketahui maksimum Queue = 9 elemen dengan kondisi mula-mula Queue kosong. Gambarkan Queue beserta posisi Front dan Rear.


a. Tambah Angka 19

Front

[ 19 ]

Rear

b. Tambah Angka 7

Front

[ 19 ] → [ 7 ]

Rear

c. Hapus 2 Angka

Hapus 19

Front

[ 7 ]

Rear
Hapus 7

Front → NULL
Rear → NULL
(Queue kosong)

d. Tambah Angka 40

Front

[ 40 ]

Rear

e. Hapus 3 Angka

Hapus 40

Front → NULL
Rear → NULL
(Queue kosong)
Hapus → kosong
Hapus → kosong

f. Tambah Angka 18

Front

[ 18 ]

Rear

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.
  2. Buat algoritma untuk:
    o Menambahkan mahasiswa ke antrian (enqueue)
    o Melayani mahasiswa (dequeue)
  3. Implementasikan program sederhana menggunakan bahasa pemrograman (misalnya C++).
  4. Simulasikan proses:
    o Mahasiswa A, B, C masuk antrian
    o Mahasiswa pertama dilayani
    o Tambah mahasiswa D
    o Tampilkan kondisi antrian

Jawaban

1. Struktur Data Queue

Struktur data queue digunakan dalam sistem ini untuk mengatur antrian mahasiswa secara teratur berdasarkan prinsip FIFO (First In First Out), yaitu mahasiswa yang datang lebih dulu akan dilayani lebih dulu.

Dalam sistem ini:

  • Saat mahasiswa mengambil nomor antrian → dilakukan operasi enqueue (masuk ke belakang antrian)
  • Saat mahasiswa dipanggil oleh petugas → dilakukan operasi dequeue (keluar dari depan antrian)
  • Front menunjukkan mahasiswa yang sedang dilayani
  • Rear menunjukkan mahasiswa terakhir dalam antrian

Dengan menggunakan queue, sistem menjadi lebih teratur, adil, dan efisien dalam melayani mahasiswa.


2. Algoritma Enqueue & Dequeue

Algoritma Menambah Mahasiswa (Enqueue)

Periksa apakah antrean sudah penuh (IsFull).
Jika penuh, tampilkan pesan bahwa antrean tidak dapat menerima mahasiswa lagi.
Jika kosong, set nilai Front dan Rear ke indeks 0.
Jika tidak kosong dan tidak penuh, naikkan posisi Rear (increment Rear).
Masukkan nama/data mahasiswa ke dalam antrean pada posisi Rear.


Algoritma Melayani Mahasiswa (Dequeue)

Periksa apakah antrean kosong (IsEmpty).
Jika kosong, tampilkan pesan bahwa tidak ada mahasiswa untuk dilayani.
Ambil/tampilkan data mahasiswa yang berada di posisi Front.
Geser posisi Front ke elemen berikutnya (increment Front).
Jika setelah digeser Front melampaui Rear, setel kembali Front dan Rear ke -1 (antrean kembali kosong).


3. Implementasi Program

Code :
#include <iostream>
using namespace std;

#define MAX 10

string queueArr[MAX];
int front = -1, rear = -1;

bool isFull() {
return rear == MAX - 1;
}

bool isEmpty() {
return front == -1 || front > rear;
}

void enqueue(string data) {
if (isFull()) {
cout << "Antrian penuh\n";
return;
}
if (isEmpty()) {
front = rear = 0;
} else {
rear++;
}
queueArr[rear] = data;
}

void dequeue() {
if (isEmpty()) {
cout << "Antrian kosong\n";
return;
}
cout << "Dilayani: " << queueArr[front] << endl;
front++;
if (front > rear) {
front = rear = -1;
}
}

void display() {
if (isEmpty()) {
cout << "Antrian kosong\n";
return;
}
for (int i = front; i <= rear; i++) {
cout << queueArr[i] << " ";
}
cout << endl;
}
void peekFront() {
if (isEmpty()) {
cout << "Tidak ada mahasiswa yang sedang dilayani\n";
} else {
cout << "Sedang dilayani: " << queueArr[front] << endl;
}
}

void peekRear() {
if (isEmpty()) {
cout << "Tidak ada antrian\n";
} else {
cout << "Mahasiswa terakhir: " << queueArr[rear] << endl;
}
}

int main() {
enqueue("A");
enqueue("B");
enqueue("C");
dequeue();
enqueue("D");
cout << "Antrian saat ini: ";
display();

return 0;
}

Output:

Source Code: Sistem Antrian Layanan Akademik



4. Simulasi Proses

Langkah 1: Mahasiswa A, B, C masuk antrian
[A, B, C]
Front = A
Rear = C

Langkah 2: Mahasiswa pertama dilayani
A keluar
[B, C]
Front = B
Rear = C

Langkah 3: Tambah mahasiswa D
[B, C, D]
Front = B
Rear = D

Langkah 4: Tampilkan kondisi antrian
B C D

Comments

Popular posts from this blog

Review C++