forked from imnurav/Hactoberfest2021-Cpp
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMultiple_Paranthesis_Using_Stack.cpp
135 lines (124 loc) · 2.58 KB
/
Multiple_Paranthesis_Using_Stack.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
#include<bits/stdc++.h>
using namespace std;
struct Stack
{
char ch;
Stack *next;
};
class Stack_Paranthesis
{
Stack *top = NULL;
Stack *ptr;
protected:
void reset_stack();
bool pop(char ch);
void push(char ch);
bool isEmpty();
public:
void processing_Results();
};
void Stack_Paranthesis:: processing_Results(){
string Expression;
int popcount=0;
int pushCount=0;
bool flag;
cout<<"Enter the Expression Using the Multiple Paranthesis: ";
cin>>Expression;
for (int i = 0; i < Expression.size(); i++)
{
if(Expression[i]=='('|| Expression[i]=='{'||Expression[i]=='['){
push(Expression[i]);
pushCount++;
} else if (Expression[i]==')'|| Expression[i]=='}'||Expression[i]==']'){
if(isEmpty()){
cout<<"Stack is Empty as the Expression is Unbalanced "<<endl;
break;
}else{
flag=pop(Expression[i]);
popcount++;
}
}
}
if(flag==false){
cout<<"Pop Operation Can't be perform as Expression is Unbalanced"<<endl;
}
if(popcount==pushCount){
cout<<"Stack is balanced"<<endl;
}else if(pushCount>popcount){
cout<<"Stack is Unbalanced"<<endl;
reset_stack();
}
}
void Stack_Paranthesis::reset_stack()
{
while (top != NULL)
{
Stack *ptr = top;
top=top->next;
delete ptr;
}
}
bool Stack_Paranthesis::isEmpty()
{
if (top == NULL)
{
return true;
}
else
{
return false;
}
}
void Stack_Paranthesis::push(char ch)
{
Stack *new_node = new Stack;
new_node->ch = ch;
if (top == NULL)
{
top = new_node;
}
else
{
new_node->next = top;
top = new_node;
}
}
bool Stack_Paranthesis::pop(char R_ch)
{
Stack *new_node = top;
if((top->ch=='('&&R_ch==')')||(top->ch=='{'&&R_ch=='}')||(top->ch=='['&&R_ch==']')){
top=top->next;
delete new_node;
return true;
}else{
return false;
}
}
int main()
{
int choice;
Stack_Paranthesis operations;
do
{
cout << "1. Result of the Given Expression:" << endl;
cout << "2. Exit" << endl;
cout << endl;
cout << "Enter your Choice: ";
cin >> choice;
switch (choice)
{
case 1:
{
operations.processing_Results();
break;
}
case 2:
{
break;
}
default:
break;
}
} while (choice != 2);
return 0;
}