Pertemuan 5 - Stack

 

Stack

Nama: Hadryan Rizky Dimas Saputra
NRP: 5025251027
Kelas: Struktur Data (D) 2026
Pertemuan: 5

Source Code: pertemuan 5

1. Operasi Dasar Stack dengan Array

Deskripsi (Fungsi) Program: 

  • Push → menambahkan elemen ke stack
  • Pop → menghapus elemen dari stack
  • Peek/Top → melihat elemen paling atas
  • isEmpty → mengecek apakah stack kosong

Code:

Hasil/Output Program:

Penjelasan Program:

Baris Kode

Penjelasan

#include <bits/stdc++.h>

Memasukkan semua library standar C++ sekaligus.

using namespace std;

Menggunakan namespace std agar tidak perlu menulis std:: pada fungsi standar (seperti cout).

#define max 5

Mendefinisikan makro batas maksimal elemen stack dengan nilai 5.

class Stack {

Mendeklarasikan class bernama Stack.

private:

Menentukan hak akses private (hanya bisa diakses oleh fungsi di dalam class ini).

int arr[max];

Membuat array arr dengan kapasitas max (5) untuk menyimpan data.

int top;

Mendeklarasikan variabel top sebagai penunjuk/indeks elemen paling atas.

public:

Menentukan hak akses public (bisa dipanggil dari luar class).

// stack kosong

Komentar program.

Stack() {

Membuat konstruktor untuk class Stack.

top = -1;

Memberi nilai awal top dengan -1, menandakan stack masih kosong.

}

Menutup blok konstruktor.

// push

Komentar program.

void push(int x) {

Membuat fungsi push untuk menambahkan nilai x ke dalam stack.

if(top == max - 1) {

Mengecek apakah stack sudah penuh (nilai top sudah di batas akhir array).

cout << "Stack Overflow\n";

Menampilkan pesan bahwa stack penuh dan data gagal masuk.

} else {

Kondisi jika stack belum penuh.

arr[++top] = x;

Menambah nilai top sebanyak 1, lalu menyimpan nilai x pada indeks tersebut.

cout << x << " ditambahkan ke Stack\n";

Menampilkan pesan bahwa nilai x berhasil dimasukkan.

}

Menutup blok else.

}

Menutup blok fungsi push.

// pop

Komentar program.

void pop() {

Membuat fungsi pop untuk menghapus elemen paling atas dari stack.

if(top == -1) {

Mengecek apakah stack sedang kosong.

cout << "Stack Underflow\n";

Menampilkan pesan error karena tidak ada data yang bisa dihapus.

} else {

Kondisi jika stack memiliki data.

cout << arr[top--] << " dihapus...\n";

Menampilkan elemen yang dihapus, lalu mengurangi nilai top sebanyak 1 (data dianggap terhapus).

}

Menutup blok else.

}

Menutup blok fungsi pop.

// peek

Komentar program.

void peek() {

Membuat fungsi peek untuk melihat nilai elemen paling atas tanpa menghapusnya.

if(top == -1) {

Mengecek apakah stack sedang kosong.

cout << "Stack Kosong\n";

Menampilkan pesan bahwa tidak ada elemen untuk dilihat.

} else {

Kondisi jika stack memiliki data.

cout << "Element Paling Atas: " ...

Menampilkan nilai elemen yang berada pada indeks top.

}

Menutup blok else.

}

Menutup blok fungsi peek.

};

Menutup dan mengakhiri deklarasi class Stack.

int main(void) {

Fungsi utama tempat program mulai dieksekusi.

Stack s;

Menginisialisasi objek baru bernama s dari class Stack.

s.push(10);

Memanggil fungsi push untuk memasukkan angka 10.

s.push(20);

Memanggil fungsi push untuk memasukkan angka 20.

s.push(30);

Memanggil fungsi push untuk memasukkan angka 30.

s.peek();

Memanggil fungsi peek (akan menampilkan angka 30 sebagai elemen teratas).

s.pop();

Memanggil fungsi pop (akan menghapus angka 30 dari stack).

s.peek();

Memanggil fungsi peek lagi (akan menampilkan angka 20 sebagai elemen teratas baru).

return 0;

Mengakhiri fungsi utama dengan status normal/berhasil.

}

Menutup fungsi main.



2. Operasi Dasar Stack dengan Linked List

Deskripsi (Fungsi) Program: 

Stack direpresentasikan sebagai Linked List dimana setiap elemen disebut node.
Setiap node memiliki:
- data
- pointer ke node berikutnya
dan Top stack = node paling depan (head)

