#include<stdio.h> #include<conio.h> #include<malloc.h> #define MAX 20 char stack[MAX]; int top = -1; char pop(); void push(char item); int prcd(char symbol) { switch(symbol) { case '+': case '-': return 2; case '*': case '/': return 4; case '^': case '$': return 6; case '(': case ')': case '#': return 1; } } int isoperator(char symbol) { switch(symbol) { case '+': case '-': case '*': case '/': case '^': case '$': case '(': case ')': return 1; default: return 0; } } void convertip(char infix[],char prefix[]) { int i,symbol,j=0; char test[MAX]; infix=strrev(infix); stack[++top]='#'; for(i=0;iprcd(stack[top])) { push(symbol); }else { while(prcd(symbol)<=prcd(stack[top])) { prefix[j]=pop(); j++; } push(symbol); }//end of else. }//end of else. }//end of else. }//end of for. while(stack[top]!='#') { prefix[j]=pop(); j++; } prefix[j]='\0';//null terminate string. prefix=strrev(prefix); } int main() { char infix[20],prefix[20]; clrscr(); printf("Enter the valid infix string : "); gets(infix); convertip(infix,prefix); printf("The corresponding prefix string is : "); puts(prefix); getch(); return 0; } void push(char item) { top++; stack[top]=item; } char pop() { char a; a=stack[top]; top--; return a; }
INPUT Enter the valid infix string : (a+b)*(c-d) OUTPUT The corresponding prefix string is : *+ab-cd