With a given Postfix Expression, we will see how to convert Postfix Expression into Prefix Expression using stack.
Algorithm to convert Postfix expression to Prefix expression:
In this algorithm, we will use stack to store operands during the conversion. The step are as follows:- Read the postfix string
- While the end of postfix string
- symb = the current character
- If symb is an operator
- poped_sym1 = pop the stack
- poped_sym2 = pop the stack
- concat the string STR = (operator)+(poped_sym2)+(poped_sym1)
- push the string STR into stack
- Else
- push the operand symb into stack
- End If
- End While
- prefix_str = pop the stack
Function to convert Postfix Expression to Prefix Expression:
void postfix_to_prefix(char postfix[], char prefix[]){
char op[2]; //operator string
char poped1[MAX];
char poped2[MAX];
char temp[MAX];
int i = -1;
op[1] = '\0';
while(postfix[++i]){
if(postfix[i] == ' '){
continue;
}
if(isoperator(postfix[i])){
pop(poped1);
pop(poped2);
op[0] = postfix[i]; //operator
strcpy(temp, op);
strcat(temp, poped2);
strcat(temp, poped1);
push(temp);
}
else{
op[0] = postfix[i];//operand
push(op);
}
}
pop(prefix);
}
Program to convert Postfix Expression to Prefix Expression:
#include <stdio.h>
#include <string.h>
#define MAX 30
char stack[MAX][MAX];
int top = -1;
void push(char str[]){
if(top != MAX-1){
strcpy(stack[++top], str);
}
else{
printf("Stack overflow : May be invalid postfix expression\n");
}
}
void pop(char str[]){
if(top != -1){
strcpy(str,stack[top--]);
}
else{
printf("Stack underflow : May be invalid postfix expression\n");
}
}
int isoperator(char c){
if(c == '+' || c == '-' || c == '*' || c == '/' || c == '^')
return 1;
return 0;
}
void postfix_to_prefix(char postfix[], char prefix[]){
char op[2]; //operator string
char poped1[MAX];
char poped2[MAX];
char temp[MAX];
int i = -1;
op[1] = '\0';
while(postfix[++i]){
if(postfix[i] == ' '){
continue;
}
if(isoperator(postfix[i])){
pop(poped1);
pop(poped2);
op[0] = postfix[i]; //operator
strcpy(temp, op);
strcat(temp, poped2);
strcat(temp, poped1);
push(temp);
}
else{
op[0] = postfix[i];//operand
push(op);
}
}
pop(prefix);
}
int main(){
char postfix[] = "AB^C*D-EF/GH+/+"; //PREFIX : +-*^ABCD//EF+GH
char prefix[MAX];
postfix_to_prefix(postfix,prefix);
printf("Input Postfix Expression : %s\n",postfix);
printf("Output Prefix Expression : %s\n",prefix);
return 0;
}
Input Postfix Expression : AB^C*D-EF/GH+/+ Output Prefix Expression : +-*^ABCD//EF+GH
Comments
Post a Comment