电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本
换一换
首页 金锄头文库 > 资源分类 > DOCX文档下载
分享到微信 分享到微博 分享到QQ空间

数据结构实验三后缀表达式的计算

  • 资源ID:487507586       资源大小:32.45KB        全文页数:4页
  • 资源格式: DOCX        下载积分:10金贝
快捷下载 游客一键下载
账号登录下载
微信登录下载
三方登录下载: 微信开放平台登录   支付宝登录   QQ登录  
二维码
微信扫一扫登录
下载资源需要10金贝
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
如填写123,账号就是123,密码也是123。
支付方式: 支付宝    微信支付   
验证码:   换一换

 
账号:
密码:
验证码:   换一换
  忘记密码?
    
1、金锄头文库是“C2C”交易模式,即卖家上传的文档直接由买家下载,本站只是中间服务平台,本站所有文档下载所得的收益全部归上传人(卖家)所有,作为网络服务商,若您的权利被侵害请及时联系右侧客服;
2、如你看到网页展示的文档有jinchutou.com水印,是因预览和防盗链等技术需要对部份页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有jinchutou.com水印标识,下载后原文更清晰;
3、所有的PPT和DOC文档都被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;下载前须认真查看,确认无误后再购买;
4、文档大部份都是可以预览的,金锄头文库作为内容存储提供商,无法对各卖家所售文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;
5、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据;
6、如果您还有什么不清楚的或需要我们协助,可以点击右侧栏的客服。
下载须知 | 常见问题汇总

数据结构实验三后缀表达式的计算

实验三 后缀表达式的计算实验目的: 熟练掌握栈和队列的存储结构设计及基本操作的实现;学会分析实际问题中具有栈特点的 数据结构;了解表达式的前缀、中缀、后缀等计算机内表示形式。实验内容与要求: 按常规形式输入算术表达式(例如:输入2*(6-4)+8/4),要求能够:(1)生成表达式的后缀表示,并输出;(2)生成表达式的前缀表示,并输出;(3)基于表达式的后缀表示,对该表达式求值;(4)编写一个主程序对表达式求值函数进行测试。算法设计:#include<stdio.h> #include<malloc.h> #include<string.h> #define ERROR 0 #define OK 1 #define N 50#define STACK_INT_SIZE 10/存储空间初始分配量#define Queue_Size 20typedef int ElemType;/定义元素的类型typedef structchar QdataQueue_Size; int front,rear;SeqQueue; typedef struct ElemType *base;ElemType *top;int stacksize;/当前已分配的存储空间SqStack; SqStack OPTR, OPND; SeqQueue SeQ; char PreTab77='>','>','<','<','<','>','>', '>','>','<','<','<','>','>', '>','>','>','>','<','>','>', '>','>','>','>','<','>','>', '<','<','<','<','<','=','x', '>','>','>','>','x','>','>', '<','<','<','<','<','x','=';该矩阵中,X字符表示不存在优先 关系,在分析过程查找到这个值,表示表达 式有错。char *OpretorS="+-*/()#"/运算符集char *Express="2*(6-4)+8/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->QdataQ->rear=c;Q->rear+;return OK;int OutQueue(SeqQueue *Q,char *e)/出队if(Q->front=Q->rear)printf("n队列空,无法出队! n");return ERROR;*e=Q->QdataQ->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(i<7)if (*p+=c) break;i+;return i;char Precede(char c1,char c2)/返回 c1 与c2 运算符的优先关系int i,j;i=IsOps(c1);j=IsOps(c2);if ( PreTabij='x') return 0; return PreTabij;int Operate(int a,char TheOp,int b)/进行TheOp 计算switch(TheOp)case'+':return a+b; case'-':return a-b; case'*':return a*b; case'/':return a/b;return 0;int f(char c)/判断运算符级别函数int f=-1;switch(c)case'+':case'-':f=1;break;case'*':case'/':f=2;break; default:f=0;break;return f;int Operator(char c)/判断字符是否为操作符 if(c='+'|c='-'|c='*'|c='/') return 1; else return 0;void convert(char sN) /将中缀表达式转 化为前缀表达式char pN,stackN;int top=0,j=0, len=0;if(s0=')')printf("算术表达式错误! ”); printf("n");elsewhile(slen!='0')len+;for(int i=len-1;i>=0;)if(si>=48&&si<=57)pj=si;j+;if(si=')')/假如是回括号,将它压栈。top+;stacktop=si;while(Operator(si)if(top=0|stacktop=')'|f(si)>=f(stacktop)top+;stacktop=si;break;elsepj=stacktop;top-;j+;if(si='(')/假如是开括号,栈中运算符逐个出栈并输出,直到遇到 闭括号。闭括号出栈并丢弃。while(stacktop!=')')pj=stacktop;top-;j+;top-;i-;while(top!=0)/假如输入完毕栈中剩余的所有操作符出栈并加到输入中pj=stacktop;j+;top-;pj='0';printf("n前缀表达式为:");for(;j>=0;j-)printf("%c",pj); printf("n");int main()char *ScanChar;char c1,c;char TheOp;int b,a,digit;InitStack(&OPTR);Push(&OPTR,'#');InitStack(&OPND); initQueue(&SeQ);ScanChar=Express; c=*ScanChar;while(c!='#'|*OPTR.top!='#')if (c=0) c='#'if (IsOps(c)>=7)/判定是否是运算符,若 IsOps 的值>=7,则 c 是操作数digit=c-'0' /将字符转换 成相应的数值Push(&OPND,digit); /操作数入栈EnterQueue (&SeQ,c);操作数入队c=*+ScanChar; elsecl=*(OPTR.top-l);switch(Precede(cl,c)调用哪个函数1case'v':Push(&OPTR,c);printf("其结果为:dn",Pop(&OPND);输出表达式的值return 0;实验结果:c=*+ScanChar;break;case'=':TheOp=Pop(&OPTR);if(c!=0&&c!=#)c=*+ScanChar;break;脱括号case'>':TheOp=Pop (&OPTR );参与计算的运算符出栈EnterQueue (&SeQ,TheOp);参与运算的运算符入队b=Pop(&OPND);a=Pop(&OPND);Push(&OPND,Operate(a,TheOp,b);break;default:printf("n 算术表 达式错误! n");return ERROR;printf("算术表达式为:%s n后缀表达 式为:”,Express);while(SeQ.rear-SeQ.front!=0) 将队 列输出即为表达式的后缀形式OutQueue (&SeQ,&c); printf("%c",c);convert(Express);

注意事项

本文(数据结构实验三后缀表达式的计算)为本站会员(大米)主动上传,金锄头文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即阅读金锄头文库的“版权提示”【网址:https://www.jinchutou.com/h-59.html】,按提示上传提交保证函及证明材料,经审查核实后我们立即给予删除!

温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.