后缀表达式求值算法。。。栈的应用
#include<stdio.h>
#include<stdlib.h>
#define StackMaxSize 30
typedef int ElemType;
struct Stack
{
ElemType elem[StackMaxSize];
int top;
}s;
void Push(ElemType x)
{
if(s.top = StackMaxSize - 1)
printf("stack is full!\n");
else
s.elem[++s.top] = x;
}
ElemType Pop()
{
ElemType e;
if(s.top == -1)
printf("stack is empty!\n");
else
e = s.elem[s.top--];
return e;
}
void ExprCompute(char *str)
{
char ch;
int i = 0, x;
ch = str[i++];
while(ch != '@')
{
switch(ch)
{
case '+':
x = Pop() + Pop();
break;
case '-':
x = Pop();
x = Pop() - x;
break;
case '*':
x = Pop() * Pop();
break;
case '/':
x = Pop();
if(x != 0)
x = Pop() / x;
else
{
printf("Divided by 0 !\n");
exit(1);
}
break;
default:
x = ch - 30;
break;
while(str[i] >= '0' && str[i] <= '9')
{
x = x * 10 + str[i] - 30;
i++;
}
}
Push(x);
ch = str[i++];
}
if(s.top > -1)
{
x = Pop();
if(s.top == -1)
return ;
else
{
printf("expression error !\n");
exit(1);
}
}
else
{
printf("Stack is empty!\n");
exit(1);
}
}
void main()
{
s.top = -1;
char str[20];
printf("please input a string ended with a @:");
gets(str);
for(int i = 0;str[i] != '@'; i++)
{
ExprCompute(str);
}
}
出啥错了?、求助
[解决办法]
#include<stdio.h>#include<stdlib.h>#define StackMaxSize 30typedef int ElemType;struct Stack{ ElemType elem[StackMaxSize]; int top;}s;void Push(ElemType x){ if(s.top ==StackMaxSize - 1) //判断错误 printf("stack is full!\n"); else s.elem[s.top++] = x; //}ElemType Pop(){ ElemType e; if(s.top == -1) printf("stack is empty!\n"); else e = s.elem[s.top--]; return e;}void ExprCompute(char *str){ char ch; int i = 0, x; ch = str[i++]; while(ch != '@') { switch(ch) { case '+': x = Pop() + Pop(); break; case '-': x = Pop(); x = Pop() - x; break; case '*': x = Pop() * Pop(); break; case '/': x = Pop(); if(x != 0) x = Pop() / x; else { printf("Divided by 0 !\n"); exit(1); } break; default: x = ch - 48; // break; while(str[i] >= '0' && str[i] <= '9') { x = x * 10 + str[i] - 48; // i++; } } Push(x); ch = str[i++]; } if(s.top > -1) { x = Pop(); if(s.top == -1) return ; else { printf("expression error !\n"); exit(1); } } else { printf("Stack is empty!\n"); exit(1); }}void main(){ s.top = -1; char str[20]; printf("please input a string ended with a @:"); gets(str); ExprCompute(str);}