满意答案
ieptvYHG8
2017.01.03
采纳率:50% 等级:9
已帮助:2014人
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211typedef char flag; typedef double cflag; #define NEW_STACK(STACK_NAME,TYPE) \ struct STACK_NAME \ { \ TYPE*b;TYPE*h;int size; \ \ flag init(STACK_NAME* in) \ { \ if(!(in->b=(TYPE*)malloc(10*sizeof(TYPE))))return 0; \ in->size=10*sizeof(TYPE); \ in->h=in->b; \ return 1; \ \ } \ flag isnull(STACK_NAME*in) \ { \ if(in->b==in->h) \ return 1; \ else \ return 0; \ } \ flag pop(STACK_NAME*in,TYPE *a) \ { \ if(isnull(in))return 0; \ *a=*(--in->h); \ return 1; \ \ } \ flag push(STACK_NAME*in,TYPE a) \ { \ if(in->h-in->b>=in->size) \ { \ if(!(in->b=(TYPE*)realloc(in->b,in->size+10*sizeof(TYPE))))return 0; \ in->h=in->b+in->size; \ in->size+=10*sizeof(TYPE); \ } \ *(in->h)=a; \ in->h++; \ return 1; \ } \ \ TYPE gettop(STACK_NAME*in) \ { \ TYPE*a=in->h-1; \ return *a; \ } \ };/****stack.h******/#include#include#include#include#include"stack.h"#define isnum(n) ((n>='0'&&n<='9')||n=='.')NEW_STACK(csta,char)NEW_STACK(dsta,double)/*precede block*/int ctoiex(char a){ int b; if (a==')') b=1; if(a=='+'||a=='-')b=2; if(a=='*'||a=='/')b=3; if(a=='(')b=4; if(a=='#')b=0; return b;}char precede(char a,char b){ int a1=ctoiex(a); int b1=ctoiex(b); if((a1==4&&b1==1)||((a1==0)&&(b1==0)))return '='; if(a1>=b1) return '>'; else return '') { opnd.push(&opnd,atonum(b,j)); j=0; } switch(f=precede(optr.gettop(&optr),tmp1)) { case '': optr.pop(&optr,&c); opnd.pop(&opnd,&op1); opnd.pop(&opnd,&op2); opnd.push(&opnd,operate(op2,op1,c)); break; } } } printf("\n%f\n",opnd.gettop(&opnd)); return 0;}
00分享举报