堆栈应用.docVIP

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

1引言 。栈的基本操作包括栈的初始化,进栈操作、出栈操作、取栈顶元素、判读栈是否为空、判断栈是否满以及对栈的置空,通过这些基本操作的组合来实现进制转换、括号匹配、文本输入。 2问题分析 2.1进制转换 将一个十进制的数转换为另一进制,基于数的组成原理位权与进制,转换时让十进制数除以该进制,得到的便是最低位上的数,用得到的商再除以该进制则得到次低位上的数,依次循环下去直到得到的商为0;进制转换完毕,可以看出我们得到首先的是最低位,而数据的书写形式是从高位到低位,所以选择栈的存储结构先进后出,得到的余数顺序进栈,等到结束再顺序出栈输出,这时就是我们先要的结果。 2.2 括号匹配 括号匹配是对于一组括号的判断,当输入一个左括号时,它就会等待与之相应的右括号出现,如果等来的却是另一个左括号,那么这时最迫切等待的是刚输入的那个左括号,它会等待与之相应的右括号出现。如果等来了与之相应的右括号,那么它得到了匹配,现在迫切等待的是它之前的左括号,可以看出先进去的左括号迫切需要的程度没后来进去的左括号强,后来者居上,我们选择栈的存储结构,先来的括号进栈,栈顶元素是需要程度最强的,得到了匹配则退栈。 2.3 文本输入 文本输入是对于文章来说的,而输入文本时时常会出错,当输入特定的字符时我们会删除该行最后的文字,当错误太多时我们会整行删除,输入特定字符时换行。可以看出这些操作都是在文本的最后执行,所以我们也选择栈存储结构,输入一个字符进栈,输入特定的字符1让栈顶元素出栈,输入特定字符2,则将栈清空。如果栈满,则将文本输出,并且置空,接受下一行的文本,直到输入结束。 由于三种功能用到栈的类型一样,所以我们定义一个类型栈就可以了,栈的定义,如下: typedef char status; typedef struct { status *base; status *top; int stacksize; }sqstack; 3总体设计 3.3系统流程图 系统流程图:见图2。 4详细设计 4.1.2 流程图 流程图见图3。 4.2括号匹配 该功能主要是判断输入的表达式中括号是否匹配,由用户输入一个表达式(判断不出表达式是否合法),执行该函数,若表达式中括号成对匹配则输出合法,不成对,则输出不合法。 否 4.2.1设计思路 首先将表达式存入一个数组中,然后通过指针移动将数组中字符一个个读出,若读到左括号则让字符进栈,若读到右括号则先判断栈是否为空,若栈为空,则改变标致变量,右括号多余,括号组不合法,若栈不空,则取栈顶元素,看两括号是否配对,若配对,则让栈顶元素出栈,若不配对,则不用在读入字符,表达式不合法。依次执行下去,通过设置标志变量与栈是否为空,最后判断表达式中的括号是否匹配。 4.2.2流程图 4.2文本输入 该功能主要是输入一段文字,当输入特定字符时会对文字的末尾文字进行删除操作,当一行呈不下了文本还没结束,则换到下一行,当一行错误太多时可输入特定的字符将这一行清空。 4.2.1设计思路 首先将文本输入一个字符型数字中然后通过指针的移动访问到字符串中的每个字符,规定见到字符#则删除栈顶元素,当见到字符@时则清空当前栈,当遇到%号时则换到下一行。读入第一个字符时判断若是@或#或%则不进行操作,若是其他字符则进栈,进栈后判断栈是否满,如果栈满了则利用递归将栈中的文本输出,如果栈未满且读到的字符为特殊字符则进行相应的退栈或清空操作或换行操作。依次执行下去直到输入的字符串结束。 重点:利用递归将栈中的文本输出。 void shuchu(sqstack s)//递归将

文档评论(0)

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

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

1亿VIP精品文档

相关文档