c语言问题:用堆栈作作一个计算器
//c++版的
#include
using namespace std;
typedef enum prio{add=0,sub,mul,divi,bra_f,bra_r,nus}prio;
//+,-,*,/,(,),#
typedef struct Stack{
//栈的数据节点
union{
int opnd; //运算数
prio optr; //运算符
};//union
struct Stack* next;
}Stack,*Stackp; //Stack
typedef struct LStack{
//栈的总结点
Stackp base;
Stackp top;
}L...全部
//c++版的
#include
using namespace std;
typedef enum prio{add=0,sub,mul,divi,bra_f,bra_r,nus}prio;
//+,-,*,/,(,),#
typedef struct Stack{
//栈的数据节点
union{
int opnd; //运算数
prio optr; //运算符
};//union
struct Stack* next;
}Stack,*Stackp; //Stack
typedef struct LStack{
//栈的总结点
Stackp base;
Stackp top;
}LStack; //LStack
char priority[7][7]={'>','>','','>',
'>','>','','>',
'>','>','>','>','','>',
'>','>','>','>','','>',
'','>','>','>',' ','>','>',
'next;
return p;
}//Pop
void Push(LStack &S,Stackp &e){
//插入一个元素e 为新的栈顶
e->next= p;
p=e;
}//Push
void DestroyStack(LStack &S){
//销毁一个栈S
Stackp p;
while(!StackEmpty(S)){
p=Pop(S);
delete p;
}//while
}//DestroyStack
void trans(char c,prio &pri){
//运算符转换
switch(c){
case '+':pri=add;break;
case '-':pri=sub;break;
case '*':pri=mul;break;
case '/':pri=divi;break;
case '(':pri=bra_f;break;
case ')':pri=bra_r;break;
case '#':pri=nus;break;
default:coutopnd=n->opnd+m->opnd;
break;
case sub:
n->opnd=n->opnd-m->opnd;
break;
case mul:
n->opnd=n->opnd*m->opnd;
break;
case divi:
n->opnd=n->opnd/m->opnd;
break;
default:
coutnext=NULL;
e->optr=nus;
Push(OPTR,e);
int c,a,flag=0;
//
c=getchar();
while(c!='\n'){
if(c>='0'&&cnext=NULL,e->opnd=a;
Push(OPND,e);
flag=1;
}//if
else{
Stackp q;
q=Pop(OPND);
q->opnd=q->opnd*10+a;
Push(OPND,q);
}//else
}
else{
flag=0;
trans(c,pri);
pri_in= p->optr;
Stackp q=new Stack;
q->optr=pri;
switch(priority[pri_in][pri]){
case '':
while(priority[pri_in][pri]=='>'){
Stackp m,n;
m=Pop(OPND);
n=Pop(OPND);
doopertor(n,m,pri_in);
Push(OPND,n);
delete m;
n=Pop(OPTR);
delete n;
pri_in= p->optr;
}//while
if(q->optr!=bra_r)
Push(OPTR,q);
else{
delete q;
q=Pop(OPTR);
delete q;
}
break;
default:break;
};//switch
}//else
c=getchar();
}//while
//coutnext->opndopnd< 收起