欢迎来到天天文库
浏览记录
ID:43739222
大小:29.00 KB
页数:3页
时间:2019-10-13
《后缀表达式求值的算法及代码》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、#include#includestructnode//栈结构声明{intdata;//数据域structnode*next;//指针域};typedefstructnodestacklist;//链表类型typedefstacklist*link;//链表指针类型linkoperand=NULL;//操作数栈指针linkpush(linkstack,intvalue)//进栈{linknewnode;//新结点指针newnode=newstacklist;//分配新结点if(!newnode){p
2、rintf("分配失败!");returnNULL;}newnode->data=value;//创建结点的内容newnode->next=stack;stack=newnode;//新结点成为栈的开始returnstack;}linkpop(linkstack,int*value)//出栈{linktop;//指向栈顶if(stack!=NULL){top=stack;//指向栈顶stack=stack->next;//移动栈顶指针*value=top->data;//取数据deletetop;//吸收结点returnstack;//
3、返回栈顶指针}else*value=-1;}intempty(linkstack)//判栈空{if(stack!=NULL)return1;elsereturn0;}intisoperator(charop)//判运算符{switch(op){case'+':case'-':case'*':return1;//是运算符,返回1case'/':return0;//不是运算符,返回0}}intgetvalue(intop,intoperand1,intoperand2)//计算表达式值{switch((char)op){case'*':re
4、turn(operand1*operand2);case'/':return(operand1/operand2);case'+':return(operand1+operand2);case'-':return(operand1-operand2);}}voidmain()//主函数{charexp[100];intoperand1=0;//定义操作数1intoperand2=0;//定义操作数2intresult=0;//定义操作结果intpos=0;printf("t请输入后缀表达式:");gets(exp);//读取表达式
5、printf("t后缀表达式[%s]的计算结果是:",exp);while(exp[pos]!=' '&&exp[pos]!='')//分析表达式字符串{if(isoperator(exp[pos]))//是运算符,取两个操作数{operand=pop(operand,&operand1);operand=pop(operand,&operand2);operand=push(operand,getvalue(exp[pos],operand1,operand2));//计算结果入栈}elseoperand=push(o
6、perand,exp[pos]-48);//是操作数,压入操作数栈pos++;//移到下一个字符串位置}operand=pop(operand,&result);//弹出结果printf("%d",result);//输出}
此文档下载收益归作者所有