Infix to postfix implementation - Programmers Heaven

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Categories

Infix to postfix implementation

zeroeightzeroeight Posts: 1Member
Hi guys,

I'm a newbie here, I just want to seek for help regarding my program. I want to implement a infix to postfix conversion only accepting numbers. Right now, I already debugged the errors and encountering loop everytime I execute it.

Here's my sample code:

********************************************************************

#include
#include
#include


struct stack_elem
{
char elem[10];
int topelem;
} stckmain;

void intoposconvert(char *infix, char *postfix, struct stack_elem *st)
{
char *inf, *pos;
struct stack_elem *s;
char temp;
int tctr;
inf = &infix[0];
pos = &postfix[0];
s = st;

while(*inf){
if ( *inf == '(' )
{
tctr=++s->topelem; /* increment the topelem */
s->elem[tctr]=*inf; /*push*/
temp=s->elem[tctr]; /*assign value pushed in stack in temp*/
inf++;
}
else if ( *inf == ')' )
{
while ( temp != '(' )
{
tctr=s->topelem; /*assign top in tmp*/
temp=s->elem[tctr]; /*assign value to be popped in temp*/
--s->topelem; /*pop*/
*pos=temp;
pos++;
inf++;
}
}
else if (*inf == '*' || *inf == '/') /*data coming from ICP*/
{
if( s->topelem == -1 || s->elem[tctr] == '(' ) /*if stack is empty or entity in stack is '('*/
{
tctr=++s->topelem;
s->elem[tctr]=*inf;
temp=s->elem[tctr];
inf++;
}
else /*else stack is not empty*/
{
temp=s->elem[tctr];
if(temp == '+' || temp == '-')
{
tctr=++s->topelem;
s->elem[tctr]=*inf;
inf++;
}
else if (temp == '^')
{
tctr=s->topelem;
temp=s->elem[tctr];
--s->topelem;
*pos=temp;
pos++;
inf++;
}
else if (temp == '*' || temp == '/')
{
tctr=s->topelem;
temp=s->elem[tctr];
--s->topelem;
*pos=temp;
pos++;
inf++;
tctr=++s->topelem;
s->elem[tctr]=*inf;
}
}
}
else if (*inf == '+' || *inf == '-')
{
if( s->topelem == -1 || s->elem[tctr] == '(' ) /*if stack is empty or entity in stack is '('*/
{
tctr=++s->topelem;
s->elem[tctr]=*inf;
temp=s->elem[tctr];
inf++;
}
else
{
temp=s->elem[tctr];
if(temp == '*' || temp == '/' || temp == '^')
{
tctr=s->topelem;
temp=s->elem[tctr];
--s->topelem;
*pos=temp;
pos++;
inf++;
}
else if(temp == '+' || temp == '-')
{
tctr=s->topelem;
temp=s->elem[tctr];
--s->topelem;
*pos=temp;
pos++;
inf++;
tctr=++s->topelem;
s->elem[tctr]=*inf;
}
}
}
else if( isdigit(*inf) != 0)
{
temp=*inf;
*pos=temp;
pos++;
inf++;
}
else
printf("
Not a valid input.");
}
}

main()
{

char infix[50], postfix[50];
struct stack_elem *st;

clrscr();
st = &stckmain;
strcpy(stckmain.topelem, -1);
strcpy(stckmain.elem[0], "");

printf("Enter infix statement: ");
/*scanf("%d",&infix[0]);*/
fflush(stdin);
gets(infix);
intoposconvert(&infix[0], &postfix[0], st);
printf("
Result in postfix statement: ");
printf("%s", postfix);
getch();

}

***********************************************************************

Thanks!
-AR
Sign In or Register to comment.