Tuesday, April 21, 2026

Linked List

 



Linked List

Linked List adalah struktur data yang terdiri dari kumpulan objek yang disebut node, yang tersimpan secara tidak berurutan (tidak bersebelahan) di dalam memori.

Berbeda dengan array, elemen pada linked list tidak harus berada pada alamat memori yang berdekatan

Struktur Node pada Linked List

Setiap node dalam linked list memiliki dua bagian utama, yaitu:

  1. Data
    • Berisi nilai atau informasi yang disimpan pada node tersebut.
  2. Pointer (Next)
    • Berisi alamat memori dari node berikutnya dalam list.

Node Terakhir

Node terakhir dalam linked list memiliki ciri khusus:

  • Pointer-nya tidak menunjuk ke node lain
  • Biasanya berisi nilai NULL

Artinya, node tersebut adalah akhir dari linked list

 

Implementasi dalam C++

#include <iostream>

using namespace std;

// Struktur Node
struct Node {
    int data;
    Node* next;
};

int main() {
    // Membuat 3 node
    Node* node1 = new Node();
    Node* node2 = new Node();
    Node* node3 = new Node();

    // Isi data
    node1->data = 10;
    node2->data = 20;
    node3->data = 30;

    // Hubungkan node
    node1->next = node2;
    node2->next = node3;
    node3->next = NULL;

    // Traversal (menampilkan data)
    Node* current = node1;
    while (current != NULL) {
        cout << current->data << " -> ";
        current = current->next;
    }
    cout << "NULL";

    return 0;
}



Referensi 


Tuesday, April 14, 2026

Queue





Queue (Antrian) adalah struktur data linear yang merupakan kumpulan elemen. Queue adalah jenis khusus dari list, di mana elemen dimasukkan pada satu ujung yang disebut rear (belakang) dan dihapus dari ujung lainnya yang disebut front (depan).

Prinsip utama dari queue adalah FIFO (First-In-First-Out) atau masuk pertama, keluar pertama.

Queue merupakan struktur data abstrak (Abstract Data Type / ADT) dan sangat berguna dalam pemrograman. Konsepnya mirip dengan antrian tiket di depan bioskop, di mana orang yang pertama kali masuk antrian adalah orang pertama yang mendapatkan tiket.

Contoh dalam kehidupan nyata lainnya adalah jalan satu arah satu jalur, di mana kendaraan yang masuk terlebih dahulu akan keluar terlebih dahulu.

Operasi utama:

  • enqueue() → tambah data
  • dequeue() → hapus data
Proses
ALGORITHM Enqueue(Q, item)
INPUT    : Q (queue), item (elemen yang akan dimasukkan)
OUTPUT   : Queue Q yang telah ditambahkan elemen baru

BEGIN
    IF rear = MAX - 1 THEN
        OUTPUT "Queue Overflow"
        RETURN
    ENDIF

    IF front = -1 THEN
        front ← 0
        rear  ← 0
    ELSE
        rear ← rear + 1
    ENDIF

    Q[rear] ← item

END

Penjelasan Variabel

  • Q : array sebagai penyimpan queue
  • MAX : kapasitas maksimum queue
  • front : penunjuk elemen depan
  • rear : penunjuk elemen belakang
  • item : data yang akan dimasukkan

DEQUEUE

ALGORITHM Dequeue(Q)
INPUT    : Q (queue)
OUTPUT   : Elemen yang dihapus dari queue

BEGIN
    IF front = -1 THEN
        OUTPUT "Queue Underflow"
        RETURN
    ENDIF

    item ← Q[front]

    IF front = rear THEN
        front ← -1
        rear  ← -1
    ELSE
        front ← front + 1
    ENDIF

    RETURN item

END

