#include "stdio.h"
#define DT char
#define M 100
typedef struct
{
DT data[M];
int top;
}SEQSTACK;
SEQSTACK INI(){
SEQSTACK S;
S.top=0;
return(S);
}
SEQSTACK PUS(SEQSTACK S,DT x){
if(S.top==M-1)
printf("栈满\n");
else
S.top++;
S.data[S.top]=x;
return (S);
}
SEQSTACK POP(SEQSTACK S){
if(S.top==0)
printf(" 空栈\n");
else
S.top--;
return (S);
}
char GET(SEQSTACK S){
if(S.top==0)
{ printf("空栈\n");
return '\0';
}
else
return (S.data[S.top]);
}
char pre(char c){
switch(c){
case '#':
c=0;break;
case '+':
case '-':
c=1;break;
case '*' :
case '/':
c=2;break;
}
return c;
}
int com(int x,int y,DT z)
{
int rs;
switch(z){
case'-':
rs=x-y;break;
case'+':
rs=x+y;break;
case'*':
rs=x*y;break;
case'/':
rs=x/y;break;
}
return rs;
}
int exp(DT q[20]){
SEQSTACK NDS,OPS;
char x,y,z;
int result=0,i=0;
NDS=INI();
OPS=INI();
OPS=PUS(OPS,'#');
for(i=0;q[i]!='#';i++){
if(q[i]<='9'&&q[i]>='0'){
NDS=PUS(NDS,q[i]-48);
}
else if(pre(q[i]<=pre(GET(OPS)))){
y=GET(NDS);
NDS=POP(NDS);
x=GET(NDS);
NDS=POP(NDS);
z=GET(OPS);
OPS=POP(OPS);
NDS=PUS(NDS,com(x,y,z));
OPS=PUS(OPS,q[i]);
}
else
OPS=PUS(OPS,q[i]);
}
while(GET(OPS)!='#'){
y=GET(NDS);
NDS=POP(NDS);
x=GET(NDS);
NDS=POP(NDS);
z=GET(OPS);
OPS=POP(OPS);
NDS=PUS(NDS,com(x,y,z));
}
result=GET(NDS);
return (result);
}
main()
{
char q[20];
int result;
printf("输入运算表达式\n");
gets(q);
result=exp(q);
printf("%d",result);
}
这个程序无法识别用户输入两位数值的预算。求助改动
数据结构栈问题求助
最新推荐文章于 2022-07-27 19:08:59 发布