Assignment Stack
infix to postfix
#include<iostream>
#include<stack>
using namespace std;
int prec(char c)
{
if (c == '^')
return 3;
else if (c == '/' || c == '*')
return 2;
else if (c == '+' || c == '-')
return 1;
else
return -1;
}
void infixToPostfix(string s)
{
stack<char> st;
string result;
for (int i = 0; i < [Link](); i++) {
char c = s[i];
if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')
|| (c >= '0' && c <= '9'))
result += c;
else if (c == '(')
[Link]('(');
else if (c == ')') {
while ([Link]() != '(') {
result += [Link]();
[Link]();
}
[Link]();
}
else {
while (![Link]()
&& prec(s[i]) <= prec([Link]())) {
result += [Link]();
[Link]();
}
[Link](c);
}
}
while (![Link]()) {
result += [Link]();
[Link]();
}
cout << result << endl;
}
int main()
{
string exp = "a+b*(c^d-e)";
infixToPostfix(exp);
return 0;
}
Output : abcd^e-*+
Infix to Prefix
#include <algorithm>
#include <iostream>
#include <stack>
using namespace std;
int prec(char c)
{
if (c == '^')
return 3;
else if (c == '/' || c == '*')
return 2;
else if (c == '+' || c == '-')
return 1;
else
return -1;
}
string infixToPrefix(string s)
{
stack<char> st;
string result;
reverse([Link](), [Link]());
for (int i = 0; i < [Link](); i++) {
char c = s[i];
if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >=
'0' && c <= '9'))
result += c;
else if (c == ')')
[Link](c);
else if (c == '(') {
while (![Link]() && [Link]() != ')') {
result += [Link]();
[Link]();
}
[Link]();
} else {
while (![Link]() && prec(s[i]) < prec([Link]())) {
result += [Link]();
[Link]();
}
[Link](c);
}
}
while (![Link]()) {
result += [Link]();
[Link]();
}
reverse([Link](), [Link]());
return result;
}
int main()
{
string exp = "a+b*(c^d-e)";
string prefixExp = infixToPrefix(exp);
cout << prefixExp << endl;
return 0;
}
Output:
+a*b-^cde