#include <stdio.h>
#include <stdlib.h>
#define N 20
char stack[N];
int top=-1;
void push(char num)
{
if(top == N -1)
return;
stack[++top] = num;
}
char pop()
{
if(top==-1)
return;
return stack[top--];
}
int main()
{
int a,b,result,len=0;
char str[50];
char poststr[50],ps;
gets(str);
for(int i=0; str[i]!= NULL; i++)
{
if(str[i]>='0' && str[i]<='9')
{
poststr[len++]=str[i];
printf("%d",str[i]-'0');
}
else
{
switch(str[i])
{
case '+' :
case '-' :
case '*' :
case '/' : push(str[i]); break;
case ')' : ps=pop();
printf("%c", ps);
poststr[len++]=ps; break;
}
}
}
ps=pop();
printf("%c \n", ps);
poststr[len++]=ps;
poststr[len]=0;
printf("post str : %s\n",poststr); // infix->postfix
// calculate
printf("result : %d\n",calculate(poststr));
return 0;
}
int calculate(char* str)
{
top=-1;
int a, b;
for(int i=0; str[i]!= NULL; i++)
{
if(str[i]>='0' && str[i]<='9')
{
push(str[i]-'0');
}
else //+ - * /
{
a=pop();
b=pop();
switch(str[i])
{
case '+' : push(b+a); break;
case '-' : push(b-a); break;
case '*' : push(b*a); break;
case '/' : push(b/a); break;
}
}
}
return pop();
}
/*
(5+6)-(7*8)
typedef int element;
typedef struct stackNode
{
element data;
struct _node *link;
}stackNode;
stackNode *top;
void push(element item)
{
stackNode *tmp = (Node *)malloc(sizeof(Node));
tmp->data = item;
tmp->link = top;
top= tmp;
}
element pop()
{
element item;
stackNode *tmp = top;
if(top ==NULL)
{
putchar("Stack is Empty \n");
return;
}
else
{
item = tmp->data;
top = tmp->link;
free(tmp);
return item;
}
}
stackNode* find()
{
int data;
}