-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathstack_using_queues.cpp
More file actions
150 lines (135 loc) · 3 KB
/
stack_using_queues.cpp
File metadata and controls
150 lines (135 loc) · 3 KB
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
//Program to implement a Stack using two Queues
#include<iostream>
#include<cstdlib>
#include<queue>
using namespace std;
class stack{
/*
objective: Create a class to implement Stack using STL Queues
input parameters: none
output value: none
description: Class definition
approach: Class definition provides data member and member functions for the Stack class
*/
queue<int> q1,q2;
int curr_size;
public:
stack();
void push(int);
void pop();
int top();
bool isEmpty();
void stack_status();
};
stack::stack(){
/*
Objective: To construct an object of class stack and initialize size of the stack with 0.
Input: None
Output: None
Return value: None
*/
curr_size = 0;
}
void stack::push(int ele){
/*
Objective: To push an element onto the stack.
Input: ele -> The element to be pushed
Output: None
Return value: None
*/
curr_size++;
q2.push(ele);
while(!q1.empty()){
q2.push(q1.front());
q1.pop();
}
queue<int> temp = q1;
q1 = q2;
q2 = temp;
}
bool stack::isEmpty(){
if(q1.empty())
return true;
else
return false;
}
void stack::pop(){
/*
Objective: To pop the top element out of the stack.
Input: None
Output: None
Return value: top element, if stack is not empty
NULL, if stack is empty
*/
if(!isEmpty()){
curr_size--;
q1.pop();
}
}
int stack::top(){
/*
Objective: To find the top element of the stack.
Input: None
Output: None
Return value: top element, if stack is not empty
NULL, if stack is empty
*/
if( !isEmpty() )
return q1.front();
}
void stack::stack_status(){
/*
Objective: To print the stack
Input: None
Output: Stack data
Return value: None
*/
cout<<"\n\n------Stack------\n";
if(!isEmpty()){
queue<int> temp = q1;
while(!temp.empty()){
cout<<"\t"<<temp.front()<<"\n";
temp.pop();
}
}
cout<<"-----------------";
}
int main(){
/*
Objective: To perform various stack operations.
*/
stack s;
int choice;
while(1){
cout<<"\n\n\t\t\tSTACK OPERATIONS\n\n1.PUSH\n2.POP\n3.TOP\n4.PRINT STACK\n5.EXIT\n\n";
cout<<"\nEnter your choice : ";
cin>>choice;
switch(choice){
case 1: cout<<"\nEnter element: ";
int ele;
cin>>ele;
s.push(ele);
s.stack_status();
break;
case 2: if(!s.isEmpty()){
s.pop();
cout<<"\nElement popped!!";
}
else
cout<<"\nStack empty!!Cannot pop!!";
s.stack_status();
break;
case 3: if(!s.isEmpty())
cout<<"\nTop element: "<<s.top();
else
cout<<"\nStack is empty!!";
break;
case 4: s.stack_status();
break;
case 5: exit(0);
default: cout<<"Invalid choice!!";
break;
}
}
return 0;
}