#include#include#define N 100
typedef struct{ //操作数栈
float d[N];
int len; //len相当于top
}stacks,*lists;
typedef struct{ //运算符栈
char c[N];
int len; //len相当于top
}stack,*list;
int init(list p); //stack 初始化
int inits(lists p); //stacks 初始化
int pushs(lists p,float m); // stacks 入栈
int push(list p,char c); //stack 入栈
int pops(lists p,float *m); //stacks 出栈
int pop(list p,char *c); //stack 出栈
int in(char c); //判断C是否为数据 是则返回 1 否则 返回 0
char pre(char s,char c); //判断s c的优先级 s>c return '>'; slen=0;
return 1;
}
int inits(lists p){
if(!p) {
printf("Error,init stacks NULL\n");
return 0;
}
p->len=0;
return 1;
}
int pushs(lists p,float m){
if(!p) {
printf("Error,pushs stacks NULL\n");
return 0;
}
p->d[p->len++]=m; return 1;
}
int push(list p,char c){
if(!p) {
printf("Error,push stack NULL\n");
return 0;
}
p->c[p->len++]=c; return 1;
}
int pops(lists p,float *m){
if(!p) {
printf("Error,push stacks NULL\n");
return 0;
}
*m=p->d[--p->len]; return 1;
}
int pop(list p,char *c){
if(!p) {
printf("Error,push stack NULL\n");
return 0;
}
*c=p->c[--p->len]; return 1;
}
int in(char c){ //判断C是否为数据 是则返回 1 否则 返回 0
if(c>='0'&&c<='9'||c=='.')
return 1;
return 0;
}
char pre(char s,char c){ //判断s c的优先级 s>c return '>'; s 1230
k=p-pr;
pr++;
}
}
for(i=0,tp=10;i':pop(&optr,&t);
pops(&opnd,&b);
pops(&opnd,&a); //输出一个操作符和两个数据
pushs(&opnd,operate(a,t,b));break;
} //运算
}
return opnd.d[opnd.len-1]; //返回表达式的值
}
在命令行中cd入文件夹,用g++加上文件名,注意要加上文件扩展名,这样会生成一个a.exe的可执行文件(Windows默认生成a.exe,Linux默认生成a.out),回车运行即可。
g++ nigixExpression.c ./a.out
网友评论