数据结构ch03 栈和队列.pptxVIP

  1. 1、本文档共96页,可阅读全部内容。
  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文档。上传文档
查看更多
第3章 栈和队列;;栈(stack)是一种只能在同一端进行插入或删除操作的线性表。 表中允许进行插入、删除操作的一端称为栈顶(top),表的另一端称为栈底(bottom)。 栈的插入操作通常称为进栈或入栈(push),栈的删除操作通常称为退栈或出栈(pop)。;后放置的木块先取出来;后进先出,即后进栈的元素先出栈。 每次进栈的元素都作为新栈顶元素,每次出栈的元素只能是当前栈顶元素。 栈也称为后进先出表或者先进后出表。;栈抽象数据类型 = 线性结构 + 栈的基本运算;;一个栈的进栈序列是a、b、c、d、e,则栈的不可能的输出序列是( )。 A.edcba B.decba C.dceab D.abcde;1~n共产生;已知一个栈的进栈序列是1,2,3,…,n,其输出序列是p1,p2,…,pn,若p1=n,则pi的值为( )。 A.i B.n-i C.n-i+1 D.不确定;2013年全国硕士研究生入学统一考试题;栈的实现方式;顺序栈实现;;;顺序栈的基本运算算法;(2)进栈push(e);(3)出栈pop();(4)取栈顶元素gettop();3.1.3 顺序栈的应用算法设计示例;from SqStack import SqStack #引用顺序栈SqStack def isMatch(str): #判断表达式各种括号是否匹配的算法 st=SqStack() #建立一个顺序栈 i=0 while ilen(str): e=str[i] if e==( or e==[ or e=={: st.push(e) #将左括号进栈 else: if e==): if st.empty() or st.gettop()!=(: return False #栈空或栈顶不是(返回假 st.pop() if e==]: if st.empty() or st.gettop()!=[: return False #栈空或栈顶不是[返回假 st.pop() if e==}: if st.empty() or st.gettop()!={: return False; #栈空或栈顶不是{返回假 st.pop() i+=1 #继续遍历str return st.empty();#主程序 print(测试1) str=([)] if isMatch(str): print(str+中括号是匹配的) else: print(str+中括号不匹配) print(测试2) str=([]) if isMatch(str): print(str+中括号是匹配的) else: print(str+中括号不匹配); 【例3.5】设计一个算法利用顺序栈判断用户输入的字符串表达式是否为回文。并???相关数据进行测试。;① 用i从头开始遍历str,将前半部分字符依次进栈。 ② 若n为奇数,i增1跳过中间的字符。 ③ i继续遍历其他后半部分字符,每访问一个字符,则出栈一个字符, 两者进行比较,如图所示,若不相等返回False。 ④ 当str遍历完毕返回True。;from SqStack import SqStack def isPalindrome(str): #判断是否为回文的算法 st=SqStack() #建立一个顺序栈 n=len(str) i=0 while in//2: #将str前半字符进栈 st.push(str[i]) i+=1 #继续遍历str if n%2==1: #n为奇数时 i+=1 #跳过中间的字符 while in: #遍历str的后半字符 if st.pop()!=str[i]: return False #若str[i]不等于出栈字符返回False i+=1 return True #是回文返回True;#主程序 print(测试1) str=abcba if isPalindrome(str): print(str+是回文) else: print(str+不是回文) print(测试2) str=1221 if isPalindrome(str): print(str+是回文) else: p

文档评论(0)

183****6280 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档