Algorithm To Convert An Expression From Postfix To Prefix Notation:
See Also:
C Program To Implement Postfix To Infix Conversion
C Program To Implement Postfix To Prefix Conversion
C Program To Implement Infix To Prefix Conversion
C Program To Implement Infix To Postfix Conversion
How To Evaluate Postfix Expressions
C Program To Evaluate Postfix Expression Using Array
C Program To Evaluate Postfix Expression Using Linked List
How To Balance The Given Expressions
C Program For Balancing Expressions Using Array
C Program For Balancing Expressions Using Linked List
- If the scanned character is a digit, then push it into the stack.
- If the scanned character is an operator, then pop two elements from the stack. Form a string containing scanned operator and two popped elements. Push the resultant string into the stack.
Example: 7 6 $ 5 * 5 - 1 7 / 9 9 + / +
Step 1: Scanned character is a digit '7'. So, push it into the stack.
| |
| 7 |
+-----+
Step 2: Scanned character is a digit '6'. So, push it into the stack.
| 6 |
| 7 |
+-----+
Step 3: Scanned character is an operator '$'. Pop two elements from the stack and form a string containing the scanned operator and two popped elements.
$76
| |
| |
+-----+
Push the resultant string "$76" into the stack.
| |
| $76 |
+------+
Step 4: Scanned character is a digit '5'. So, push it into the stack.
| 5 |
| $76 |
+------+
Step 5: Scanned character is an operator '*'. So, pop two elements from the stack and form a string containing the scanned operator and two popped elements. Then, push the resultant "*$765" string into the stack.
| |
| *$765 |
+--------+
Step 6: Scanned character is digit '5'. Push it into the stack.
| 5 |
| *$765 |
+--------+
Step 7: Scanned character is an operator '-'. Pop '5' and "*$765" from the stack. Form a string containing the scanned operator and two popped elements. Push the resultant string into the stack
| |
| -*$7655 |
+-----------+
Step 8: Scanned character is digit '1'. Push it into the stack.
| 1 |
| -*$7655 |
+-----------+
Step 9: Scanned character is digit '7'. Push it into the stack.
| 7 |
| 1 |
| -*$7655 |
+------------+
Step 10: Scanned character is an operator '/'. Pop top two elements from the stack. Form a string containing the scanned operator and two popped elements, push the resultant string into the stack.
| |
| /17 |
| -*$7655 |
+-----------+
Step 11: Scanned character is a digit '9'. Push it into the stack.
| 9 |
| /17 |
| -*$7655 |
+------------+
Step 12: Scanned character is a digit '9'. Push it into the stack.
| 9 |
| 9 |
| /17 |
| -*$7655 |
+------------+
Step 13: Scanned character is an operator '+'. Pop top two elements from the stack. Form a string containing the scanned operator and two popped elements, push the resultant string into the stack.
| |
| +99 |
| /17 |
| -*$7655 |
+-----------+
Step 14: Scanned character is an operator '/'.
| |
| //17+99 |
| -*$7655 |
+------------+
Step 15: Scanned character is an operator '+'. Pop top two elements from the stack. Form a string containing the scanned operator and two popped elements, push the resultant string into the stack.
| |
| |
+-----+
+ - * $ 7655//17+99
Resultant Prefix Expression: + - * $ 7655//17+99
See Also:
C Program To Implement Postfix To Infix Conversion
C Program To Implement Postfix To Prefix Conversion
C Program To Implement Infix To Prefix Conversion
C Program To Implement Infix To Postfix Conversion
How To Evaluate Postfix Expressions
C Program To Evaluate Postfix Expression Using Array
C Program To Evaluate Postfix Expression Using Linked List
How To Balance The Given Expressions
C Program For Balancing Expressions Using Array
C Program For Balancing Expressions Using Linked List
Example Program To Implement Postfix To Prefix Conversion:
#include <string.h>
#define BUFSIZE 100
char operator[] = {'/', '*', '+', '-', '%', '$'};
char stack[BUFSIZE][BUFSIZE];
int top = -1;
/* push input string into the stack */
void push(char *substr) {
char *temp;
if (top >= BUFSIZE -1) {
printf("Stack Overflow\n");
} else {
top++;
strcpy(stack[top], substr);
}
return;
}
/* pop top element from the stack & append input string with top element */
void pop(char *res) {
if (top == -1) {
printf("Stack Underflow\n");
return;
} else {
strcpy(res, stack[top]);
top--;
}
return;
}
int main() {
char expr[BUFSIZE], buffer1[BUFSIZE];
char str[BUFSIZE], buffer2[BUFSIZE], op[2];
int i, j, len, flag = 0;
printf("Enter your postfix expression:");
fgets(expr, 100, stdin);
expr[strlen(expr) - 1] = '\0';
for (i = 0; expr[i] != '\0'; i++) {
if (expr[i] == ' ')
continue;
for (j = 0; j < 6; j++) {
if (expr[i] == operator[j]) {
flag = 1;
break;
}
}
if (flag) {
/*
* scanned char is an operator. So, pop
* two elements from the stack and form a
* string composed on scanned char & two
* popped elements
*/
pop(buffer1);
pop(buffer2);
op[0] = expr[i];
op[1] = '\0';
strcpy(str, op);
strcat(str, buffer2);
strcat(str, buffer1);
push(str);
} else {
/* scanned character is digit, push it into ths stack */
op[0] = expr[i];
op[1] = '\0';
push(op);
}
flag = 0;
}
printf("Postfix to Prefix Conversion:\n");
printf("Posfix: %s\n", expr);
printf("Prefix: ");
for (i = 0; i <= top; i++) {
printf("%s",stack[i]);
}
printf("\n\n");
return 0;
}
Output: ( C Program To Implement Postfix To Prefix Conversion)
jp@jp-VirtualBox:~/$ ./a.out
Enter your postfix expression:76$5*5-17/99+/+
Postfix to Prefix Conversion:
Posfix: 76$5*5-17/99+/+
Prefix: +-*$7655//17+99
Enter your postfix expression:76$5*5-17/99+/+
Postfix to Prefix Conversion:
Posfix: 76$5*5-17/99+/+
Prefix: +-*$7655//17+99
Beautiful. Thanks for the clear layout, especially at the high level visual.
ReplyDeleteDelusional and absurd
ReplyDeleteJust kidding, it was AWESOME!