Postfix/Prefix to Infix converter
We have two converters. The first converter converts postfix to infix expression. And the second one converts prefix to infix expression.
You will get step by step conversion for your postfix/prefix expression to infix form.
1. Postfix to Infix converter step by step
The following converter converts an postfix expression to a infix expression.
Change the expression and converter will convert postfix to infix step by step.
How to convert postfix to infix?
Scan the given postfix expression from left to right character by character.
If the character is an operand, push it into the stack.
But if the character is an operator, pop the top two values from stack.
Concatenate this operator with these two values (2^{nd} top value+operator+1^{st} top value) to get a new string.
Now push this resulting string back into the stack.
Repeat this process untill the end of postfix expression. Now the value in the stack is the infix expression.
Input String | Postfix Expression | Stack (Infix) |
---|
In this tutorial We have explored an algorithm to convert a given Postfix expression to Infix expression using Stack.
Page Contents
Algorithm For Postfix to Infix Conversion
Iterate the given expression from left to right, one character at a time Step 1 : If a character is operand, push it to stack. Step 2: If a character is an operator, if there are fewer than 2 values on the stack give error "insufficient values in expression" goto Step 4 else pop 2 operands from stack create a new string and by putting the operator between operands. push this string into stack Repeat Steps 1 and 2 Step 3: At last there will be only one value or one string in the stack which will be our infix expression Step 4: ExitSome important terminology
Postfix Expression
In Postfix Expression operator appear after operand, this expression is known as Postfix operation.
Infix
If Infix Expression operator is in between of operands, this expression is known as Infix operation.
Steps to Convert Postfix to Infix
- Start Iterating the given Postfix Expression from Left to right
- If Character is operand then push it into the stack.
- If Character is operator then pop top 2 Characters which is operands from the stack.
- After poping create a string in which comming operator will be in between the operands.
- push this newly created string into stack.
- Above process will continue till expression have characters left
- At the end only one value will remain if there is integers in expressions. If there is character then one string will be in output as infix expression.
Example to convert postfix to Infix
Postfix Expression : abc-+de-+
Token | Stack | Action |
a | a | push a in stack |
b | a, b | push b in stack |
c | a, b, c | push c in stack |
– | a , b – c | pop b and c from stack and put – in between and push into stack |
+ | a + b – c | pop a and b-c from stack and put + in between and push into stack |
d | a + b – c, d | push d in stack |
e | a + b – c, d , e | push e in stack |
– | a + b – c, d – e | pop d and e from stack and put – in between and push into stack |
+ | a + b – c + d – e | pop a + b – c and d – e from stack and put + in between and push into stack |
Solution for postfix expression
postfix expression: 752+*415-/-
Token | Stack | Action |
7 | 7 | push 7 in stack |
5 | 7, 5 | push 5 in stack |
2 | 7 , 5, 2 | push 2 in stack |
+ | 7, 7 | pop 2 and 5 from stack, sum it and then again push it |
* | 49 | pop 7 and 7 from stack and multiply it and then push it again |
4 | 49, 4 | push 4 in stack |
1 | 49, 4, 1 | push 1 in stack |
5 | 49, 4, 1, 5 | push 5 in stack |
– | 49, 4, -4 | pop 5 and 1 from stack |
/ | 49, -1 | pop 4 and 4 from stack |
– | 50 | pop 1 and 49 from stack |
Infix to postfix conversion program
import java.util.*; public class Main { public static String convert(String exp){ int len = exp.length(); Stack<String> stack = new Stack<>(); for (int i = 0; i <len ; i++) { char c = exp.charAt(i); if(c=='*'||c=='/'||c=='^'||c=='+'||c=='-' ){ String s1 = stack.pop(); String s2 = stack.pop(); String temp = "("+s2+c+s1+")"; stack.push(temp); }else{ stack.push(c+""); } } String result=stack.pop(); return result; } public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("Please enter Postfix Expression: "); String exp = sc.nextLine(); System.out.println("Infix Expression: " + Main.convert(exp)); } }Share on
4.9. Infix, Prefix and Postfix Expressions¶
When you write an arithmetic expression such as B * C, the form of the expression provides you with information so that you can interpret it correctly. In this case we know that the variable B is being multiplied by the variable C since the multiplication operator * appears between them in the expression. This type of notation is referred to as infix since the operator is in between the two operands that it is working on.
Consider another infix example, A + B * C. The operators + and * still appear between the operands, but there is a problem. Which operands do they work on? Does the + work on A and B or does the * take B and C? The expression seems ambiguous.
In fact, you have been reading and writing these types of expressions for a long time and they do not cause you any problem. The reason for this is that you know something about the operators + and *. Each operator has a precedence level. Operators of higher precedence are used before operators of lower precedence. The only thing that can change that order is the presence of parentheses. The precedence order for arithmetic operators places multiplication and division above addition and subtraction. If two operators of equal precedence appear, then a left-to-right ordering or associativity is used.
Let’s interpret the troublesome expression A + B * C using operator precedence. B and C are multiplied first, and A is then added to that result. (A + B) * C would force the addition of A and B to be done first before the multiplication. In expression A + B + C, by precedence (via associativity), the leftmost + would be done first.
Although all this may be obvious to you, remember that computers need to know exactly what operators to perform and in what order. One way to write an expression that guarantees there will be no confusion with respect to the order of operations is to create what is called a fully parenthesized expression. This type of expression uses one pair of parentheses for each operator. The parentheses dictate the order of operations; there is no ambiguity. There is also no need to remember any precedence rules.
The expression A + B * C + D can be rewritten as ((A + (B * C)) + D) to show that the multiplication happens first, followed by the leftmost addition. A + B + C + D can be written as (((A + B) + C) + D) since the addition operations associate from left to right.
There are two other very important expression formats that may not seem obvious to you at first. Consider the infix expression A + B. What would happen if we moved the operator before the two operands? The resulting expression would be + A B. Likewise, we could move the operator to the end. We would get A B +. These look a bit strange.
These changes to the position of the operator with respect to the operands create two new expression formats, prefix and postfix. Prefix expression notation requires that all operators precede the two operands that they work on. Postfix, on the other hand, requires that its operators come after the corresponding operands. A few more examples should help to make this a bit clearer (see Table 2).
A + B * C would be written as + A * B C in prefix. The multiplication operator comes immediately before the operands B and C, denoting that * has precedence over +. The addition operator then appears before the A and the result of the multiplication.
In postfix, the expression would be A B C * +. Again, the order of operations is preserved since the * appears immediately after the B and the C, denoting that * has precedence, with + coming after. Although the operators moved and now appear either before or after their respective operands, the order of the operands stayed exactly the same relative to one another.
Infix Expression | Prefix Expression | Postfix Expression |
---|---|---|
A + B | + A B | A B + |
A + B * C | + A * B C | A B C * + |
Now consider the infix expression (A + B) * C. Recall that in this case, infix requires the parentheses to force the performance of the addition before the multiplication. However, when A + B was written in prefix, the addition operator was simply moved before the operands, + A B. The result of this operation becomes the first operand for the multiplication. The multiplication operator is moved in front of the entire expression, giving us * + A B C. Likewise, in postfix A B + forces the addition to happen first. The multiplication can be done to that result and the remaining operand C. The proper postfix expression is then A B + C *.
Consider these three expressions again (see Table 3). Something very important has happened. Where did the parentheses go? Why don’t we need them in prefix and postfix? The answer is that the operators are no longer ambiguous with respect to the operands that they work on. Only infix notation requires the additional symbols. The order of operations within prefix and postfix expressions is completely determined by the position of the operator and nothing else. In many ways, this makes infix the least desirable notation to use.
Infix Expression | Prefix Expression | Postfix Expression |
---|---|---|
(A + B) * C | * + A B C | A B + C * |
Table 4 shows some additional examples of infix expressions and the equivalent prefix and postfix expressions. Be sure that you understand how they are equivalent in terms of the order of the operations being performed.
Infix Expression | Prefix Expression | Postfix Expression |
---|---|---|
A + B * C + D | + + A * B C D | A B C * + D + |
(A + B) * (C + D) | * + A B + C D | A B + C D + * |
A * B + C * D | + * A B * C D | A B * C D * + |
A + B + C + D | + + + A B C D | A B + C + D + |
4.9.1. Conversion of Infix Expressions to Prefix and Postfix¶
So far, we have used ad hoc methods to convert between infix expressions and the equivalent prefix and postfix expression notations. As you might expect, there are algorithmic ways to perform the conversion that allow any expression of any complexity to be correctly transformed.
The first technique that we will consider uses the notion of a fully parenthesized expression that was discussed earlier. Recall that A + B * C can be written as (A + (B * C)) to show explicitly that the multiplication has precedence over the addition. On closer observation, however, you can see that each parenthesis pair also denotes the beginning and the end of an operand pair with the corresponding operator in the middle.
Look at the right parenthesis in the subexpression (B * C) above. If we were to move the multiplication symbol to that position and remove the matching left parenthesis, giving us B C *, we would in effect have converted the subexpression to postfix notation. If the addition operator were also moved to its corresponding right parenthesis position and the matching left parenthesis were removed, the complete postfix expression would result (see Figure 6).
Figure 6: Moving Operators to the Right for Postfix Notation¶
If we do the same thing but instead of moving the symbol to the position of the right parenthesis, we move it to the left, we get prefix notation (see Figure 7). The position of the parenthesis pair is actually a clue to the final position of the enclosed operator.
Figure 7: Moving Operators to the Left for Prefix Notation¶
So in order to convert an expression, no matter how complex, to either prefix or postfix notation, fully parenthesize the expression using the order of operations. Then move the enclosed operator to the position of either the left or the right parenthesis depending on whether you want prefix or postfix notation.
Here is a more complex expression: (A + B) * C - (D - E) * (F + G). Figure 8 shows the conversion to postfix and prefix notations.
Figure 8: Converting a Complex Expression to Prefix and Postfix Notations¶
4.9.2. General Infix-to-Postfix Conversion¶
We need to develop an algorithm to convert any infix expression to a postfix expression. To do this we will look closer at the conversion process.
Consider once again the expression A + B * C. As shown above, A B C * + is the postfix equivalent. We have already noted that the operands A, B, and C stay in their relative positions. It is only the operators that change position. Let’s look again at the operators in the infix expression. The first operator that appears from left to right is +. However, in the postfix expression, + is at the end since the next operator, *, has precedence over addition. The order of the operators in the original expression is reversed in the resulting postfix expression.
As we process the expression, the operators have to be saved somewhere since their corresponding right operands are not seen yet. Also, the order of these saved operators may need to be reversed due to their precedence. This is the case with the addition and the multiplication in this example. Since the addition operator comes before the multiplication operator and has lower precedence, it needs to appear after the multiplication operator is used. Because of this reversal of order, it makes sense to consider using a stack to keep the operators until they are needed.
What about (A + B) * C? Recall that A B + C * is the postfix equivalent. Again, processing this infix expression from left to right, we see + first. In this case, when we see *, + has already been placed in the result expression because it has precedence over * by virtue of the parentheses. We can now start to see how the conversion algorithm will work. When we see a left parenthesis, we will save it to denote that another operator of high precedence will be coming. That operator will need to wait until the corresponding right parenthesis appears to denote its position (recall the fully parenthesized technique). When that right parenthesis does appear, the operator can be popped from the stack.
As we scan the infix expression from left to right, we will use a stack to keep the operators. This will provide the reversal that we noted in the first example. The top of the stack will always be the most recently saved operator. Whenever we read a new operator, we will need to consider how that operator compares in precedence with the operators, if any, already on the stack.
Assume the infix expression is a string of tokens delimited by spaces. The operator tokens are *, /, +, and -, along with the left and right parentheses, ( and ). The operand tokens are the single-character identifiers A, B, C, and so on. The following steps will produce a string of tokens in postfix order.
Create an empty stack called for keeping operators. Create an empty list for output.
Convert the input infix string to a list by using the string method .
Scan the token list from left to right.
If the token is an operand, append it to the end of the output list.
If the token is a left parenthesis, push it on the .
If the token is a right parenthesis, pop the until the corresponding left parenthesis is removed. Append each operator to the end of the output list.
If the token is an operator, *, /, +, or -, push it on the . However, first remove any operators already on the that have higher or equal precedence and append them to the output list.
When the input expression has been completely processed, check the . Any operators still on the stack can be removed and appended to the end of the output list.
Figure 9 shows the conversion algorithm working on the expression A * B + C * D. Note that the first * operator is removed upon seeing the + operator. Also, + stays on the stack when the second * occurs, since multiplication has precedence over addition. At the end of the infix expression the stack is popped twice, removing both operators and placing + as the last operator in the postfix expression.
Figure 9: Converting A * B + C * D to Postfix Notation¶
In order to code the algorithm in Python, we will use a dictionary called to hold the precedence values for the operators. This dictionary will map each operator to an integer that can be compared against the precedence levels of other operators (we have arbitrarily used the integers 3, 2, and 1). The left parenthesis will receive the lowest value possible. This way any operator that is compared against it will have higher precedence and will be placed on top of it. Line 15 defines the operands to be any upper-case character or digit. The complete conversion function is shown in ActiveCode 1.
A few more examples of execution in the Python shell are shown below.
4.9.3. Postfix Evaluation¶
As a final stack example, we will consider the evaluation of an expression that is already in postfix notation. In this case, a stack is again the data structure of choice. However, as you scan the postfix expression, it is the operands that must wait, not the operators as in the conversion algorithm above. Another way to think about the solution is that whenever an operator is seen on the input, the two most recent operands will be used in the evaluation.
To see this in more detail, consider the postfix expression . As you scan the expression from left to right, you first encounter the operands 4 and 5. At this point, you are still unsure what to do with them until you see the next symbol. Placing each on the stack ensures that they are available if an operator comes next.
In this case, the next symbol is another operand. So, as before, push it and check the next symbol. Now we see an operator, *. This means that the two most recent operands need to be used in a multiplication operation. By popping the stack twice, we can get the proper operands and then perform the multiplication (in this case getting the result 30).
We can now handle this result by placing it back on the stack so that it can be used as an operand for the later operators in the expression. When the final operator is processed, there will be only one value left on the stack. Pop and return it as the result of the expression. Figure 10 shows the stack contents as this entire example expression is being processed.
Figure 10: Stack Contents During Evaluation¶
Figure 11 shows a slightly more complex example, 7 8 + 3 2 + /. There are two things to note in this example. First, the stack size grows, shrinks, and then grows again as the subexpressions are evaluated. Second, the division operation needs to be handled carefully. Recall that the operands in the postfix expression are in their original order since postfix changes only the placement of operators. When the operands for the division are popped from the stack, they are reversed. Since division is not a commutative operator, in other words \(15/5\) is not the same as \(5/15\), we must be sure that the order of the operands is not switched.
Figure 11: A More Complex Example of Evaluation¶
Assume the postfix expression is a string of tokens delimited by spaces. The operators are *, /, +, and - and the operands are assumed to be single-digit integer values. The output will be an integer result.
Create an empty stack called .
Convert the string to a list by using the string method .
Scan the token list from left to right.
If the token is an operand, convert it from a string to an integer and push the value onto the .
If the token is an operator, *, /, +, or -, it will need two operands. Pop the twice. The first pop is the second operand and the second pop is the first operand. Perform the arithmetic operation. Push the result back on the .
When the input expression has been completely processed, the result is on the stack. Pop the and return the value.
The complete function for the evaluation of postfix expressions is shown in ActiveCode 2. To assist with the arithmetic, a helper function is defined that will take two operands and an operator and then perform the proper arithmetic operation.
It is important to note that in both the postfix conversion and the postfix evaluation programs we assumed that there were no errors in the input expression. Using these programs as a starting point, you can easily see how error detection and reporting can be included. We leave this as an exercise at the end of the chapter.
Objective: Given a Postfix expression, write an algorithm to convert it into Infix expression.
Example:
Input: Postfix expression: A B + Output: Infix expression- (A + B) Input: Postfix expression: ABC/-AK/L-* Output: Infix expression: ((A-(B/C))*((A/K)-L))Approach: Use Stack
Algorithm:
Iterate the given expression from left to right, one character at a time
- If a character is operand, push it to stack.
- If a character is an operator,
- pop operand from the stack, say it’s s1.
- pop operand from the stack, say it’s s2.
- perform (s2 operator s1) and push it to stack.
- Once the expression iteration is completed, initialize the result string and pop out from the stack and add it to the result.
- Return the result.
Please walk through the example below for more understanding.
Java Code:
Output:
Postfix Expression: ABC/-AK/L-* Infix Expression: ((A-(B/C))*((A/K)-L))To infix postfix
Postfix to Infix Converter with Built-in Dynamic Tutorial
How to Convert Postfix Notation to Infix Notation Using Stack
Working from left to right, scan each character of the postfix expression, and take one of the following two actions.
If the character is an operand, push it to the stack.
If the character is an operator, pop the top value from the stack for its right operand and pop the next top value from the stack for its left operand. Finally, insert the operator between its operands, place the infix string within a set of parenthesis, and then push the infix string back to the stack.
Repeat the above scanning and subsequent actions until all postfix characters have been handled. If the postfix expression was valid, you should be left with a single element in the stack, which is the infix equivalent of the postfix expression.
Posfix to Infix Conversion Examples
The following are two examples showing how to apply the conversion process detailed in the previous section.
Example #1: 5 6 2 ^ 2 - *
562^2-*
The first character scanned is "5", which is an operand, so push it to the stack.
562^2-*
The next character scanned is "6", which is an operand, so push it to the stack.
562^2-*
The next character scanned is "2", which is an operand, so push it to the stack.
562^2-*
The next character scanned is "^", which is an operator, so pop its two operands from the stack. Pop 2 from the stack for the right operand and then pop 6 from the stack for the left operand. Next, insert the "^" between its two operands to form the infix string 6^2, and then place that string inside a set of parenthesis.
5 | |
Stack | Infix String |
Next, push the infix string (6 ^ 2) to the stack.
(6 ^ 2) 5 | |
Stack | Infix String |
562^2-*
The next character scanned is "2", which is an operand, so push it to the stack.
2 (6 ^ 2) 5 | |
Stack | Infix String |
562^2-*
The next character scanned is "-", which is an operator, so pop its two operands from the stack. Pop 2 from the stack for the right operand and then pop (6 ^ 2) from the stack for the left operand. Next, insert the "-" between its two operands to form the infix string (6 ^ 2)-2, and then place that string inside a set of parenthesis.
5 | |
Stack | Infix String |
Next, push the infix string ((6 ^ 2) - 2) to the stack.
((6 ^ 2) - 2) 5 | |
Stack | Infix String |
562^2-*
The next character scanned is "*", which is an operator, so pop its two operands from the stack. Pop ((6 ^ 2) - 2) from the stack for the right operand and then pop 5 from the stack for the left operand. Next, insert the "*" between its two operands to form the infix string 5*((6 ^ 2) - 2), and then place that string inside a set of parenthesis.
Stack | Infix String |
Next, push the infix string (5 * ((6 ^ 2) - 2)) to the stack.
(5 * ((6 ^ 2) - 2)) | |
Stack | Infix String |
Since we are done scanning characters, the remaining element in the stack ((5 * ((6 ^ 2) - 2))) becomes the result of the postfix to infix conversion.
Postfix notation: 5 6 2 ^ 2 - *Infix equivalent: (5 * ((6 ^ 2) - 2))
Example #2: 7 2 ^ 25 10 5 / + * 13 -
72^25105/+*13-
The first character scanned is "7", which is an operand, so push it to the stack.
72^25105/+*13-
The next character scanned is "2", which is an operand, so push it to the stack.
72^25105/+*13-
The next character scanned is "^", which is an operator, so pop its two operands from the stack. Pop 2 from the stack for the right operand and then pop 7 from the stack for the left operand. Next, insert the "^" between its two operands to form the infix string 7^2, and then place that string inside a set of parenthesis.
Stack | Infix String |
Next, push the infix string (7 ^ 2) to the stack.
(7 ^ 2) | |
Stack | Infix String |
72^25105/+*13-
The next character scanned is "25", which is an operand, so push it to the stack.
25 (7 ^ 2) | |
Stack | Infix String |
72^25105/+*13-
The next character scanned is "10", which is an operand, so push it to the stack.
10 25 (7 ^ 2) | |
Stack | Infix String |
72^25105/+*13-
The next character scanned is "5", which is an operand, so push it to the stack.
5 10 25 (7 ^ 2) | |
Stack | Infix String |
72^25105/+*13-
The next character scanned is "/", which is an operator, so pop its two operands from the stack. Pop 5 from the stack for the right operand and then pop 10 from the stack for the left operand. Next, insert the "/" between its two operands to form the infix string 10/5, and then place that string inside a set of parenthesis.
25 (7 ^ 2) | |
Stack | Infix String |
Next, push the infix string (10 / 5) to the stack.
(10 / 5) 25 (7 ^ 2) | |
Stack | Infix String |
72^25105/+*13-
The next character scanned is "+", which is an operator, so pop its two operands from the stack. Pop (10 / 5) from the stack for the right operand and then pop 25 from the stack for the left operand. Next, insert the "+" between its two operands to form the infix string 25+(10 / 5), and then place that string inside a set of parenthesis.
(7 ^ 2) | |
Stack | Infix String |
Next, push the infix string (25 + (10 / 5)) to the stack.
(25 + (10 / 5)) (7 ^ 2) | |
Stack | Infix String |
72^25105/+*13-
The next character scanned is "*", which is an operator, so pop its two operands from the stack. Pop (25 + (10 / 5)) from the stack for the right operand and then pop (7 ^ 2) from the stack for the left operand. Next, insert the "*" between its two operands to form the infix string (7 ^ 2)*(25 + (10 / 5)), and then place that string inside a set of parenthesis.
((7 ^ 2) * (25 + (10 / 5))) | |
Stack | Infix String |
Next, push the infix string ((7 ^ 2) * (25 + (10 / 5))) to the stack.
((7 ^ 2) * (25 + (10 / 5))) | |
Stack | Infix String |
72^25105/+*13-
The next character scanned is "13", which is an operand, so push it to the stack.
13 ((7 ^ 2) * (25 + (10 / 5))) | |
Stack | Infix String |
72^25105/+*13-
The next character scanned is "-", which is an operator, so pop its two operands from the stack. Pop 13 from the stack for the right operand and then pop ((7 ^ 2) * (25 + (10 / 5))) from the stack for the left operand. Next, insert the "-" between its two operands to form the infix string ((7 ^ 2) * (25 + (10 / 5)))-13, and then place that string inside a set of parenthesis.
(((7 ^ 2) * (25 + (10 / 5))) - 13) | |
Stack | Infix String |
Next, push the infix string (((7 ^ 2) * (25 + (10 / 5))) - 13) to the stack.
(((7 ^ 2) * (25 + (10 / 5))) - 13) | |
Stack | Infix String |
Since we are done scanning characters, the remaining element in the stack ((((7 ^ 2) * (25 + (10 / 5))) - 13)) becomes the result of the postfix to infix conversion.
Postfix notation: 7 2 ^ 25 10 5 / + * 13 -Infix equivalent: (((7 ^ 2) * (25 + (10 / 5))) - 13)
Postfix to Infix Conversion
Algorithm of Postfix to Infix
Expression = abc-+de-fg-h+/* 1.While there are input symbol left 2. Read the next symbol from input. 3. If the symbol is an operand Push it onto the stack. 4. Otherwise, the symbol is an operator. 5. If there are fewer than 2 values on the stack Show Error /* input not sufficient values in the expression */ 6. Else Pop the top 2 values from the stack. Put the operator, with the values as arguments and form a string. Encapsulate the resulted string with parenthesis. Push the resulted string back to stack. 7. If there is only one value in the stack That value in the stack is the desired infix string. 8. If there are more values in the stack Show Error /* The user input has too many values */Postfix to Infix conversion
Example
abc-+de-fg-h+/*Expression | Stack |
---|---|
abc-+de-fg-h+/* | NuLL |
bc-+de-fg-h+/* | "a" |
c-+de-fg-h+/* | |
-+de-fg-h+/* | |
+de-fg-h+/* | |
de-fg-h+/* | |
e-fg-h+/* | |
-fg-h+/* | |
fg-h+/* | |
g-h+/* | |
-h+/* | |
h+/* | |
+/* | |
/* | |
* | |
Null |
Postfix to Infix implementation in c
#include <stdio.h> #include <stdlib.h> int top = 10; struct node { char ch; struct node *next; struct node *prev; } *stack[11]; typedef struct node node; void push(node *str) { if (top <= 0) printf("Stack is Full "); else { stack[top] = str; top--; } } node *pop() { node *exp; if (top >= 10) printf("Stack is Empty "); else exp = stack[++top]; return exp; } void convert(char exp[]) { node *op1, *op2; node *temp; int i; for (i=0;exp[i]!='\0';i++) if (exp[i] >= 'a'&& exp[i] <= 'z'|| exp[i] >= 'A' && exp[i] <= 'Z') { temp = (node*)malloc(sizeof(node)); temp->ch = exp[i]; temp->next = NULL; temp->prev = NULL; push(temp); } else if (exp[i] == '+' || exp[i] == '-' || exp[i] == '*' || exp[i] == '/' || exp[i] == '^') { op1 = pop(); op2 = pop(); temp = (node*)malloc(sizeof(node)); temp->ch = exp[i]; temp->next = op1; temp->prev = op2; push(temp); } } void display(node *temp) { if (temp != NULL) { display(temp->prev); printf("%c", temp->ch); display(temp->next); } } void main() { char exp[50]; clrscr(); printf("Enter the postfix expression :"); scanf("%s", exp); convert(exp); printf("\nThe Equivalant Infix expression is:"); display(pop()); printf("\n\n"); getch(); }You will also like:
- Herbalife energy drink recipes
- Linn county fair
- Netflix movie releases 2016
- Abnb ipo price
- 2016 chevy colorado specifications
- Behavior modeling advantages disadvantages
- Planet zoo boat ride
- Sage goddess soul shift
- Towel folding ideas
Reading time: 20 minutes | Coding time: 10 minutes
We have explored an algorithm to convert a Postfix expression to Infix expression using Stack.
- Postfix
- If operator appear before operand in the expression then expression is known as Postfix operation.
- Infix
- If operator is in between every pair of operands in the expression then expression is known as Infix operation.
- Postfix Expression can easily solve by machine(computers) but for human postfix operation is difficult to evaluate.
- in the back-end side(machine) Postfix expression is necessary and in the front-end side (user) Infix expression is necessary.
- So let's Study how to convert Postfix expression into infix expression.
- Prerequisite :
- Basics of Stack data structure
- Basics of List in Python
Steps to Convert Postfix to Infix :
- Read the symbol from the input .based on the input symbol go to step 2 or 3.
- If symbol is operand then push it into stack.
- If symbol is operator then pop top 2 values from the stack.
- this 2 popped value is our operand .
- create a new string and put the operator between this operand in string.
- push this string into stack.
- At the end only one value remain in stack which is our infix expression.
Implementation :
Output :
Time Complexity :
Time complexity of above implementation is O(n) where n is number of character in postfix expression.