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