From 1a69528ce41de535f2fdcb521cf40ce9b40562a9 Mon Sep 17 00:00:00 2001 From: Amal Ramesh <44441397+amalrhk@users.noreply.github.com> Date: Wed, 23 Oct 2019 00:00:46 +0530 Subject: [PATCH] Create Infix to Postfix A program to convert infix to postfix using stack --- CPP/InfixToPostfix.cpp | 87 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 CPP/InfixToPostfix.cpp diff --git a/CPP/InfixToPostfix.cpp b/CPP/InfixToPostfix.cpp new file mode 100644 index 0000000..dec6cdb --- /dev/null +++ b/CPP/InfixToPostfix.cpp @@ -0,0 +1,87 @@ +/* C++ implementation to convert infix expression to postfix*/ + +#include +using namespace std; + +//Function to return precedence of operators +int prec(char c) +{ + if(c == '^') + return 3; + else if(c == '*' || c == '/') + return 2; + else if(c == '+' || c == '-') + return 1; + else + return -1; +} + +// The main function to convert infix expression +//to postfix expression +void infixToPostfix(string s) +{ + std::stack st; + st.push('N'); + int l = s.length(); + string ns; + for(int i = 0; i < l; i++) + { + // If the scanned character is an operand, add it to output string. + if((s[i] >= 'a' && s[i] <= 'z')||(s[i] >= 'A' && s[i] <= 'Z')) + ns+=s[i]; + + // If the scanned character is an ‘(‘, push it to the stack. + else if(s[i] == '(') + + st.push('('); + + // If the scanned character is an ‘)’, pop and to output string from the stack + // until an ‘(‘ is encountered. + else if(s[i] == ')') + { + while(st.top() != 'N' && st.top() != '(') + { + char c = st.top(); + st.pop(); + ns += c; + } + if(st.top() == '(') + { + char c = st.top(); + st.pop(); + } + } + + //If an operator is scanned + else{ + while(st.top() != 'N' && prec(s[i]) <= prec(st.top())) + { + char c = st.top(); + st.pop(); + ns += c; + } + st.push(s[i]); + } + + } + //Pop all the remaining elements from the stack + while(st.top() != 'N') + { + char c = st.top(); + st.pop(); + ns += c; + } + + cout << ns << endl; + +} + +//Driver program to test above functions +int main() + +{ string exp; + cin>>exp; + infixToPostfix(exp); + return 0; +} +