- 1、本文档共99页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构第3章数据结构第3章
if (!IsEmpty(*s)){ StackTop(*s,op2); Pop(s); /* 弹出栈顶操作数op2 */ } else{ result=FALSE; printf(\n Missing operand!); } if(result) switch (c){ /* 执行运算op2 c op1,并将运算结果进栈 */ case +: Push(s,op2+op1); break; case -: Push(s,op2-op1); break; case *: Push(s,op2*op1); break; case /: if (op1==0.0){ printf(\nDivide by 0!); Clear(s); } else Push(s,op2/op1); break; } else Clear(s); } void Eval(char exp[]) { char c;int op;int i; Stack s; CreateStack(s,Size); for(i=0,c=exp[i];c!=#;i++,c=exp[i]){ switch(c) { case +: case -: case *: case /:DoOperation(c,s); break; default: Push(s,c-0);break; } } if (!IsEmpty(s)) { StackTop(s,op); printf(\n The reshult is: %d\n,op); } } void main() { char exp[ExpSize]={6,4,2,-,/,3,2,*,+,#}; Eval(exp); } 从上面的讨论可知,无论是将中缀表达式转换成后缀表达式的算法,还是计算后缀表达式的值的算法,都需要借助一个堆栈。对于前者,堆栈中存放运算符(含左括号和#号),所以元素类型为字符型。对于后者,堆栈中存放操作数和中间计算结果,所以堆栈元素类型应为操作数类型(整型、实型等)。为同时实现这两个算法,在C语言下,我们需要设计两个Stack类型模块,它们具有不同的元素类型。另一种可能的方法使我们有可能使用同一个Stack结构类型,使得可在不同元素类型的情况下使用。其做法是:使用C语言提供void指针,将堆栈的元素的类型定义为void指针类型,该类型指针可指向不同具体类型的元素。例如我们可以将堆栈的元素类型定义为:typedef void* T;用void指针可实现类属Stack类型。在C++语言环境下,类属ADT可以用C++语言的模板(template)方便地实现。 3.4 递归和递归过程 3.4.1 递归的概念 递归(recursive)是一个数学概念也是一种有用的程序设计方法。在程序设计中为处理重复性计算最常用的办法是组织迭代循环。除此之外还可以采用递归计算的办法。特别是非数值计算领域中更是如此。递归本质上也是一种循环的程序结构,它把“较复杂”的计算逐次归结为“较简单”的情形的计算,一直归结到“最简单”的情形的计算并得到计算结果为止。许多问题可以采用递归方法来编写程序,一般来说,递归程序结构简洁而清晰,易于分析。数据结构也可以采用递归方式来定义。线性表、数组、字符串和树等数据结构原则上都可以进行递归定义。 1. 递归定义 说明递归定义的一个例子是斐波那契级数,它的定义可递归表示成 如果我们将实现队列的数组从逻辑上看成是一个头尾相接的环,就能充分利用数组空间来存储队列元素。图3-7显示了循环队列结构及其入队列和出队列运算的做法。初始状态下,我们将Front和Rear两指针均置成0。为了循环使用数组,我们利用取余运算符%计算新元素的插入位置,即新队尾元素的位置,以及计算删除队头元素后的新队头元素的位置。 队头指针进一操作:Front=(Front+1) % MaxQueue; 队尾指针进一:Rear=(Rear+1) % MaxQueue; 我们看到,指针Front和Rear始终以顺时针移动。 在循环队列结构下,当Front==Rear时为空队列,当(Rear+1) % MaxQueue==Front时被认为队列
您可能关注的文档
- 数学培训2014年苏锡常镇四市高三数学情况调查(一)(德才教育).doc
- 数学概览公选课教学计划 - 徐州师范大学.ppt
- 数学模型-市场经济中的蜘蛛网模型(图片).ppt
- 数学模型第四版第七章.ppt
- 数学模型期末考试题.doc
- 数学必修3几何概型2课时.doc
- 数学模型(差分方程).ppt
- 数学思维与生活智慧.ppt
- 数学课堂教学基本技能.ppt
- 数学课题研究结题报告(最新修改).doc
- 城市公园健身设施智能互联改造项目实施保障措施与建议.docx
- 环保设备制造业2025年市场挑战与产品创新突破策略报告.docx
- 城市公园健身设施智能互联改造项目成本效益分析报告.docx
- 智能农业灌溉系统在节水灌溉技术中的应用与创新.docx
- 城市公园健身设施智能互联改造项目对城市公共安全的影响分析.docx
- 新能源微电网稳定性控制与优化运行智能电网集成创新与挑战实践报告.docx
- 网络文学2025年出海战略:跨文化传播与海外市场布局实践报告.docx
- 2025年跨境电商物流标准化下的物流行业风险防范研究.docx
- 深度剖析2025年社交电商裂变营销,助力企业用户增长新策略报告.docx
- 城市公园健身设施智能互联改造项目投资策略与实施路径.docx
文档评论(0)