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

Welcome to the new platform of Programmer's Heaven! We apologize for the inconvenience caused, if you visited us from a broken link of the previous version. The main reason to move to a new platform is to provide more effective and collaborative experience to you all. Please feel free to experience the new platform and use its exciting features. Contact us for any issue that you need to get clarified. We are more than happy to help you.

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.