堆疊是一種後進先出(lifo)的資料結構,在下推堆疊中,只允許兩種操作:將物件推入堆疊,並將物件從堆疊中彈出。元素只能在堆疊頂部新增和刪除。push將物件新增到堆疊頂部,pop從頂部刪除物件。
乙個很好理解的例子,有一沓書,你可以只拿走(刪除)頂部的書,也可以在頂部新增新書。
判斷其中的 {}() 是否成對出現
# test_stack_and_queue.py
import pytest
class stack:
"""建立乙個模擬stack堆疊
"""def __init__(self):
self._data =
def push(self, item):
def pop(self):
self._data.pop()
def top(self):
return self._data[-1]
def get_size(self):
if len(self._data) == 0:
return true
else:
return false
def get_data(self):
return self._data
class teststack:
"""建立乙個測試類
"""def setup(self):
self.stack = stack()
def pattern(self, data):
brackets_dict = ": "
for p in data:
if p in "":
"""處理stack中_data無資料情況"""
try:
top = self.stack.top()
self.stack.pop()
"""判斷括號是否相對應"""
if brackets_dict[p] != top:
return false
except indexerror:
return false
return self.stack.get_size()
"""斷言驗證"""
def test_pattern_1(self):
test_data = ']***x}x}'
assert self.pattern(test_data)== true
def test_pattern_2(self):
assert self.pattern('')==true
def test_pattern_4(self):
assert self.pattern("{}{}{}()")==true
if __name__ == '__main__':
pytest.main(['-s'])
"""test_stack_and_queue.py ....
****************************** 4 passed in 0.02s ******************************
"""
佇列是一種先進先出(fifo)的資料結構,乙個很好理解的例子是飯堂廣場的一排學生。新新增到佇列後面的行,而移除(或服務)發生在前面,入隊意味著將乙個物件插入到佇列的後面,出隊意味著刪除前面的專案。
模擬乙個先進先出的資料結構,在佇列尾部追加資料,然後在佇列頭部彈出資料。
class queue:
def __init__(self):
self._data =
def put(self, item):
def get(self):
result = self._data[0]
self._data.remove(result)
return result
if __name__ == '__main__':
"""測試"""
q = queue()
q.put('張三')
q.put('李四')
q.put('王五')
print(q.get())
print(q.get())
print(q.get())
"""張三
李四王五
"""
and queues/stacks and queues.htm 堆疊和佇列
堆疊是限定插入和刪除操作都在表的同一端進行的線性表。允許插入和刪除元素的一端稱為棧頂,另一端稱為棧底。若棧中無元素,則稱為空棧。一定要記住的是 棧有後進先出的特點,lase in first out,lifo。棧的基本操作除了插入和刪除外,還有建立和撤銷棧等操作。creat 建立乙個空棧 destr...
堆 堆疊和佇列
堆和堆疊的區別 1 堆疊的大小是固定的,編譯器需要知道存放到堆疊的資料的大小,靈活性較差。引用存放在堆疊中。堆可以動態分別空間,大小沒有限制比較靈活。通過new建立的物件存放在堆中。2 堆疊只有乙個出入口,是先進後出的資料結構。先分配的記憶體後釋放。堆中的資料是無序的,建立和釋放內容都沒有固定的順序...
用堆疊模擬佇列,和用佇列模擬堆疊
最近在看 演算法導論 第十章裡面有一題是用了 兩個堆疊模擬乙個佇列,我設計的演算法如下 堆疊a和b,a用作入隊,b出隊 1 判隊滿 如果a滿且b不為空,則隊滿 2 判隊空 如果a和b都為空,則隊空 3 入隊 首先判隊滿。若隊不滿 1 棧a若不滿,則直接壓入棧a 2 若a滿,則將a中的所有元素彈出到棧...