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

                         A 2 B 3 ^ * F G - / + D H * +

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;

}

 

int main() {
    string infix, postfix = "";
    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

Popular posts from this blog

Tugas Pertemuan 6