#include <iostream>
#include <bits/stdc++.h>
class Stack {
private:
std::vector<int> stack;
int top = -1;
int len = 0;
public:
bool isFull() {
return top == len - 1;
}
bool isEmpty() {
return top == -1;
}
int showTop() {
if (isEmpty()) return -1;
return stack[top];
}
bool push(int val) {
if (isFull()) return false;
stack[++top] = val;
return true;
}
int pop() {
if (isEmpty()) return -1;
top--;
return showTop();
}
Stack(int l) : len(l) {
stack = std::vector<int>(l);
std::cout << "Stack of length " << l << " initialized !!" << "\n";
}
};
int main() {
std::cout << "Stack Trace" << "\n";
std::cout << "Creating Stack of length 3 : " << "\n";
Stack stack(3);
std::cout << "Adding 5 \n";
stack.push(5);
std::cout << "Is empty ? : " << stack.isEmpty() << "\n";
std::cout << "Adding 2 \n";
stack.push(2);
std::cout << "Is empty ? : " << stack.isEmpty() << "\n";
std::cout << "Is full ? : " << stack.isFull() << "\n";
std::cout << "Top ? : " << stack.showTop() << "\n";
std::cout << "Adding 1 \n";
stack.push(1);
std::cout << "Is empty ? : " << stack.isEmpty() << "\n";
std::cout << "Is full ? : " << stack.isFull() << "\n";
std::cout << "Top ? : " << stack.showTop() << "\n";
std::cout << "Adding 6 \n";
stack.push(6);
std::cout << "Is empty ? : " << stack.isEmpty() << "\n";
std::cout << "Is full ? : " << stack.isFull() << "\n";
std::cout << "Top ? : " << stack.showTop() << "\n";
std::cout << "Removing Top \n";
stack.pop();
std::cout << "Is empty ? : " << stack.isEmpty() << "\n";
std::cout << "Is full ? : " << stack.isFull() << "\n";
std::cout << "Top ? : " << stack.showTop() << "\n";
std::cout << "Removing Top \n";
stack.pop();
std::cout << "Is empty ? : " << stack.isEmpty() << "\n";
std::cout << "Is full ? : " << stack.isFull() << "\n";
std::cout << "Top ? : " << stack.showTop() << "\n";
std::cout << "Removing Top \n";
stack.pop();
std::cout << "Is empty ? : " << stack.isEmpty() << "\n";
std::cout << "Is full ? : " << stack.isFull() << "\n";
std::cout << "Top ? : " << stack.showTop() << "\n";
std::cout << "Removing Top \n";
stack.pop();
std::cout << "Is empty ? : " << stack.isEmpty() << "\n";
std::cout << "Is full ? : " << stack.isFull() << "\n";
std::cout << "Top ? : " << stack.showTop() << "\n";
return 0;
}