Python資料結構與演算法(四) 棧與佇列

2021-10-03 12:47:48 字數 3200 閱讀 4416

佇列棧(stack),有些地方稱為堆疊,是一種容器,可存入資料元素、訪問元素、刪除元素,它的特點在於只能允許在容器的一端(稱為棧頂端指標,英語:top)進行加入資料(英語:push)和輸出資料(英語:pop)的運算。沒有了位置概念,保證任何時候可以訪問、刪除的元素都是此前最後存入的那個元素,確定了一種預設的訪問順序。

由於棧資料結構只允許在一端進行操作,因而按照後進先出(lifo, last in first out)的原理運作。

棧可以用順序表實現,也可以用鍊錶實現。

class

stack

(object):

'棧'def

__init__

(self)

: self.__list=

defpush

(self,item)

:'新增乙個新元素到棧頂'

defpop

(self)

:'彈出棧頂元素'

return self.__list.pop(

)def

peek

(self)

:'返回棧頂元素'

if self.__list:

return self.__list[-1

]else

:return

none

defis_empty

(self)

:'判斷是否為空'

return self.__list==

defsize

(self)

:'判斷棧返回元素'

return

len(self.__list)

if __name__==

'__main__'

: s=stack(

) s.push(1)

s.push(2)

s.push(3)

s.push(4)

print

(s.pop())

print

(s.pop())

print

(s.pop())

print

(s.pop(

))

佇列(queue)是只允許在一端進行插入操作,而在另一端進行刪除操作的線性表。

佇列是一種先進先出的(first in first out)的線性表,簡稱fifo。允許插入的一端為隊尾,允許刪除的一端為隊頭。佇列不允許在中間部位進行操作!假設佇列是q=(a1,a2,……,an),那麼a1就是隊頭元素,而an是隊尾元素。這樣我們就可以刪除時,總是從a1開始,而插入時,總是在佇列最後。這也比較符合我們通常生活中的習慣,排在第乙個的優先出列,最後來的當然排在隊伍最後。

:'往佇列中新增乙個item元素'

defdequeue

(self)

:'從佇列頭部刪除乙個元素'

return self.__list.pop(0)

defis_empty

(self)

:'判斷乙個佇列是否為空'

return self.__list==

defsize

(self)

:'返回佇列的大小'

return

len(self.__list)

if __name__==

'__main__'

: s=queue(

) s.enqueue(1)

s.enqueue(2)

s.enqueue(3)

s.enqueue(4)

print

(s.dequeue())

print

(s.dequeue())

print

(s.dequeue())

print

(s.dequeue(

))

class

double_queue

(object):

'雙端佇列'

def__init__

(self)

: self.__list =

defadd_front

(self, item)

:'往佇列頭新增乙個item元素'

self.__list.insert(

0,item)

defadd_rear

(self, item)

:'往佇列尾新增乙個item元素'

defpop_front

(self)

:'從佇列頭部刪除乙個元素'

return self.__list.pop(0)

defpop_rear

(self)

:'從佇列尾部刪除乙個元素'

return self.__list.pop(

)def

is_empty

(self)

:'判斷乙個佇列是否為空'

return self.__list ==

defsize

(self)

:'返回佇列的大小'

return

len(self.__list)

if __name__ ==

'__main__'

: s = double_queue(

) s.add_front(1)

s.add_front(2)

s.add_front(3)

s.add_front(4)

print

(s.pop_front())

print

(s.pop_front())

print

(s.pop_front())

print

(s.pop_front(

))

python資料結構與演算法 棧

逆波蘭表示式 reverse polish notation 有效的運算子包括 每個運算物件可以是整數,也可以是另乙個逆波蘭表示式。輸入 2 1 3 輸出 9 解釋 2 1 3 9 分析 棧 遍歷陣列,逐漸壓入棧中,如果遇到運算字元,則彈出棧頂兩個元素,之後將計算結果再壓入棧中 class solu...

python資料結構與演算法 棧

棧 stack 建立乙個新的空棧 push item 新增乙個新的元素item到棧頂 pop 彈出棧頂元素 peek 返回棧頂元素 is empty 判斷棧是否為空 size 返回棧的元素個數 stack 建立乙個新的空棧 push item 新增乙個新的元素item到棧頂 pop 彈出棧頂元素 p...

資料結構與演算法之棧與佇列《四》

棧 stack 又名堆疊,它是一種運算受限的線性表。其限制是僅允許在表的一端進行插入和刪除運算。這一端被稱為棧頂,相對地,把另一端稱為棧底。向乙個棧插入新元素又稱作進棧 入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素 從乙個棧刪除元素又稱作出棧或退棧,它是把棧頂元素刪除掉,使其相鄰...