forked from reerajput930/Algo-Tree
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathstack_class.cpp
118 lines (96 loc) · 1.63 KB
/
stack_class.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
/*
Stack is a linear data structure which follows a particular order in which the operations are performed.
The order may be LIFO(Last In First Out) or FILO(First In Last Out).
This is the implimentation of stack class using pointers.
*/
#include <iostream>
using namespace std;
template<typename T>
class node{
public:
T data;
node<T>* next;
// constructor
node(T x){
data = x;
next = nullptr;
}
};
template<typename T>
class Stack{
public:
node<T>* head;
int count;
Stack(){
head = nullptr;
count = 0;
}
void push(T x){
count++;
node<T>* n = new node<T>(x);
if(head == nullptr){
head = n;
}
else{
n->next = head;
head = n;
}
}
void pop(){
if(count>0){
count--;
node<T>* temp = head;
head = head->next;
delete temp;
}
}
int size(){
return count;
}
bool empty(){
return head == nullptr;
}
T top(){
return head->data;
}
};
int main()
{
Stack<int> s;
int n;
cin >> n;
for(int i=1;i<=n;i++){
s.push(i);
}
cout << s.top() << "\n";
s.pop();
cout << s.top() << "\n";
cout << s.size()<< "\n";
cout << s.empty() << "\n";
// print all elements
while(!s.empty()){
cout << s.top()<<"\n";
s.pop();
}
return 0;
}
/*
Test Case :
Input : 5
Output :
5
4
4
0
4
3
2
1
Time Complexity of Push() : O(1)
Time Complexity of Pop() : O(1)
Time Complexity of Size() : O(1)
Time Complexity of IsEmptyStack() : O(1)
Time Complexity of IsFullStackf) : O(1)
Time Complexity of DeleteStackQ : O(1)
Space Complexity (for n push operations) : O(n)
*/