This program is a implementation of shunting yard algorithm to convert an infix expression to post fix expression, This is a extension of the stack program published earlier
Algorithm:(Taken from wikipedia)
 While there are tokens to be read:

 Read a token .
 If the token is a number, then add it to the output queue.
 If the token is a function token, then push it onto the stack.
 If the token is a function argument separator (e.g., a comma):

 Until the topmost element of the stack is a left parenthesis, pop the element from the stack and push it onto the output queue. If no left parentheses are encountered, either the separator was misplaced or parentheses were mismatched.
 If the token is an operator, o_{1}, then:

 while there is an operator, o_{2}, at the top of the stack, and either


 o_{1} is associative or leftassociative and its precedence is less than (lower precedence) or equal to that of o_{2}, or
 o_{1} is rightassociative and its precedence is less than (lower precedence) that of o_{2},
 pop o_{2} off the stack, onto the output queue;

 push o_{1} onto the stack.
 If the token is a left parenthesis, then push it onto the stack.
 If the token is a right parenthesis:

 Until the token at the top of the stack is a left parenthesis, pop operators off the stack onto the output queue.
 Pop the left parenthesis from the stack, but not onto the output queue.
 If the token at the top of the stack is a function token, pop it and onto the output queue.
 If the stack runs out without finding a left parenthesis, then there are mismatched parentheses.
 When there are no more tokens to read:

 While there are still operator tokens in the stack:

 If the operator token on the top of the stack is a parenthesis, then there are mismatched parenthesis.
 Pop the operator onto the output queue.
 Exit.
#include <stdio.h> #define size 10 char stack[size]; int tos=0,ele; void push(); char pop(); void show(); int isempty(); int isfull(); char infix[30],output[30]; int prec(char); int main() { int i=0,j=0,k=0,length; char temp; printf("\nEnter an infix expression:"); scanf("%s",infix); printf("\nThe infix expresson is %s",infix); length=strlen(infix); for(i=0;i<= prec(stack[tos1]) ) { temp=pop(); printf("\n the poped element is :%c",temp); output[j++]=temp; push(infix[i]); printf("\n The pushed element is :%c",infix[i]); show(); } else { push(infix[i]); printf("\nThe pushed element is:%c",infix[i]); show(); } } else { if(infix[i]=='(') { push(infix[i]); printf("\nThe pushed element is:%c",infix[i]); } if(infix[i]==')') { temp=pop(); while(temp!='(') {output[j++]=temp; printf("\nThe element added to Q is:%c",temp); //temp=pop(); printf("\n the poped element is :%c",temp); temp=pop();} } } } } printf("\nthe infix expression is: %s",output); } while(tos!=0) { output[j++]=pop(); } printf("the infix expression is: %s\n",output); } //Functions for operations on stack void push(int ele) { stack[tos]=ele; tos++; } char pop() { tos; return(stack[tos]); } void show() { int x=tos; printf("The Stack elements are....."); while(x!=0) printf("%c, ",stack[x]); } //Function to get the precedence of an operator int prec(char symbol) { if(symbol== '(') return 0; if(symbol== ')') return 0; if(symbol=='+'  symbol=='') return 1; if(symbol=='*'  symbol=='/') return 2; if(symbol=='^') return 3; return 0; }
thanks to you for giving the programs
it’s helpfull for the number of students
Thanks Yar! You have done a big job for my assignmnt………….
thanks to posting this article n code,,
very well it wud save tmrw
this is very use ful to students. i am also student. and how to get it’s working procedure.
thank you for giving this program it had helped me to do my practicals
thank u ur pgm is understandable and easy
really the program is easy and useful
why i can’t understand ??? who can tell me clearly..thank
Bug!
There is a bug in RPN generator
3+4*2/(15)^2 > 342*152^/+
if we put 3+ at the end…
4*2/(15)^2+3 > 42*152^3+/ must be 42*152^/3+
to correct this bug change precedence detection part…
if(prec(infix[i]) <= prec(stack[tos1])) {
temp=pop();
printf("\n the poped element is :%c",temp);
output[j++]=temp;
push(infix[i]);
printf("\n The pushed element is :%c",infix[i]);
show();
}
if(prec(infix[i]) <= prec(stack[tos1])) {
while (prec(infix[i]) <= prec(stack[tos1])) {
temp=pop();
printf("\n the poped element is :%c",temp);
output[j++]=temp;
}
push(infix[i]);
printf("\n The pushed element is :%c",infix[i]);
show();
}
while (prec(infix[i]) 0 && prec(infix[i]) <= prec(stack[tos1]))
Thanks yaar.
Dis helped me a lot in my data structure lab.
it is very logical………
thank u for the program…………
Thanks for uploading pal..it’s very useful to my practicals..Many thanks.. ( @ _ @ )
yr plz i give one problem plz solve this i need a programme to convert infix to postfix this expression 5*4/4+65*5/7
this programme is good but i cn’t understand it properly.
Thanks Satish its a beautiful program & well organized one …..I found it beneficial!!!
Thanx 4 doing this pgm so easy u have solved my big pblm