Contoh :

  • Antrian bank
  • Printer queue
  • Task scheduling OS

  • Implementasi Array


    #include <iostream>
    using namespace std;

    #define MAX 5

    class Queue {
    private:
        int arr[MAX];
        int front, rear;

    public:
        Queue() {
            front = -1;
            rear = -1;
        }

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

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

        void enqueue(int x) {
            if (isFull()) {
                cout << "Queue Overflow\n";
                return;
            }
            if (isEmpty()) {
                front = 0;
            }
            arr[++rear] = x;
            cout << "Elemen " << x << " masuk ke queue\n";
        }

        void dequeue() {
            if (isEmpty()) {
                cout << "Queue Underflow\n";
                return;
            }
            cout << "Elemen " << arr[front] << " keluar dari queue\n";
            if (front == rear) {
                front = rear = -1;
            } else {
                front++;
            }
        }

        void display() {
            if (isEmpty()) {
                cout << "Queue kosong\n";
                return;
            }
            cout << "Isi Queue: ";
            for (int i = front; i <= rear; i++) {
                cout << arr[i] << " ";
            }
            cout << endl;
        }
    };

    int main() {
        Queue q;

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

        q.display();

        q.dequeue();
        q.display();

        return 0;
    }

    Implementasi Link List


    #include <iostream>
    using namespace std;

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

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

    public:
        Queue() {
            front = rear = NULL;
        }

        bool isEmpty() {
            return (front == NULL);
        }

        void enqueue(int x) {
            Node* newNode = new Node();
            newNode->data = x;
            newNode->next = NULL;

            if (rear == NULL) {
                front = rear = newNode;
            } else {
                rear->next = newNode;
                rear = newNode;
            }
            cout << "Elemen " << x << " masuk ke queue\n";
        }

        void dequeue() {
            if (isEmpty()) {
                cout << "Queue kosong\n";
                return;
            }

            Node* temp = front;
            cout << "Elemen " << temp->data << " keluar dari queue\n";

            front = front->next;

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

            delete temp;
        }

        void display() {
            if (isEmpty()) {
                cout << "Queue kosong\n";
                return;
            }

            Node* temp = front;
            cout << "Isi Queue: ";
            while (temp != NULL) {
                cout << temp->data << " ";
                temp = temp->next;
            }
            cout << endl;
        }
    };

    int main() {
        Queue q;

        q.enqueue(5);
        q.enqueue(15);
        q.enqueue(25);

        q.display();

        q.dequeue();
        q.display();

        return 0;
    }

    Monday, April 6, 2026

    Studi Kasus Stack

     




    Konversi ke Postfix




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

    // Fungsi untuk menentukan prioritas operator
    int precedence(char op) {
        if (op == '^')
            return 3;
        else if (op == '*' || op == '/')
            return 2;
        else if (op == '+' || op == '-')
            return 1;
        else
            return 0;
    }

    // Fungsi untuk cek apakah karakter adalah operator
    bool isOperator(char c) {
        return (c == '+' || c == '-' || c == '*' || c == '/' || c == '^');
    }

    // Fungsi utama konversi infix ke postfix
    string infixToPostfix(string infix) {
        stack<char> st;
        string postfix = "";

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

            // Jika operand (huruf/angka)
            if (isalnum(c)) {
                postfix += c;
            }
            // Jika '('
            else if (c == '(') {
                st.push(c);
            }
            // Jika ')'
            else if (c == ')') {
                while (!st.empty() && st.top() != '(') {
                    postfix += st.top();
                    st.pop();
                }
                if (!st.empty())
                    st.pop(); // hapus '('
            }
            // Jika operator
            else if (isOperator(c)) {
                while (!st.empty() && precedence(st.top()) >= precedence(c)) {
                    postfix += st.top();
                    st.pop();
                }
                st.push(c);
            }
        }

        // Pop semua operator tersisa
        while (!st.empty()) {
            postfix += st.top();
            st.pop();
        }

        return postfix;
    }

    // Main function
    int main() {
        string infix;

        cout << "Masukkan ekspresi infix: ";
        cin >> infix;

        string postfix = infixToPostfix(infix);

        cout << "Postfix: " << postfix << endl;

        return 0;
    }

    Evaluasi Postfix






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

    // Fungsi evaluasi postfix
    int evaluatePostfix(string exp) {
        stack<int> st;

        for (char c : exp) {

            // Jika operand (angka)
            if (isdigit(c)) {
                st.push(c - '0'); // konversi char ke int
            }
            // Jika operator
            else {
                int val2 = st.top(); st.pop();
                int val1 = st.top(); st.pop();

                switch (c) {
                    case '+': st.push(val1 + val2); break;
                    case '-': st.push(val1 - val2); break;
                    case '*': st.push(val1 * val2); break;
                    case '/': st.push(val1 / val2); break;
                }
            }
        }

        return st.top();
    }

    // Main
    int main() {
        string postfix;

        cout << "Masukkan ekspresi postfix: ";
        cin >> postfix;

        cout << "Hasil evaluasi: " << evaluatePostfix(postfix) << endl;

        return 0;
    }


    Multi Digit Postfix




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

    int evaluatePostfix(string exp) {
        stack<int> st;
        stringstream ss(exp);
        string token;

        while (ss >> token) {
            // Jika operator
            if (token == "+" || token == "-" || token == "*" || token == "/") {
                int val2 = st.top(); st.pop();
                int val1 = st.top(); st.pop();

                if (token == "+") st.push(val1 + val2);
                else if (token == "-") st.push(val1 - val2);
                else if (token == "*") st.push(val1 * val2);
                else if (token == "/") st.push(val1 / val2);
            }
            // Jika operand
            else {
                st.push(stoi(token));
            }
        }

        return st.top();
    }

    int main() {
        string postfix;

        cout << "Masukkan postfix (pisahkan dengan spasi): ";
        getline(cin, postfix);

        cout << "Hasil: " << evaluatePostfix(postfix) << endl;

        return 0;
    }


    Pengumpulan Tugas


    Absensi



    Linked List

      PPT Linked List Linked List Linked List adalah struktur data yang terdiri dari kumpulan objek yang disebut node , yang tersimpan secara...