二、佇列的python實現
三、堆的python實現
棧、佇列、堆是基礎的資料結構型別,其中棧是後進先出的資料結構;佇列是先進先出的資料結構;堆通常可以被看成一棵樹,又可以被分為最小堆和最大堆,最小堆是指堆中某個節點的元素總不大於其父節點的值;最大堆是指堆中某個元素總不小於其父節點的值。
列表(list)是python中經常用到的基礎資料結構,我們可以使用列表來模擬棧,實現入棧,出棧等效果。
stack =
#入棧stack.(1
)print
(stack)
stack.(2
)print
(stack)
stack.(5
)print
(stack)
#檢視棧頂元素
top = stack[-1
]print
('棧頂元素為:'
,top)
#出棧stack.
pop(
)print
(stack)
#判斷棧是否為空
if stack:
print
('not empty'
)else
:print
('empty'
)
python的內建模組collections中包含了雙向佇列deque的資料結構型別,可以在佇列的左端和右端實現入隊和出隊,在雙向佇列的右端指向入隊和出隊動作就可以模擬入棧和出棧。
from collections import deque
stack =
deque()
#入棧stack.(1
)print
(stack)
stack.(2
)print
(stack)
#出棧a = stack.
pop(
)print
(stack)
print
(list
(stack)
)#判斷棧是否為空
iflist
(stack)
:print
('棧不為空!'
)else
:print
('棧為空!'
)
可以使用在列表尾部新增元素模擬入隊,列表頭部刪除元素模擬出隊。
queue =
#入隊queue.(1
)print
(queue)
queue.(2
)print
(queue)
queue.(5
)print
(queue)
#出隊queue.
pop(0)
print
(queue)
#判斷佇列是否為空
if queue:
print
('not empty'
)else
:print
('empty'
)
from collections import deque
queue =
deque()
#入隊queue.(1
)print
(queue)
queue.(1
)print
(queue)
queue.(7
)print
(queue)
#出隊queue.
popleft()
print
(queue)
#在某位置插入元素
queue.
insert(1
,3)print
(queue)
#判斷佇列是否為空
if queue:
print
('not empty'
)else
:print
('empty'
)
python中內建了實現堆的模組,可以直接呼叫。
import heapq
#列表h
h =[1,
4,5,
2,7]
#對h進行最小堆排序
heapq.
heapify
(h)print
(h)#刪除堆頂元素
a = heapq.
(h)print
('堆頂元素為:'
,a)print
('堆排序為:'
,h)#在堆中加入乙個元素val,並對堆重新排序
val =
3heapq.
(h,val)
print
('堆排序為:'
,h)#在堆中加入乙個元素,保持堆得元素數量不變,如果加入的元素大於堆頂元素則刪除堆頂元素。
val =
4heapq.
heapreplace
(h,val)
print
('堆排序為:'
,h)
Python資料結構 棧與佇列
佇列雙端佇列 棧 stack 也稱堆疊 是一種容器,可存入 訪問 刪除資料元素,它的特點在於只能允許在容器的一端 稱為棧頂端指標,英語 top 進行加入資料 英語 push 和輸出資料 英語 pop 的運算,保證在任何時候可以訪問 刪除的元素都是此前最後存入的那個元素,確定了一種預設的訪問順序。由於...
資料結構 棧 佇列
二 佇列 注 鏈式儲存 定義鍊錶元素所儲存的資料型別 以int為例 typedef int elemtype 定義棧的結點結構及結點指標型別 typedef struct stacknode stacknode,stacknodeptr 定義指向棧的結構 typedef struct linksta...
資料結構 堆(優先佇列)
一種樹形資料結構,分大根堆,小根堆。大根堆 max heap 滿足所有父節點不小於其任意子節點。小根堆 min heap 滿足所有父節點不大於其任意子節點。在這裡,我們只考慮二叉堆。二叉堆是一棵完全二叉樹。solution 可見,每堆果子分別被合併了n 1次,n 2次,n 3次 1次 則數量越小的堆...