Stack that evaluates postfix expressions
hello..my goal here is to take the stack program that i already have and use it to evaluate postfix expressions from a file. I need help figuring out how to modify the stack to work with integers and evaluate the expressions. Any suggestions?
Code:
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#define TRUE 1
#define FALSE 0
struct info_node
{
int weight ;
struct info_node* next ;
} ;
struct nstack
{
struct info_node* top ;
} ;
void create_stack(struct nstack*) ;
int empty_stack(struct nstack*) ;
void push_stack(struct nstack* , struct info_node*) ;
struct info_node* pop_stack( struct nstack* ) ;
int main()
{
FILE* infile ;
int a = 0 ;
int num = 0 ;
struct nstack even_Stack ;
struct nstack odd_Stack ;
struct info_node* pnew_node = NULL ;
struct info_node* ppop_node = NULL ;
create_stack(&even_Stack) ;
create_stack(&odd_Stack) ;
infile = fopen("express.txt", "r") ;
while (!feof( infile ) )
{
a++ ;
fscanf(infile, "%d" , &num) ;
pnew_node = (struct info_node* ) malloc(sizeof(info_node) ) ;
pnew_node->weight = num ;
pnew_node->next = NULL ;
if( (num % 2) == 0 )
push_stack(&even_Stack, pnew_node) ;
else
push_stack(&odd_Stack, pnew_node) ;
}
while( !empty_stack(&even_Stack) )
{
ppop_node = pop_stack(&even_Stack) ;
num = ppop_node-> weight ;
printf("%d ", num ) ;
a++;
if( (a % 20) == 0 )
printf("\n") ;
}
printf("\n\n") ;
a = 0 ;
while( !empty_stack(&odd_Stack) )
{
ppop_node = pop_stack(&odd_Stack) ;
num = ppop_node-> weight ;
printf("%d ", num ) ;
a++;
if( (a % 20) == 0 )
printf("\n") ;
}
fclose(infile) ;
return (0) ;
} //end of func main
void create_stack(struct nstack* pnstack)
{
pnstack->top = NULL ;
return ;
} //end of func create_stack
int empty_stack(struct nstack* pnstack)
{
if (pnstack->top == NULL)
return (TRUE) ;
else
return (FALSE) ;
} //end of func empty_stack
void push_stack(struct nstack* pnstack, struct info_node* pnnode)
{
if(empty_stack(pnstack))
{
pnstack->top = pnnode ;
pnnode->next = NULL ;
}
else
{
pnnode->next = pnstack->top ;
pnstack->top = pnnode ;
}
return ;
} //end of func push_stack
struct info_node* pop_stack( struct nstack* pnstack )
{
struct info_node* prnode = NULL ;
if(empty_stack(pnstack) )
printf("ERROR: STACK IS EMPTY!!! \n") ;
else
{
prnode = pnstack->top ;
pnstack->top = pnstack->top->next ;
prnode->next = NULL ;
}
return( prnode ) ;
} // end of func pop_stack
int calc(int operand1, int oper, int operand2)
{
//Local Declaration
int result = 0 ;
//Statements
switch(oper)
{
case '+' : result = operand1 + operand2;
break ;
case '-' : result = operand1 - operand2;
break ;
case '*' : result = operand1 * operand2;
break ;
case '/' : result = operand1 / operand2;
break;
} //end of switch(oper)
return (result) ;
} //end of function calc()
Also these are the expressions i am supposed to read in from a file(express.txt):
1 2 3 * 4 / +
1 2 3 4 / * +
1 2 + 3 * 4 /
1 2 + 4 3 / *
1 2 3 * + 4 /
4 3 / 1 2 + *
6 7 8 / 9 * -
6 7 8 9 * / -
6 7 - 8 / 9 *
6 7 - 9 8 * /
6 7 8 / - 9 *
8 9 * 6 7 - /