TUGAS PERTEMUAN 5_STRUKTUR DATA (D)
Nama : Rado Putra Yustisiawan
NRP : 5025251048
Stack atau tumpukan adalah sebuah struktur data linear yang mengikuti prinsip LIFO (Last In, First Out). Konsep ini berarti data yang terakhir kali dimasukkan ke dalam tumpukan akan menjadi data yang pertama kali dikeluarkan.
Bayangkan sebuah tumpukan piring atau tumpukan buku; kamu hanya bisa menambah atau mengambil piring dari bagian paling atas. Jika kamu ingin mengambil piring paling bawah, kamu harus mengeluarkan semua piring di atasnya satu per satu. Dalam pemrograman, titik akses tunggal ini disebut sebagai Top (puncak). Stack sangat berguna dalam algoritma yang membutuhkan pembalikan data atau penyimpanan status sementara (seperti fitur Undo/Redo pada teks editor).
Untuk mengelola data di dalam stack, terdapat beberapa operasi standar yang harus dipahami:
Push: Operasi untuk memasukkan atau menambahkan elemen baru ke posisi paling atas (top).
Pop: Operasi untuk menghapus atau mengambil elemen yang berada di posisi paling atas.
Peek / Top: Operasi untuk melihat nilai atau informasi pada elemen teratas tanpa menghapusnya dari stack.
isEmpty: Fungsi pengecekan untuk mengetahui apakah stack dalam keadaan kosong. Ini penting dilakukan sebelum operasi Pop.
isFull: Fungsi pengecekan untuk mengetahui apakah kapasitas stack sudah mencapai batas maksimal (hanya berlaku pada implementasi berbasis Array)
{ } akan diproses secara berurutan oleh sistem saat program dijalankan.<< berfungsi sebagai perantara untuk mengarahkan teks, sedangkan endl digunakan untuk membuat baris baru.Untuk mengelola tumpukan ini, kita menggunakan sebuah variabel penanda yang biasanya disebut top.
Saat stack kosong, nilai top diatur ke -1 (karena indeks array dimulai dari 0).
Setiap kali melakukan Push, nilai top akan bertambah (increment), lalu data disimpan pada indeks tersebut.
Setiap kali melakukan Pop, data pada indeks top diambil, lalu nilai top berkurang (decrement).
Kelemahan utama metode ini adalah Fixed Size; jika tumpukan sudah mencapai kapasitas maksimal array dan kita mencoba menambah data lagi, maka akan terjadi kondisi Stack Overflow. Sebaliknya, jika kita mengambil data dari stack yang kosong, terjadi Stack Underflow.
Deskripsi : Program ini mengimplementasikan struktur data Stack menggunakan array untuk menyimpan data integer. Program dilengkapi dengan sistem proteksi Overflow dan Underflow untuk memastikan keamanan memori saat manipulasi data dilakukan.
#include <iostream>: Baris ini merupakan instruksi preprocessor yang berfungsi untuk menyertakan pustaka (library) standar iostream. Pustaka ini menyediakan fasilitas dasar untuk operasi input dan output dalam C++.
using namespace std;: Pernyataan ini digunakan untuk memberitahu compiler bahwa program akan menggunakan ruang nama (namespace) standar agar kita bisa menggunakan cout tanpa awalan std::.
#define MAX 5: Instruksi ini mendefinisikan konstanta global bernama MAX dengan nilai 5, yang berfungsi sebagai batas kapasitas maksimal array penyimpan stack.
class Stack { ... };: Pendefinisian sebuah kelas bernama Stack yang membungkus variabel (data) dan fungsi (operasi) menjadi satu kesatuan objek.
int arr[MAX];: Deklarasi array integer dengan ukuran sebanyak nilai MAX (5) untuk menampung elemen-elemen stack secara statis.
int top;: Variabel integer yang berfungsi sebagai penunjuk indeks posisi elemen paling atas yang ada di dalam stack.
Stack() { top = -1; }: Fungsi constructor yang otomatis dijalankan saat objek dibuat untuk mengatur kondisi awal stack agar kosong (indeks -1).
void push(int x) { ... }: Fungsi untuk menambah data. Di dalamnya terdapat pengecekan if (top == MAX - 1) untuk mencegah Stack Overflow sebelum menaikkan nilai top.
arr[++top] = x;: Kode ini menaikkan nilai top terlebih dahulu (pre-increment), baru kemudian memasukkan nilai x ke dalam array pada indeks top yang baru.
void pop() { ... }: Fungsi untuk menghapus data. Terdapat pengecekan if (top == -1) untuk mencegah Stack Underflow jika user mencoba menghapus data dari tumpukan kosong.
arr[top--]: Perintah untuk mengambil nilai dari indeks top saat ini, kemudian nilai top dikurangi 1 (post-decrement) setelah data berhasil ditampilkan.
void peek() { ... }: Fungsi untuk menampilkan isi data pada indeks top tanpa mengubah atau mengurangi posisi top tersebut.
int main() { ... }: Fungsi utama sebagai titik awal eksekusi program di mana objek Stack s dideklarasikan dan diuji coba operasinya.
return 0;: Mengakhiri fungsi utama dan menandakan program telah selesai berjalan dengan sukses tanpa error.
https://drive.google.com/file/d/1SpaDd8KmOFX57PXFNcB8SV3nQUoJmtbj/view?usp=sharing
Implementasi Stack dengan Linked List mengatasi masalah utama pada Array, yaitu keterbatasan kapasitas. Dalam model ini, setiap elemen data dibungkus dalam sebuah unit yang disebut Node. Setiap Node memiliki dua bagian utama: Data (nilai yang disimpan) dan Pointer Next (alamat memori node di bawahnya).
Pada Linked List, tidak ada indeks. Sebagai gantinya, kita menggunakan pointer top yang selalu menunjuk ke node paling depan (head).
Saat melakukan Push, kita membuat node baru di memori, mengarahkan
nextnode baru tersebut ketopyang lama, lalu memindahkan pointertopke node baru tersebut.Saat melakukan Pop, kita mengambil data dari node yang ditunjuk
top, memindahkantopke node berikutnya (top->next), lalu menghapus node lama dari memori menggunakan perintahdelete.
Keunggulan utamanya adalah Dynamic Sizing; stack bisa terus bertambah selama memori RAM komputer masih tersedia. Kita tidak perlu lagi mengecek Stack Full (isFull), cukup mengecek apakah memori berhasil dialokasikan.
std::.Node yang berisi variabel data (untuk menyimpan nilai) dan pointer next (untuk menyimpan alamat node selanjutnya).Node yang berfungsi untuk melacak alamat memori dari elemen teratas stack.top diatur ke NULL yang menandakan bahwa pada awalnya stack tidak memiliki elemen (kosong).new digunakan untuk memesan blok memori baru secara dinamis di heap memory untuk menyimpan data baru.top ke alamat node yang baru saja dibuat, menjadikannya elemen teratas.temp) untuk menyimpan alamat node yang akan dihapus agar alamat tersebut tidak hilang saat top dipindahkan.top ke node yang berada tepat di bawahnya dalam tumpukan.top masih bernilai NULL.push pada objek s untuk memasukkan nilai 100 ke dalam tumpukan dinamis.Dalam matematika sehari-hari, kita menggunakan notasi Infix (contoh: $A + B$), di mana operator berada di antara dua operand. Namun, bagi komputer, notasi Infix cukup membingungkan karena adanya aturan derajat prioritas (perkalian lebih kuat dari penjumlahan) dan penggunaan tanda kurung.
Oleh karena itu, digunakanlah notasi Postfix atau Reverse Polish Notation (contoh: A B +), di mana operator diletakkan setelah operand. Pada Postfix, komputer tidak perlu lagi mengecek tanda kurung atau prioritas; cukup baca dari kiri ke kanan.
Cara Kerja Stack dalam Konversi:
Jika bertemu Operand (angka/huruf), langsung masukkan ke hasil akhir.
Jika bertemu Operator:
Cek apakah stack kosong atau berisi operator dengan prioritas lebih rendah. Jika ya, Push ke stack.
Jika operator di dalam stack punya prioritas lebih tinggi atau sama, Pop semua yang lebih kuat itu ke hasil akhir, baru Push operator baru tadi.
Di akhir proses, Pop semua sisa operator yang masih ada di dalam stack ke hasil akhir.
s yang khusus digunakan untuk menyimpan karakter (operator).c adalah alphanumeric (huruf atau angka). Jika benar, maka ia dianggap operand dan langsung digabungkan ke variabel postfix.
Komentar
Posting Komentar