#include<stdio.h> #include<conio.h> #include<string.h> #include<stdlib.h> struct Node { char data; struct Node* next; }; struct Node* top=NULL; struct Node* createNode(char ch) { struct Node* newNode=(struct Node*)malloc(sizeof(struct Node)); newNode->data=ch; newNode->next=NULL; return newNode; } void push(char data) { if(top==NULL) { top=createNode(data); } else { struct Node* newNode=createNode(data); newNode->next=top; top=newNode; } } char pop() { if(top==NULL) { printf("Stack is Empty"); return '\0'; }else { char temp=top->data; top=top->next; return temp; } } char peek() { return top->data; } int prec(char op) { switch (op) { case '+': case '-': return 1; case '*': case '/': return 2; case '^': return 3; } return -1; } void infixToPostfix(char *infix,char* postfix) { int i=0; int j=0; while(infix[i]!='\0') { char c=infix[i]; if((c>='a'&& c<='z') || (c>='A' && c<='Z')) { postfix[j++]=c; } else if(c=='(') { push(c); } else if(c==')') { while(peek()!='(') { postfix[j++]=peek(); pop(); } pop(); } else { while((top!=NULL) && (peek()!='(') && prec(peek())>=prec(c) ) { postfix[j++]=pop(); } push(c); } i++; } while(top!=NULL) { postfix[j++]=pop(); } } int main() { char infix[100]={'\0'},postfix[100]={'\0'}; clrscr(); printf("Enter Infix Expression : "); scanf("%s",&infix); infixToPostfix(infix,postfix); printf("%s",postfix); getch(); return 0; }