|
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