自己原来做的,送给你吧,希望可以帮到你
#include
#include
#include
typedef int datatype;
#define MAXLEN 100
typedef struct
{
datatype data[MAXLEN];
int top;
}seqstack;
void main(); //声明主函数
void createseqstack(seqstack &s) //初始化栈为空
{
s.top=-1;
}
void clean() //错误的处理:返回主函数重新开始
{
Sleep(3000); //清屏前等待时间
system("CLS"); //执行清屏
main(); //重新执行主函数
}
void add(seqstack &s) //执行相加
{
if(s.top==NULL)
{
printf("读取数据失败,3秒后自动返回...");
clean();
}
else
{
int x,y;
x=s.data[s.top];
y=s.data[s.top-1];
s.data[s.top-1]=x+y;
s.top--;
}
}
void subtract(seqstack &s) //执行相减
{
if(s.top==NULL)
{
printf("读取数据失败,3秒后自动返回...");
clean();
}
else
{
int x,y;
x=s.data[s.top];
y=s.data[s.top-1];
s.data[s.top-1]=y-x;
s.top--;
}
}
void multiply(seqstack &s) //执行相乘
{
if(s.top==NULL)
{
printf("读取数据失败,3秒后自动返回...");
clean();
}
else
{
int x,y;
x=s.data[s.top];
y=s.data[s.top-1];
s.data[s.top-1]=x*y;
s.top--;
}
}
void divide(seqstack &s) //执行相除
{
if(s.top==NULL)
{
printf("读取数据失败,3秒后自动返回...");
clean();
}
else
{
int x,y;
x=s.data[s.top];
y=s.data[s.top-1];
s.data[s.top-1]=y/x;
s.top--;
}
}
void input(seqstack &s)
{
int i,sum,ch;
char str[MAXLEN];
scanf("%s",&str);
sum=strlen(str);
for(i=0;i<=sum+1&&ch!='\0';i++)
{
ch=str[i];
switch(ch)
{
case '+': add(s);break;
case '-': subtract(s);break;
case '*': multiply(s);break;
case '/': divide(s);break;
default:
while(ch-48>=0&&ch-48<=9)
{
if(MAXLEN-1==s.top) //判栈满
{
printf("栈已满!");
exit(0);
}
else
{
s.top++; //入栈操作
s.data[s.top]=ch-48;
}
break;
}
break;
}
}
}
void output(seqstack &s) //输出栈顶元素
{
if(s.top==-1)
{
printf("栈为空,读取数据失败!3秒后自动返回...");
clean();
}
else
{printf("您输入的后缀表达式的值为:%2d\n",s.data[s.top]);}
}
void main()
{
seqstack s;
createseqstack(s);
printf("==============后缀表达式求值==============\n");
printf("输入要求:\n\t操作数范围0—9,运算符只含+,-,*,/,\n\t而且中间绝对不可以有空格!!!\n");
printf("==========================================\n");
printf("请输入一个整数后缀表达式:");
input(s);
output(s);
}