ETS Elanta

 Nama : Fakhrian Elanta

NRP : 5025251019


1.    1.  Penjelasan array Digunakan untuk apa Array, Berikan contoh penggunaanya dalam aplikasi .

Jawab :

Array adalah suatu tipe data yang dapat menyimpan beberapa nilai sekaligus, dan nilai tersebut disimpan oleh indikasi index yang dapat dipanggil untuk mengetahui nilai pada index tertentu.

Contoh penggunanaan pada aplikasi adalah menyimpan data user, daripada membuat variable baru lebih baik menggunakan array sehingga dapat mengakses seluruh data user daripada mencarinya satu-satu

2.   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 lagi

    Pop(Top, item) = NULL, karena sudah tidak ada data lagi

c. Pop(Top,Item) = NULL, tidak ada data di set

    Pop(Top,Item) = NULL, tidak ada data di set

    Push(Top,50) = Null ‹- 50 -› Null , top berada di 50


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

- Ubahlah ke dalam notasi Postfix

- Implementasikan menggunakan Stack dan buat screenshot eksekusinya.

Jawab : 

Notasi postfix dari soal : 

a 2 b 3 ^ * f g - / + d h * +

#include <iostream>
#include <stack>
#include <string>

using namespace std;


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


string infixKePostfix(string infix) {
    stack<char> s;
    string postfix = "";

    for (int i = 0; i < infix.length(); i++) {
        char c = infix[i];

       
        if (isalnum(c)) {
            postfix += c;
        }
        else if (c == '(') {
            s.push('(');
        }
        else if (c == ')') {
            while (!s.empty() && s.top() != '(') {
                postfix += s.top();
                s.pop();
            }
            if (!s.empty()) s.pop();
        }
        else {
            while (!s.empty() && prioritas(s.top()) >= prioritas(c)) {
                if (c == '^' && s.top() == '^') break;
                postfix += s.top();
                s.pop();
            }
            s.push(c);
        }
    }

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

    return postfix;
}

int main() {
    string ekspresi;
    cout << "Masukkan ekspresi Infix: ";
    cin >> ekspresi;

    string hasil = infixKePostfix(ekspresi);
    cout << "Notasi Postfix: " << hasil << endl;

    return 0;
}

Berikut penerapan program dan ss dari operasi yang dijalankan : 

    



4. 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


5. Soal studi kasus

1. Tipe data queue digunakan untuk menggunakan prinsip FIFO (first in first out) sehingga yang datang pertama dilayani pertama juga

Berikut merupakan penerapan untuk 2,3,4

#include <iostream>
#include <map>
#include <string>

using namespace std;

int urutan = 1;
map<string, int> mahasiswa;

struct Node {
    string data;
    Node* next;
};


struct Queue {
    Node *front = NULL;
    Node *rear = NULL;
};

void EnQueue(Queue &q, string isi) {
    Node* newNode = new Node();
    newNode->data = isi;
    newNode->next = NULL;

    if (q.rear == NULL) {
        q.front = q.rear = newNode;
    } else {
        q.rear->next = newNode;
        q.rear = newNode;
    }

    mahasiswa[isi] = urutan;
    cout << isi << " masuk ke dalam list dengan urutan: " << urutan << endl;
    urutan++;
}

void DeQue(Queue &q) {
    if (q.front == NULL) {
        cout << "Antrean kosong! Tidak ada mahasiswa yang bisa dilayani." << endl;
        return;
    }

    Node* temp = q.front;
    cout << "Mahasiswa bernama: " << temp->data << " dengan urutan: " << mahasiswa[temp->data] << " dilayani" << endl;
   
    q.front = q.front->next;

   
    if (q.front == NULL) {
        q.rear = NULL;
    }

    delete temp;
}

void tampil(Queue q) {
    if (q.front == NULL) {
        cout << "List antrian kosong." << endl;
        return;
    }

    Node* curr = q.front;
    cout << "--- List Antrian Saat Ini ---" << endl;
    while (curr != NULL) {
        cout << "List ke-" << mahasiswa[curr->data] << ": " << curr->data << endl;
        curr = curr->next;
    }
    cout << "-----------------------------" << endl;
}

int main() {
    Queue q;
    string cmd;
   
    cout << "Perintah tersedia: Enque [nama], Deque, Show, Exit" << endl;
   
    while (true) {
        cout << "\nMasukkan perintah : ";
        cin >> cmd;

        if (cmd == "Enque") {
            string nama;
            cin >> nama;
            EnQueue(q, nama);
        }
        else if (cmd == "Deque") {
            DeQue(q);
        }
        else if (cmd == "Show") {
            tampil(q);
        }
        else if (cmd == "Exit") {
            break;
        }
        else {
            cout << "Perintah tidak dikenal!" << endl;
        }
    }

    return 0;
}




Komentar

Postingan populer dari blog ini

overviewc++

Stack