- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
01/06/2002 数据结构讲义 第四章 堆栈及其应用 堆栈的基本概念 顺序栈及其基本算法 链栈及其基本算法 堆栈应用--数据转换 堆栈应用--文字编辑 堆栈应用--算术表达式的计算 * 堆栈的基本概念 顺序栈及其基本算法 链栈及其基本算法 堆栈的应用 栈是限制在一端进行插入和删除的线性表。允许插入、删除的这一端称为栈顶,另一个固定端称为栈底。当表中没有元素时称为空栈。如右图所示。 栈的逻辑结构:线性逻辑结构。 栈的存储结构 顺序结构--顺序栈 链接结构--链栈 栈的基本算法 置空栈、判栈空、判栈满、入栈、出栈、取栈顶元素。 栈底 a1 a2 a3 栈顶 入栈 出栈 顺序栈:指以顺序存储结构处理的栈。 基本算法 置空栈 判栈满 判栈空 取栈顶元素 入栈 出栈 以上算法由学生完成 顺序栈的类型定义 #define MAX 100 typedef struct {datatype data[MAX]; int top; }SeqStack; 主要特点 栈的存储空间必须事先确定 使用数组存储数据元素 使用int类型变量存储栈顶逻辑地址 基本算法 置空栈 判栈满 判栈空 取栈顶元素 入栈 出栈 以上算法由学生完成 链栈:使用链接存储结构,并记录栈顶元素位置,这样的栈称为链栈。 结点类型定义 typedef struct node { datatype data; struct node *next; }LinkStack; 链栈实际上就是一个无头结点的单链表。其首结点就是栈顶,尾结点就是栈底。 将十进制数N转换为r进制的数,其转换方法利用辗转相除法:以N=3467,r=8为例转换方法如下: N N / 8 (整除) N % 8(求余) 3467 433 3 低 433 54 1 54 6 6 6 0 6 高 所以:(3467)10 =(6613)8 我们看到所转换的8进制数按底位到高位的顺序产生的,而通常的输出是从高位到低位的,恰好与计算过程相反,因此转换过程中每得到一位8进制数则进栈保存,转换完毕后依次出栈则正好是转换结果。 算法描述(十进制整数N转换为d进制数) 1、建立空的链栈S 2、将N除以d后所得余数入栈 3、N=N/d 4、若N=0,则栈中所有元素依次出栈;否则转2。 为什么不创建顺序栈? 问题:在文字输入过程中如下约定:若输入“#”表示删除前一字符;输入“@”表示删除前面所有字符;输入“*”表示输入结束。试设计一个算法,完成文字正确录入功能。 算法中使用顺序栈还是链栈? 算法由学生在课堂上讨论完成 分析:根据问题描述,文字的输入、删除过程实际上就是栈的入栈、出栈或置栈空。因此,完全可以通过栈实现问题要求的功能。 算法过程描述 1、建立一个空栈 2、接受用户输入字符:c=getchar() 3、若c=#则出栈 4、若c=@则置栈空 5、若c=*则结束字符输入 6、c入栈后转2 无括号的表达式计算 1、设置两个栈:Operand(操作数)、Operator(操作符) 2、自左至右扫描表达式,逐一读出字符c 3、若c为操作数,则入栈Operand后转2,否则下一步。 4、若c为结束符,则当Operator为空时结束,当Operator非空时转8 5、若c为操作符,则c与Operator的栈顶元素d比较运算优先级。 6、若c优先级高,则c入栈后转2。否则下一步。 7、Operand栈顶元素a出栈,再将Operand的栈顶元素b出栈。d出栈。b与a经d运算的结果入栈Operand。c入栈,转2 8、Operand出栈两个元素a、b,Operator出栈d,将b与a经d运算的结果入栈。 9、当Operator为空时结束,当Operator非空时转8 算法实现要点: 1、如何读取表达式? 2、能否不使用栈?
您可能关注的文档
最近下载
- JSCC B系列变频器产品手册.pdf VIP
- 部编版语文四年级上册第16课《麻雀》 配套练习(含解析).pdf VIP
- 认识医生和护士幼儿园助教幼儿园医学科普.pptx VIP
- 标准图集-19S910:自动喷水灭火系统设计.pdf VIP
- 成人经鼻高流量湿化氧疗临床规范应用专家共识.pptx VIP
- 数字化赋能下的高校教学质量监控与改进机制研究教学研究课题报告.docx
- 《成人无创通气设备相关面部压力性损伤风险评估与预防指南》解读PPT课件.pptx VIP
- 慈善组织保值增值投资活动管理暂行办法.docx VIP
- C836056【强化】2024年重庆大学100100基础医学《660基础医学综合(西医)之生理学》考.pdf VIP
- 提高手术患者术前准备完善率医院护理品管圈QCC成果汇报.pptx VIP
原创力文档


文档评论(0)