-
Notifications
You must be signed in to change notification settings - Fork 618
/
stack_class.cpp
152 lines (133 loc) · 2.64 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
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
/*
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 implementation 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;
}
//push(data) inserts data into stack
void push(T x){
count++;
node<T>* n = new node<T>(x);
if(head == nullptr){
head = n;
}
else{
n->next = head;
head = n;
}
}
//pop() removes the last inserted element from the stack
void pop(){
if(count>0){
count--;
node<T>* temp = head;
head = head->next;
delete temp;
}
}
//size() returns the total number of elements available in a stack
int size(){
return count;
}
//empty() or IsEmpty() indicates whether any elements are stored in the stack or not
bool empty(){
return head == nullptr;
}
//top() returns the last inserted element without removing it
T top(){
return head->data;
}
//display() it prints all the elements available in the stack
void display()
{
if (empty())
return;
T x = top();
pop();
display();
cout << x << " ";
push(x);
}
//change(index,data) it changes the element at the given position
void change(int index, T newVal)
{
if (empty())
return;
T x = top();
pop();
if (count == index) {
push(newVal);
return;
}
change(index,newVal);
push(x);
}
};
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";
s.display();
s.change(1,0); //5,10
cout<<"\n";
s.display();
return 0;
}
/*
Test Case :
Input : 5
Output :
5
4
4
0
1 2 3 4
1 0 3 4
Input : 8
Output:
8
7
7
0
1 2 3 4 5 6 7
1 2 3 4 5 10 7
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 IsFullStack() : O(1)
Time Complexity of DeleteStack() : O(1)
Time Complexity of Display() : O(n)
Time Complexity of Change() : O(n)
Space Complexity (for n push operations) : O(n)
*/