#include<stdio.h>
#include<conio.h>
#include<io.h>
#include<string.h>
#include<stdlib.h>
const int size = 50;
char infix[50],postfix[50],stack[50];
int top=-1;
int precedence(char chk);
char pop();
char topelement();
void push(char ch);
int main()
{ char ele,elem;
int prep,pre,popped,j=0,ch=0,i;
//clrscr();
// clrscr();
strcpy(postfix," ");
gets(infix);
for(i=0;infix[i]!=0;i++)
{
if(infix[i]!='('&&infix[i]!=')'&&!infix[i]!='^'&&infix[i]!='*'
&&infix[i]!='/'&&infix[i]!='+'&&infix[i]!='-')
postfix[j++]=infix[i];
else if(infix[i]=='(')
{
elem=infix[i];
push(elem);
}
else if(infix[i]==')')
{
while((popped=pop())!='(')
postfix[j++]=popped;
}
else
{
elem=infix[i];
pre=precedence(elem);
ele=topelement();
prep=precedence(ele);
if(pre>prep)
push(elem);
else
{while(prep>=pre)
{
if(ele=='#')
break;
popped=pop();
ele=topelement();
postfix[j++]=popped;
prep=precedence(ele);
}
push(elem);
}
}
}
while((popped=pop())!='#')
postfix[j++]=popped;
postfix[j]='\0';
printf("The postfix is: %s",postfix);
getch();
system("pause");
return 0;
}
int precedence(char ch)
{
switch(ch)
{
case'^':return 5;
case'/':return 4;
case'*':return 4;
case'+':return 3;
case'-':return 3;
default :return 0;
}
}
char pop()
{
char ret;
if(top!=-1)
{ret=stack[top];
top--;
return ret;
}
else
return '#';
}
char topelement()
{
char ch;
if(top!=-1)
ch=stack[top];
else
ch= '#';
return ch;
}
void push(char ch)
{
if(top!=size-1)
{top++;
stack[top]=ch;
}
}
This post has been edited by sarmanu: 02 October 2010 - 07:41 AM
Reason for edit:: Added code tags.

New Topic/Question
Reply




MultiQuote





|