栈和队列

qq_45657138 2019-09-26 08:12:42
实验目的: 1.掌握栈的定义及实现; 2.掌握利用栈求解算术表达式的方法。 实验要求: 1、    使用链式存储结构完成栈的各种基本操作; 2、    补充完成In(c), Preced(t1,t2),Operate(a,theta,b)三个函数。 实验题目:栈的基本操作及其应用 实验过程: 1、通过修改完善教材中的算法3.4,利用栈来实现算术表达式求值的算法。对算法3.4中调用的几个函数要给出其实现过程: (1) 函数In(c):判断c是否为运算符; (2) 函数Precede(t1,t2):判断运算符t1和t2的优先级; (3) 函数Operate(a,theta,b):对a和b进行二元运算theta。 2、程序运行时,输入合法的算术表达式(中间值及最终结果要在0~9之间,可以包括加减乘除和括号),便可输出相应的计算结果。如下图: 实验提示:(仅供参考,每个函数的具体实现可以有多种方法,希望有创新) 1. 将栈的定义和实现单独保存在头文件“stack.h”中,然后在表达式求值的源程序中包含此头文件(即#include“stack.h”)。 2.表达式求值源程序的具体实现 (1) 主函数如下: void main()  {    Printf(“请输入算术表达式,并以#结束.\n”);   Printf(“the result of expression is:%d\n”,EvaluateExpression());  } (2) 函数EvaluateExpression的实现见算法3.22 (3) 函数In(c)的实现可以采用以下方式: Status In(SElemType c)// 应在前面有定义typedef char SElemType;  { // 判断c是否为运算符    switch(c)    {      case'+':return TRUE;      ……//补充完整 default:return FALSE;    }  } (4) 函数Precede(t1,t2)的实现可以采用以下形式: SElemType Precede(SElemType t1,SElemType t2)  { //根据教材表3.1,判断两个运算符的优先关系    SElemType f;    switch(t2)    {      case '+':      case '-':if(t1=='('||t1=='#')                 f='<';               else                 f='>';               break; ……//补充完整 }    return f; } (5) 函数Operate(a,theta,b)的实现可以采用以下方式: SElemType Operate(SElemType a,SElemType theta,SElemType b)  {    SElemType c;    a=a-48;    b=b-48;    switch(theta)    {      case'+':c=a+b+48;              break; ……//补充完整    }    return c; 求解代码谢谢大家
...全文
39 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

70,034

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