Operasi pada Stack (Linked List)
  • Push → menambah node di depan
  • Pop → menghapus node di depan
  • Peek → melihat data paling atas
  • isEmpty → cek apakah stack kosong

Code:

Hasil/Output Program:

Penjelasan Program:

Baris Kode

Penjelasan

#include <bits/stdc++.h>

Memasukkan semua library standar C++ sekaligus.

using namespace std;

Menggunakan namespace std agar tidak perlu menulis std::.

struct Node {

Mendeklarasikan struktur bernama Node sebagai pembentuk linked list.

int data;

Variabel untuk menyimpan nilai/data pada node tersebut.

Node* next;

Pointer untuk menunjuk ke node selanjutnya di dalam stack.

};

Menutup struktur Node.

class Stack {

Mendeklarasikan class bernama Stack.

private:

Menentukan hak akses private (hanya bisa diakses di dalam class ini).

Node* top;

Mendeklarasikan pointer top sebagai penunjuk node paling atas.

public:

Menentukan hak akses public (bisa dipanggil dari luar class).

Stack() {

Membuat konstruktor untuk class Stack.

top= NULL;

Mengatur top bernilai NULL, menandakan stack baru dibuat (kosong).

}

Menutup blok konstruktor.

// push

Komentar program.

void push(int x) {

Membuat fungsi push untuk menambahkan nilai x ke dalam stack.

Node* newNode = new Node();

Mengalokasikan memori baru secara dinamis untuk sebuah node baru.

newNode->data = x;

Mengisi nilai data pada node baru dengan angka x.

newNode->next = top;

Mengaitkan node baru dengan node teratas sebelumnya (top).

top = newNode;

Menggeser penunjuk top ke node yang baru saja dibuat.

cout << x << " ditambahkan...\n";

Menampilkan pesan bahwa nilai x berhasil dimasukkan.

}

Menutup blok fungsi push.

// pop

Komentar program.

void pop() {

Membuat fungsi pop untuk menghapus node paling atas.

if(top == NULL) {

Mengecek apakah stack sedang kosong.

cout << "Stack Underflow\n";

Menampilkan pesan error karena tidak ada data untuk dihapus.

return;

Langsung keluar dari fungsi jika stack kosong.

}

Menutup blok if.

Node* temp = top;

Membuat pointer sementara (temp) untuk menyimpan node paling atas.

cout << temp->data << " dihapus...\n";

Menampilkan data yang akan dihapus.

top = top->next;

Menggeser penunjuk top ke node di bawahnya.

delete temp;

Menghapus node lama (yang tersimpan di temp) dari memori.

}

Menutup blok fungsi pop.

// peek

Komentar program.

void peek() {

Membuat fungsi peek untuk melihat nilai elemen teratas tanpa dihapus.

if(top == NULL) {

Mengecek apakah stack sedang kosong.

cout << "Stack Kosong\n";

Menampilkan pesan bahwa tidak ada elemen untuk dilihat.

} else {

Kondisi jika stack memiliki data.

cout << "Elemen Paling Atas: " ...

Menampilkan nilai data dari node yang ditunjuk oleh top.

}

Menutup blok else.

}

Menutup blok fungsi peek.

// cek empty

Komentar program.

bool isEmpty() {

Membuat fungsi untuk memeriksa status kekosongan stack.

return(top == NULL);

Mengembalikan nilai true jika kosong (NULL), dan false jika ada isinya.

}

Menutup blok fungsi isEmpty.

};

Menutup dan mengakhiri deklarasi class Stack.

int main(void) {

Fungsi utama tempat eksekusi program dimulai.

Stack s;

Menginisialisasi objek baru bernama s dari class Stack.

s.push(10);

Memanggil fungsi push untuk memasukkan angka 10.

s.push(20);

Memanggil fungsi push untuk memasukkan angka 20.

s.push(30);

Memanggil fungsi push untuk memasukkan angka 30.

s.peek();

Memanggil fungsi peek (menampilkan 30 sebagai elemen teratas).

s.pop();

Memanggil fungsi pop (menghapus node berisi angka 30).

s.peek();

Memanggil fungsi peek lagi (menampilkan 20 sebagai elemen teratas baru).

return 0;

Mengakhiri program dengan status normal.

}

Menutup fungsi main.


Komentar

Postingan populer dari blog ini

Pertemuan 12 - BTree & BST

Pertemuan 11 - Studi Kasus 1 | Sistem Folder Komputer (General Tree)