Skip to content

Commit 29f113d

Browse files
authored
Add files via upload
1 parent e62e908 commit 29f113d

2 files changed

Lines changed: 107 additions & 0 deletions

File tree

Postfix/Postfix.cpp

Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
#include <iostream>
2+
#include <string>
3+
4+
using namespace std;
5+
6+
const int MAX_SIZE = 100;
7+
8+
struct Stack {
9+
int top; // index of top of stack
10+
string elements[MAX_SIZE];
11+
};
12+
13+
bool isEmpty(Stack& stack) {
14+
return stack.top == -1;
15+
}
16+
17+
bool isFull(Stack& stack) {
18+
return stack.top == MAX_SIZE - 1;
19+
}
20+
21+
void push(Stack& stack, string value) {
22+
if (isFull(stack)) {
23+
cout << "Stack overflow!" << endl;
24+
return;
25+
}
26+
stack.elements[++stack.top] = value;
27+
}
28+
29+
void pop(Stack& stack) {
30+
if (isEmpty(stack)) {
31+
cout << "Stack underflow!" << endl;
32+
return;
33+
}
34+
stack.elements[stack.top--] = "";
35+
}
36+
37+
string top(Stack& stack) {
38+
if (isEmpty(stack)) {
39+
return "";
40+
}
41+
return stack.elements[stack.top];
42+
}
43+
44+
string removeSpaces(string str) {
45+
string result;
46+
for (int i = 0 ; i < str.size() ; i++) {
47+
if (str[i] != ' ') {
48+
result += str[i];
49+
}
50+
}
51+
return result;
52+
}
53+
54+
void postfix(Stack& stack, string phrase) {
55+
for (int i = 0; i < phrase.size(); i++) {
56+
string p = string(1, phrase[i]);
57+
if (p >= "0" && p <= "9") {
58+
cout << p;
59+
} else if (p == "(" || p == ")" || p == "{" || p == "}" || p == "[" || p == "]") {
60+
push(stack, p);
61+
} else {
62+
while (true) {
63+
if (isEmpty(stack) || top(stack) == "(" || top(stack) == "[" || top(stack) == "{") {
64+
push(stack, p);
65+
break;
66+
} else if (top(stack) == "+" || top(stack) == "-" || top(stack) == "/" ||
67+
top(stack) == "*") {
68+
if ((p == "*" || p == "/") && (top(stack) == "-" || top(stack) == "+")) {
69+
push(stack, p);
70+
break;
71+
} else {
72+
if (top(stack) != "(" && top(stack) != ")" && top(stack) != "{" &&
73+
top(stack) != "}" && top(stack) != "[" && top(stack) != "]") {
74+
cout << top(stack);
75+
}
76+
pop(stack);
77+
}
78+
} else {
79+
break;
80+
}
81+
}
82+
}
83+
}
84+
while (!isEmpty(stack)) {
85+
string p = top(stack);
86+
if (p != "(" && p != ")" && p != "{" && p != "}" && p != "[" && p != "]") {
87+
cout << p;
88+
}
89+
pop(stack);
90+
}
91+
}
92+
93+
int main() {
94+
Stack stack;
95+
stack.top = -1;
96+
string str;
97+
cout << "Enter the phrase: ";
98+
getline(cin,str);
99+
postfix(stack, removeSpaces(str));
100+
101+
return 0;
102+
}
103+
104+
/*
105+
Reza Asadi (Github : RezaGooner)
106+
1402/08/22 ~ 2023/11/13
107+
*/

Postfix/Postfix.exe

3.01 MB
Binary file not shown.

0 commit comments

Comments
 (0)