資料結構與演算法 雙端佇列及Python實現

2021-10-24 08:30:36 字數 2189 閱讀 4548

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)

「回文詞」指正讀和反讀都一樣的詞

如:	radar 、madam 、toot

上海自來水來自海上

山東落花生花落東山

演算法:用雙端佇列很容易解決「回文詞」問題,先將需要判定的詞從隊尾加入deque,再從兩端同時移除字元判定是否相同,直到deque 中剩下0 個或1個字元。

【**】

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

print

(palchecker(

'上海自來水來自海上'))

# true

print

(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是隊尾元素。這樣我們就可...