📄 main.c
字号:
#include<stdio.h>
#include<malloc.h>
#include<math.h>
#include"definition.h"
int main()
{
SqStack Optr, Opnd, tmp;
int a, e, i, j, flag;
if( InitStack(&Optr) ){//运算符栈
printf("创建堆栈失败。\n");
return 1;
}
if( InitStack(&Opnd) ){//运算数栈
printf("创建堆栈失败。\n");
return 1;
}
if( InitStack(&tmp) ){//临时栈
printf("创建堆栈失败。\n");
return 1;
}
//接收表达式
printf("请输入一个算术表达式:");
e=getchar();
while( (flag=Chk(e)) && ( e!='\n'||GetTop(&Optr) ) ){//如果输入合法
if(flag==2){
//运算数入栈
for( i=0,j=0; tmp.base != tmp.top; j++ ){
a=Pop(&tmp)-48;
a *= (int)pow(10, j);
i += a;
}
if( Push(&Opnd, i) ){
printf("内存不足。\n");
return 1;
}
switch( Precede( GetTop(&Optr), e) ){
case -1://栈顶元素优先权低
if( Push(&Optr, e) ){
printf("内存不足。\n");
return 1;
}
e=getchar();
break;
case 0://括号出栈
Pop(&Optr);
e=getchar();
break;
case 1://退栈并将运算结果入栈
e=Pop(&Opnd);
if( Push( &Opnd, Operate( Pop(&Opnd), Pop(&Optr), e ) ) ){
printf("内存不足。\n");
return 1;
}
break;
default:
return 1;
}
}
else{
if( Push(&tmp, e) ){//压栈失败,退出
printf("内存不足。\n");
return 1;
}
//压栈成功
e=getchar();
}
}
printf("结果为:%d\n", GetTop(&Opnd));
//释放内存
free(tmp.base);
free(Optr.base);
free(Opnd.base);
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -