Implementasi Stack pada Array dan Linked List
Pada blog ini akan menyajikan penerapan stack pada array dan linked list. Untuk model stack yang akan dibuat disini akan ddibuat 4 fungsi untuk operasi stack yaitu push (memasukkan/menambahkan data), pop (membuang data paling atas), peek (mengetahui nilai top), dan print (memunculkan seluruh isi stack).
Stack pada Array
Ini adalah penerapan array pada stack
#include <bits/stdc++.h>
using namespace std;
#define MAX 1000
class Stack {
private:
int arr[MAX];
int top;
public:
Stack(){
top = -1;
}
void push(int x){
if (top == MAX -1) cout << "Stack Overflow" << endl;
else{
arr[++top] = x;
cout << x << " ditambahkan ke stack" << endl;
}
}
void pop(){
if (top == -1) cout << "Stack Underflow" << endl;
else cout << arr[top--] << " dihapus dari stack" << endl;
}
void peek(){
if (top == -1) cout << "Stack kosong" << endl;
else cout << "Elemen teratas: " << arr[top] << endl;
}
void print(){
while (top != -1){
cout << arr[top] << endl;
top--;
}
}
};
int main(){
Stack s;
s.push(10);
s.push(20);
s.push(30);
s.peek();
s.pop();
s.print();
return 0;
}
Pada awalnya stack diisi data secara berurutan 10, 20, dan 30 dengan top sementaranya 30. Setelah top sementara dicetak ke layar, diperintahkan operasi pop dan diakhiri dengan fungsi print yang hanya memunculkan angka 10 dan 20 dengan angka 20 sebagai top.
Stack pada Linked List
Ini adalah penerapan stack pada linked list
#include <bits/stdc++.h>
using namespace std;
struct Node {
int data;
Node* next;
};
class Stack {
private:
Node* top;
public:
Stack() {
top = NULL;
}
void push(int x) {
Node* newNode = new Node();
newNode->data = x;
newNode->next = top;
top = newNode;
cout << x << " ditambahkan ke stack" << endl;
}
void pop() {
if (top == NULL) {
cout << "Stack Underflow" << endl;
return;
}
Node* temp = top;
cout << temp->data << " dihapus dari stack" << endl;
top = top->next;
delete temp;
}
void peek() {
if (top == NULL) {
cout << "Stack kosong\n";
} else {
cout << "Elemen teratas: " << top->data << endl;
}
}
bool isEmpty() {
return (top == NULL);
}
void print(){
if (isEmpty()) {
cout << "Stack kosong" << endl;
return;
}
Node* temp = top;
while (temp != NULL){
cout << temp->data << endl;
temp = temp->next;
}
}
};
int main() {
Stack s;
s.push(10);
s.push(20);
s.push(30);
s.peek();
s.pop();
s.print();
return 0;
}
Secara keseluruhan algoritma programnya masih mirip, hanya ditambah fungsi `isEmpty` yang akan mendeteksi apakah stack tersebut kosong. Pada awalnya stack diisi data secara berurutan 10, 20, dan 30 dengan top sementaranya 30. Setelah top sementara dicetak ke layar, diperintahkan operasi pop dan diakhiri dengan fungsi print yang hanya memunculkan angka 10 dan 20 dengan angka 20 sebagai top.
Source code
https://github.com/xbggnr/Stack-array-and-linked-list.git
Komentar
Posting Komentar