//用数据结构编写简单四则运算(+,-,*,/)//整体思路(可带多个括号,及小数)//建立一个单向链表//运算过程中运算符优先级#=)+-*/(//00122334//while(p->data&&GetTop(OPTR))//{(p->data)//if(数字)进栈OVS//elseif(GetTop(OPTR)!='('&&p->data!=')')//{//if(GetTop(OPTR)低于p->data优先级)//进栈OPTR//else//while(GetTop(OPTR)高于p->data优先级)//运算//}//else删去左右括号//}//字符转换为数字(用一个数组表示数字)//#include<>#include<>#include<>#include<>#include<>#include<>#include<>#defineN5#defineM60typedefcharElemType;typedefstructnode{ElemTypedata;structnode*next;}*LinkList,Node;typedefstructfnode{ floatdata; structfnode*next;}*FLinkList,FNode;LinkListBuildLink(charstr[M]);//建立链表LinkListPush_char(LinkListL,ElemTypedata);//进入符号栈intIsEmpty(LinkListL);//栈是否为空ElemTypeGetTop(LinkListL);//取出符号栈顶栈不删除ElemTypePop_char(LinkListL,ElemType*x);//取出符号栈顶栈删除floatPop_float(FLinkListL,float*x);//取出数字栈顶栈删除intBracketMatch(char*e);//判断括号匹配floatExecute(floatm,charop,floatn);//pare(chara);//比较运算符优先级floatExpEvaluation(LinkListL);//进行(可以括号,小数)的运算intGet_number(charch);//字符转换为数字intGetNumber_1(intb[N],inti);//取整数部分floatGetNumber_2(intb[N],inti);//取小数部分voidStart(){ LinkListL;floatx; charstr[M]; printf("请输入运算式('='结束)\n"); gets(str);//puts(str); BracketMatch(str);L=BuildLink(str);//BracketMatch(L);printf("ok2");x=ExpEvaluation(L); printf("上式运算结果为wei:");printf("%f\n",x);}LinkListBuildLink(charstr[M]){ LinkListL;Node*p,*s;inti;L=(LinkList)malloc(sizeof(Node));L->next=NULL;
四则运算 数据结构 来自淘豆网www.taodocs.com转载请标明出处.