棧
後進先出,常見的快取結構
#棧是保證元素後進先出
'''adt stack:
stack(self) #建立空棧
is_emplty(self) #判斷棧是否為空,空時返回true否則返回false
push(self,elem) #壓棧
pop(self) #彈出
top(self) #取得最後壓入棧的元素
'''
a)實現
'''
棧的順序表實現
'''class stackunderflow(valueerror): #空棧訪問
pass
class sstack(): #基於順序表技術實現的棧類
def __init__(self): #用list物件_elems儲存棧元素
self._elems = #所有棧操作都對映到list操作
def is_emply(self):
return self._elems ==
def top(self):
if self._elems == :
raise stackunderflow('in sstack.top()')
return self._elems[-1]
def push(self,elem):
def pop(self):
if self._elems == :
raise stackunderflow('in sstack.top()')
return self._elems.pop()
#定義表節點類
class lnode:
def __init__(self,elem,next_=none):
self.elem=elem
self.next=next_
class lstack(): #基於鍊錶技術實現的棧類,用lnode作為結點
def __init__(self):
self._top = none
def is_empty(self):
return self._top is none
def top(self):
if self._top is none:
raise stackunderflow('in lstack.top()')
return self._top.elem
def push(self,elem):
self._top = lnode(elem,self._top)
def pop(self):
if self._top is none:
raise stackunderflow('in lstack.top()')
p = self._top
self._top = p.next
return p.elem
b)簡單應用
#括號匹配問題
def check_parens(text):
'''括號配對檢查函式,text是被檢查的正文串'''
parens = '(){}'
open_parens = '([':'
def parentheses(text):
'''括號生成器,每次呼叫返回text裡的下一括號及其位置'''
i,text_len = 0, len(text)
while true:
while i=text_len:
return
yield text[i],i
i+=1
st=sstack() #棧
for pr,i in parentheses(text): #迭代
if pr in open_parens:
st.push(pr) #壓棧
elif st.pop()!=opposite[pr]: #匹配失敗,推出
print('unmatching is foundat',i,'for',pr)
return false
print('all parentheses are correctly matched')
c)棧和遞迴
1、遞迴函式的執行需要棧(程式執行棧)。後呼叫先返回
2、任何遞迴定義的函式(程式),都可以通過引入乙個棧儲存 中間結果,翻譯為乙個非遞迴的過程。與此對應,任何乙個包含迴圈的 程式都可翻譯為乙個不包含迴圈的遞迴程式。(就目前計算機的算力來說,函式呼叫的效率損失多半都可以接受,所以不一定非得翻譯成非遞迴)
第五章 佇列
佇列是一種特殊的線性表,特殊之處在於它只允許在表的前端 front 進行刪除操作,而在表的後端 rear 進行插入操作,和棧一樣,佇列是一種操作受限制的線性表。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。棧 後進先出,只允許在棧頂進行插入和刪除。佇列 先進先出,在隊尾進行插入,在對頭進行刪除...
第五章佇列
佇列是一種特殊的線性表,特殊之處在於它只允許在表的前端 front 進行刪除操作,而在表的後端 rear 進行插入操作,和棧一樣,佇列是一種操作受限制的線性表。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。queue 類定義和一些測試 function queue 向隊尾新增乙個元素 func...
資料結構與演算法C 語言描述第五章棧和佇列
第 5章棧和佇列 棧和佇列是兩種面向表的資料結構 5.1棧 棧的實現以及 stack 類棧的標準模型是自助餐廳的盤子堆 5.1.1 棧的操作 5.1.2 stack 類的實現 class cstack public int count public void push object item pub...