a.h文件: #include<stdio.h> #include<malloc.h> #define size 100 typedef struct { int * top; int * base; int stacksize; }nstack; typedef struct { char * top; char * base; int stacksize; }cstack; nstack ninitstack(); cstack cinitstack(); void push_n(nstack &m,int a); int pop_n(nstack &n); void push_c(cstack &m,char a); char pop_c(cstack &n); int gettop_n(nstack &t); char gettop_c(cstack &t); int ln(char c); char precede(char a,char b); int operate(int a,char b,int c); a.cpp文件: #include<stdio.h> #include<malloc.h> #include"a.h" nstack ninitstack() { nstack s; s.base=(int *)malloc(size*sizeof(nstack)); s.top=s.base; s.stacksize=size; return s; } cstack cinitstack() { cstack c; c.base=(char *)malloc(size*sizeof(cstack)); c.top=c.base; c.stacksize=size; return c; } void push_n(nstack &m,int a) { * m.top=a; m.top++; } int pop_n(nstack &n) { int b; n.top--; b=*n.top; return b; } void push_c(cstack &m,char a) { * m.top=a; m.top++; } char pop_c(cstack &n) { char b; n.top--; b=*n.top; return b; } int gettop_n(nstack &t) { int a; if(t.top==t.base)return 0; else { t.top--; a=*t.top; return a; } } char gettop_c(cstack &t) { char a; if(t.top==t.base)return 0; else { t.top--; a=*t.top; return a; } } int ln(char c) { if(c=='+'||c=='-'||c=='*'||c=='/'||c=='('||c==')'||c=='#') return 1; else return 0; } char precede(char a,char b) { int p=0,q=0; char m[8]="+-*/()#"; char n[8][8]={">><<<>>",">><<<>>",">>>><>>",">>>><>>","<<<<<= ",">>>> >>","<<<< = "}; while(m[p]!=a)p++; while(m[q]!=b)q++; return(n[p][q]); } int operate(int a,char c,int b) { int s; switch(c) { case '+':s=a+b; break; case '-':s=a-b; break; case '*':s=a*b; break; case '/':if(b!=0) s=a/b; else printf("error1!/n");break; default:printf("error2!/n"); } return s; } main.cpp文件 #include<stdio.h> #include<stdlib.h> #include"a.h" int main(void) { int a,b,d,e,sum; char theta,x,c,z,k; k='#'; cstack optr; nstack opnd; printf("请输入一个正确的表达式并以#结束/n"); optr=cinitstack(); push_c(optr, k); opnd=ninitstack(); c=getchar(); while(c!='#' || gettop_c(optr)!='#') { if(!ln(c)) { d=c-'0'; push_n(opnd,d); c=getchar(); } else { z=gettop_c(optr); switch(precede(z,c)) { case'<':push_c(optr,c);c=getchar();break; case'=':x=pop_c(optr);c=getchar();break; case'>':theta=pop_c(optr);b=pop_n(opnd);a=pop_n(opnd); e=operate(a,theta,b); push_n(opnd,e);break; } } } printf("%d/n",gettop_n(opnd)); return 0; } : 程序运行结果截图: