实验四 后缀表达式的计算.doc

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验四 后缀表达式的计算

实验四 后缀表达式的计算 方丽平 信计1203 1130112321 一、实验目的: 熟练掌握栈和队列的存储结构设计及基本操作的实现;学会分析实际问题中具有栈特点的数据结构;了解表达式的前缀、中缀、后缀等计算机内表示形式。 二、实验内容与要求: 按常规形式输入算术表达式(例如:输入2*(6-4)+8/4),要求能够: (1)生成表达式的后缀表示,并输出; (2)生成表达式的前缀表示,并输出; (3)基于表达式的后缀表示,对该表达式求值; (4)编写一个主程序对表达式求值函数进行测试。 三、程序设计如下 四、运行结果: 由于程序在运行过程中出现错误,不知道怎样改,所以没有得出结果 #includestdio.h #includemalloc.h #includestring.h #define ERROR 0 #define OK 1 #define N 50 #define STACK_INT_SIZE 10 //存储空间初始分配量 #define Queue_Size 20 typedef int ElemType; //定义元素的类型 typedef struct { char Qdata[Queue_Size]; int front,rear; }SeqQueue; typedef struct { ElemType *base; ElemType *top; int stacksize; //当前已分配的存储空间 }SqStack; SqStack OPTR, OPND; SeqQueue SeQ; char PreTab[7][7]={ {,,,,,,}, {,,,,,,}, {,,,,,,}, {,,,,,,}, {,,,,,=,x}, {,,,,x,,}, {,,,,,x,=} }; //该矩阵中,X字符表示不存在优先关系,在分析过程查找到这个值,表示表达式有错。 char *OpretorS=+-*/()#; //运算符集 char *Express=3*(6-4)+12/4; //初始化的表达式 int InitStack(SqStack *S); //构造空栈 int push(SqStack *S,ElemType *e); //入栈 int Pop(SqStack *S); //出栈 void initQueue(SeqQueue *Q) //队列初始化 { Q-front=0; Q-rear=0; } int EnterQueue(SeqQueue *Q,char c) //入队 { if (Q-rear==Queue_Size) { printf(\n队列满,无法入队!\n); return ERROR; } Q-Qdata[Q-rear]=c; Q-rear++; return OK; } int OutQueue(SeqQueue *Q,char *e) //出队 { if(Q-front==Q-rear) { printf(\n队列空,无法出队!\n); return ERROR; } *e=Q-Qdata[Q-front++]; return OK; } int InitStack(SqStack *S) { S-base=(ElemType *)malloc(STACK_INT_SIZE *sizeof(ElemType)); if(!S-base) return ERROR; S-top=S-base; S-stacksize=STACK_INT_SIZE; return OK; } int Push(SqStack *S,ElemType e) { if ((S-top-S-base)STACK_INT_SIZE) return 0; *S-top=e; S-top++; return OK; } int Pop(SqStack *S) { int e; if (S-top==S-base) return 0; S-top--; e=*S-top; return *S-top; } //判定c是否运算符,若是运算符则返回改运算符在运算符集中的位置 int IsOps(char c) { int i=0; char *p; p=OpretorS; while(i7) {

文档评论(0)

bm5044 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档