With a given Prefix Expression, we will see how to convert Prefix Expression into Postfix Expression using stack.
Algorithm to convert Prefix Expression to Postfix Expression:
In this algorithm, we will use stack to store operands during the conversion. The step are as follows:- Read the prefix string
- While the end of prefix string scanned from right to left
- symb = the current character
- If symb is an operator
- poped_sym1 = pop the stack
- poped_sym2 = pop the stack
- concat the string STR = (poped_sym1)+(poped_sym2)+ (operator)
- push the string STR into stack
- Else
- push the operand symb into stack
- End If
- End While
- postfix_str = pop the stack
Function to convert Prefix Expression to Postfix Expression:
void prefix_to_postfix(char prefix[], char postfix[]){
char op[2]; //operator string
char poped1[MAX];
char poped2[MAX];
char temp[MAX];
int i = strlen(prefix);
op[1] = '\0';
while(--i != -1){
if(prefix[i] == ' '){
continue;
}
if(isoperator(prefix[i])){
pop(poped1);
pop(poped2);
op[0] = prefix[i]; //operator
strcpy(temp, poped1);
strcat(temp, poped2);
strcat(temp, op);
push(temp);
}
else{
op[0] = prefix[i]; //operand
push(op);
}
}
pop(postfix);
}
Program to convert Prefix Expression to Postfix 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 prefix_to_postfix(char prefix[], char postfix[]){
char op[2]; //operator string
char poped1[MAX];
char poped2[MAX];
char temp[MAX];
int i = strlen(prefix);
op[1] = '\0';
while(--i != -1){
if(prefix[i] == ' '){
continue;
}
if(isoperator(prefix[i])){
pop(poped1);
pop(poped2);
op[0] = prefix[i]; //operator
strcpy(temp, poped1);
strcat(temp, poped2);
strcat(temp, op);
push(temp);
}
else{
op[0] = prefix[i]; //operand
push(op);
}
}
pop(postfix);
}
int main(){
char prefix[] = "+-*^ABCD//EF+GH"; //POSTFIX : AB^C*D-EF/GH+/+
char postfix[MAX];
prefix_to_postfix(prefix,postfix);
printf("Input Prefix Expression : %s\n",prefix);
printf("Output Postfix Expression : %s\n",postfix);
return 0;
}
Input Prefix Expression : +-*^ABCD//EF+GH Output Postfix Expression : AB^C*D-EF/GH+/+
Comments
Post a Comment