|
2 | 2 |
|
3 | 3 | // MAX is a macro to define all stack instances size
|
4 | 4 | #define MAX 10
|
5 |
| -#define TYPE_SIZE 4 |
6 | 5 |
|
7 | 6 | // Stack: Last In - First Out (LIFO)
|
8 | 7 |
|
9 | 8 | class Stack {
|
10 | 9 | private:
|
11 |
| - int arr[MAX]; |
12 |
| - int elements{0}; |
| 10 | + int array[MAX]; |
| 11 | + int index = 0; |
13 | 12 |
|
14 | 13 | public:
|
15 | 14 | Stack(){}
|
16 | 15 |
|
17 |
| - bool push(int element) { |
18 |
| - if ((this->elements * TYPE_SIZE) == sizeof(this->arr)) { |
19 |
| - return false; |
20 |
| - }; |
21 |
| - this->arr[elements] = element; |
22 |
| - elements++; |
23 |
| - return true; |
| 16 | + void push(int element) { |
| 17 | + if (this->index >= MAX) { |
| 18 | + throw std::logic_error("Stack is full!"); |
| 19 | + } |
| 20 | + this->array[index] = element; |
| 21 | + index++; |
24 | 22 | }
|
25 | 23 |
|
26 | 24 | bool isEmpty() {
|
27 |
| - if (!this->elements) { |
| 25 | + if (!this->index) { |
28 | 26 | return true;
|
29 | 27 | }
|
30 | 28 | return false;
|
31 | 29 | }
|
32 | 30 |
|
33 |
| - bool pop() { |
| 31 | + int pop() { |
34 | 32 | if (this->isEmpty()) {
|
35 |
| - return false; |
| 33 | + throw std::logic_error("Stack is empty!"); |
36 | 34 | }
|
37 |
| - this->arr[this->elements - 1] = 0; |
38 |
| - elements--; |
39 |
| - return true; |
| 35 | + index--; |
| 36 | + int value = this->array[this->index]; |
| 37 | + this->array[this->index] = 0; |
| 38 | + return value; |
40 | 39 | }
|
41 | 40 |
|
42 |
| - int top() { |
43 |
| - if (this->isEmpty()) { |
44 |
| - return -1; |
| 41 | + void print() { |
| 42 | + std::cout << "[ "; |
| 43 | + for (int i = 0; i < this->index; i++) { |
| 44 | + std::cout << this->array[i] << " "; |
45 | 45 | }
|
46 |
| - return this->arr[this->elements - 1]; |
47 |
| - } |
48 |
| - |
49 |
| - int getSize() { |
50 |
| - return sizeof(this->arr) / TYPE_SIZE; |
| 46 | + std::cout << "]" << std::endl; |
51 | 47 | }
|
52 | 48 | };
|
53 | 49 |
|
54 | 50 | int main() {
|
55 | 51 | // Create a pointier to a new Stack instance
|
56 | 52 | Stack* stack = new Stack();
|
57 | 53 |
|
58 |
| - // Insert Elements, then removes |
| 54 | + std::cout << "Push(1, 2, 4)" << std::endl; |
59 | 55 | stack->push(1);
|
60 | 56 | stack->push(2);
|
61 | 57 | stack->push(4);
|
62 |
| - std:: cout << stack->top() << std::endl; |
| 58 | + stack->print(); |
| 59 | + |
| 60 | + std::cout << "Pop()" << std::endl; |
63 | 61 | stack->pop();
|
64 |
| - std:: cout << stack->top() << std::endl; |
| 62 | + stack->print(); |
| 63 | + |
65 | 64 | stack->pop();
|
66 | 65 | stack->pop();
|
67 | 66 |
|
68 |
| - std::cout << "--------------------" << "\n"; |
69 |
| - |
70 |
| - // Try to insert beyond max size |
71 |
| - for (int i = 0; i < 15; i++) { |
72 |
| - std::cout << stack->push(i) << std::endl; |
73 |
| - } |
74 |
| - |
75 |
| - std::cout << "--------------------" << "\n"; |
76 |
| - |
77 |
| - // Show and remove stack top element |
78 |
| - for (int i = 0; i < stack->getSize(); i++) { |
79 |
| - std::cout << stack->top() << std::endl; |
80 |
| - stack->pop(); |
81 |
| - } |
| 67 | + std::cout << "Empty Stack" << std::endl; |
| 68 | + stack->print(); |
82 | 69 | }
|
0 commit comments