数据结构实验-表达式.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构实验-表达式

实验题目:表达式求值 P 何潇梁 实验内容: 用算符优先法设计一个具有加、减、乘、除四功能的计算程序。 目的与要求: 掌握栈的数据结构和基本操作,实现中缀算术表达式四则计算。 实验算法: 数据结构描述 表达式求值算法,由实验要求。构造2个栈结构存储表达式,Stackc A用来存储运算符,Stackn B用来存储运算数。运算时用从A出栈的运算符和B出栈的运算数进行运算。 函数原型、功能和接口描述 主函数以字符串接收表达式,对其中的运算符和数分别处理。将输入的字符表示的数用两个循环体求出整数和小数部分,求和之后表示成double型的数进B栈。将输入的运算符与栈A顶部存储的运算符优先级相比(precede)。若优先级较低,则输出B中前2个数,输出A中顶部运算符进行运算,将结果存入B的栈顶。若相等,则删除A顶元素即可。若较高,则存入B中。直至表达式遇到截止符#。 用于两个栈的元素类型不同,以下函数均分为C,N两种以对字符栈和数栈操作。 InitStack用来创建栈,申请地址,建立栈顶和栈底指针。 GetTOP用来取栈顶元素,返回栈顶元素的值。 Push用来向栈中加入新的栈顶元素,将战中TOP位赋值并使TOP后移一位,返回栈的地址。 DelTop用来删除栈顶元素,返回栈的地址。Deltop和GetTOP一起起到POP的作用。 Precede接收2个运算符,按照优先级的定义,比较运算符的优先级,返回,或者=。 Operate接收2个数和一个运算符,将2个数按这个运算符进行运算,返回运算结果。 核心算法及时空分析 空间分析:一个有a个运算符,b个运算数的表达式,存储时至多占用a*Lc+b*Lb空间。 时间分析:由于整个程序只有一重循环,故时间复杂度为a。 实验结果与分析: 如上,输入的表达式均可正常计算。 源程序: #includestdio.h #include stdlib.h #define N 100 #define n 10 #define Lc sizeof(struct Stackc) #define Ln sizeof(struct Stackn) struct Stackc { char *base; char *top; int stacksize; }; struct Stackn { double *base; double *top; int stacksize; }; struct Stackc InitStackc(struct Stackc s){ s.base=(char *)malloc(Lc); if(!s.base){printf(ERROR\n);return s;} s.top=s.base; s.stacksize=N; return s; } struct Stackn InitStackn(struct Stackn s){ s.base=(double *)malloc(Ln); if(!s.base){printf(ERROR\n);return s;} s.top=s.base; s.stacksize=N; return s; } char GetTOPc(struct Stackc s,char e){ if(s.top==s.base){printf(ERROR\n);exit;} e=*(s.top-1); return e; } double GetTOPn(struct Stackn s,double e){ if(s.top==s.base){printf(ERROR\n);exit;} e=*(s.top-1); return e; } struct Stackc Pushc(struct Stackc s,char e){ if(s.top-s.base=s.stacksize){ s.base=(char *)realloc(s.base,(s.stacksize+n)*sizeof(char)); if(!s.base){printf(ERROR\n);exit;} s.top=s.base+s.stacksize; s.stacksize+=n; } *s.top++ =e; return s; } struct Stackn Pushn(struct Stackn s,double e){ if(s.top-s.base=s.stacksize){ s.base=(double *)realloc(s.base,(s.stacksize+n)*sizeof(dou

文档评论(0)

youshen + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档