2 雙端佇列的應用
【操作樣例】
deque operation
deque contents
return value
d.isempty()
true
d.addrear(4)
[4]d.addrear(『dog』)
[『dog』,4,]
d.addfront(『cat』)
[『dog』,4,『cat』]
d.addfront(true)
[『dog』,4,『cat』,true]
d.size()
[『dog』,4,『cat』,true]
4d.isempty()
[『dog』,4,『cat』,true]
false
d.addrear(8.4)
[8.4,『dog』,4,『cat』,true]
d.removerear()
[『dog』,4,『cat』,true]
8.4d.removefront()
[『dog』,4,『cat』]
true
「回文詞」指正讀和反讀都一樣的詞class
deque()
:"""
list下標0作為deque的尾端
list下標-1作為deque的首端
"""def__init__
(self)
: self.items =
defisempty
(self)
:return self.items ==
defaddrear
(self, item)
:"""操作複雜度o(n)"""
self.items.insert(
0, item)
defaddfront
(self, item)
:"""操作複雜度o(1)"""
defremoverear
(self)
:"""操作複雜度o(n)"""
return self.items.pop(0)
defremovefront
(self)
:"""操作複雜度o(1)"""
return self.items.pop(
)def
size
(self)
:return
len(self.items)
演算法:用雙端佇列很容易解決「回文詞」問題,先將需要判定的詞從隊尾加入deque,再從兩端同時移除字元判定是否相同,直到deque 中剩下0 個或1個字元。如: radar 、madam 、toot
上海自來水來自海上
山東落花生花落東山
【**】
class
deque()
:...
defpalchecker
(astring)
: chardeque = deque(
)for ch in astring:
chardeque.addrear(ch)
stillequal =
true
while chardeque.size(
)>
1and stillequal:
first = chardeque.removefront(
) last = chardeque.removerear(
)if first != last:
stillequal =
false
return stillequal
(palchecker(
'上海自來水來自海上'))
# true
(palchecker(
'abcdba'))
# false
資料結構與演算法 雙端佇列
雙端佇列和普通佇列不同的地方是既可以隊首和隊尾進行插入,同時也就可以從隊首和隊尾進行remove刪除 同時不遵循先進先出或者先進後出的規則,這需要通過具體的演算法實現來確定,這個資料結構的實現過程如下 class deque def init self self.items defisempty s...
python資料結構與演算法 佇列與雙端佇列
雙端佇列 佇列 coding utf 8 deque 建立乙個空的雙端佇列 add front item 從隊頭加入乙個item元素 add rear item 從隊尾加入乙個item元素 remove front 從隊頭刪除乙個item元素 remove rear 從隊尾刪除乙個item元素 is...
資料結構 佇列 雙端佇列
佇列 queue 是只允許在一端進行插入操作,而在另一端進行刪除操作的線性表。佇列是一種先進先出 first in first out 的線性表,簡稱fifo。允許插入的一端為隊尾,允許刪除的一端為對頭。佇列不允許在中間部位進行操作。假設佇列是q 那麼a1就是對頭元素,而an是隊尾元素。這樣我們就可...