- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
栈(stack) 定义 栈是只能在一端插入和删除的线性表 特性:后进先出(LIFO)或 先进后出(FILO) 设栈s=(a1,a2,. . . ,ai,. . . ,an), 其中a1是栈底元素, an是栈顶元素。 栈顶(top):允许插入和删除的一端; 约定top始终指向新数据元素将存放的位置。 栈底(bottom):不允许插入和删除的一端。 设数组S是一个顺序栈,栈的最大容量stacksize=4 ,初始状态top=0 1)和顺序表一样采用增量式的空间分配; 2)操作和栈顶相关:插入操作(入栈):将待插元素插入到栈顶元素的下一个位置;删除操作(出栈):删除栈顶元素;取元素操作:取栈顶元素的值。各操作的操作位置与栈顶元素的位置或其下一个位置相关,希望在O(1)时间内能获取操作位置,故可设置专门的栈顶指针top。 3)约定:top指向栈顶元素的下一个位置(便于表示空栈)。 4)栈顶的初始化:S.top = S.base(在上述3)约定下的空栈形式), 5)栈空:S.base == S.top, 栈满:S.top - S.base = S.stacksize 6)入栈:*S.top ++ = e, 出栈:e = *--S.top 注意:4), 5), 6)步受3)制约。约定不同,相应的判定和处理也不一样。 如假设top就指向栈顶元素,此时4),5),6)如何? 基本操作的实现 取栈顶元素GetTop_Sq算法设计 参数:顺序栈S、取得的栈顶元素e 分析:由于top指向栈顶元素的下一个位置,因此实际的栈顶元素的位置应是top -1;栈非空时,此操作有效。 算法 Status GetTop_Sq(SqStack S, ElemType e){ /* 判断栈是否为空 */ if ( S.base == S.top) return ERROR; e = *( S.top -1); return OK; } 入栈操作Push_Sq算法设计 参数:顺序栈S、插入元素e 分析:插入位置为栈顶元素的下一个,无须判断位置的合法性;上溢即栈满的条件需要判断,由于是增量式分配,故栈满时需要重新申请空间; 出栈操作Pop_Sq算法设计 参数:顺序栈S、删除的栈顶元素e 分析:在栈非空时,删除栈顶元素 在一个程序中同时使用两个栈 1)将N%d的结果保存,2)N=N/d,3)若N==0结束,否则继续1)。保存的余数从先到后依次表示转换后的d 进制数的低位到高位,而输出是由高位到低位的,因此必须定义先进后出的线性表——栈来保存;当全部的余数求出后,通过逐个出栈输出d进制数。 从左至右扫描表达式,遇左括号入栈,遇右括号与栈顶元素比较:若左右括号匹配,则继续扫描;否则说明不匹配,结束。在上述操作中,若栈为空,或扫描结束后栈不为空,均说明不匹配。 处理规则:遇‘#’退一格;遇‘@’退一行 算法思想:引入栈,保存终端输入的一行字符(逐行处理);遇‘#’退一格——出栈一次遇‘@’退一行——清栈 步骤: 1)初始化栈S2)读入字符ch3)ch!=EOF 3.1) ch!=EOF ch!=’\n’ 3.1.1)ch为‘#’:Pop(S, c), 转3.1.4)3.1.2)ch为‘@’: ClearStack (S) , 转3.1.4)3.1.3)ch为其他: Push (S, ch) , 转3.1.4)3.1.4)再读入字符ch,继续3.1) 3.2) 处理完一行,清空栈 3.3) 如ch!=EOF,读入字符ch,继续3) 问题:找从“入口”到“出口”的路径(所经过的通道方块) 分析: 方块的表示——坐标,当前的状态(障碍、未走的通路、已走的通路); 已走的路径: 路径中各方块的位置及在路径中的序号; 从各方块出发已探索的方向,注意不能重复(可约定按东、南、西、北的方向顺次探索); 从当前方块无路可走时,将已走路径回退一个方块,继续探索其他未走的方向 栈——存储已走的通道块 ·只包含+, -, *, / 四个双目运算符,且算符本身不具有二义性; ·三个运算规则→运算符优先关系(考虑算符本身的优先级和结合性); ·只有 (==),#==#; ·假设输入的是一个合法的表达式。 引入OPTR和OPND两个栈 初始:OPTR有一个元素#,OPND为空 读入一字符c c==#:return(GetTop(OPND)) c非运算符:Push(OPND,c) c运算符:t=GetTop(OPTR),比较t和c的优先关系 tc:Push(OPTR,c) t==c:Pop(OPTR, x) tc:Pop(OPTR, theta); Pop(OPND, b); Po
您可能关注的文档
最近下载
- 2025年光伏电站设计与运维职业技能等级考试模拟试题集(含答案解析).docx VIP
- DB13(J)T 218-2016外墙保温装饰复合板应用技术规程(盒状金属装饰保温一体板).pdf
- 护理警示标识课件.pptx VIP
- EN1563-2011 球墨铸铁 中文版.pdf VIP
- 水泥罐施工方案方针.pdf VIP
- 六年级数学下册折扣与成数人教版.pptx VIP
- 跨文化交际:中英文化对比 (3).ppt VIP
- 2025年光伏运维人员职业技能竞赛考试练习题库(含各题型)含答案.pdf VIP
- “素养导向”初中历史大单元教学策略及案例 课件.pptx
- 云南劳技七年级上册家政教案.docx VIP
文档评论(0)