堆疊和佇列

2022-09-08 02:42:11 字數 2352 閱讀 2753

堆疊是一種後進先出(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中的所有元素彈出到棧...