1. 程式人生 > 程式設計 >python中實現棧的三種方法

python中實現棧的三種方法

棧是一種線性資料結構,用先進後出或者是後進先出的方式儲存資料,棧中資料的插入刪除操作都是在棧頂端進行,常見棧的函式操作包括

  • empty()– 返回棧是否為空 – Time Complexity : O(1)
  • size()–返回棧的長度 – Time Complexity : O(1)
  • top()– 檢視棧頂元素 – Time Complexity : O(1)
  • push(g)– 向棧頂新增元素 – Time Complexity : O(1)
  • pop()– 刪除棧頂元素 – Time Complexity : O(1)

python中棧可以用以下三種方法實現:

1)list

2)collections.deque

3)queue.LifoQueue

使用列表實現棧

python的內建資料結構list可以用來實現棧,用append()向棧頂新增元素,pop() 可以以後進先出的順序刪除元素

但是列表本身有一些缺點,主要問題就是當列表不斷擴大的時候會遇到速度瓶頸.列表是動態陣列,因此往其中新增新元素而沒有空間儲存新的元素時,它會自動重新分配記憶體塊,並將原來的記憶體中的值複製到新的記憶體塊中.這就導致了一些append()操作會消耗更多的時間

>>> stack = []
>>> #append() fuction to push
... #element in list
... 
>>> stack.append('hello')
>>> stack.append('world')
>>> stack.append('!')
>>> print('Initial stack')
Initial stack
>>> print(stack)
['hello','world','!']
>>> #pop() function to pop element
... #from stack in LIFO order
... 
>>> print('\nElement poped from stack')

Element poped from stack

>>> print(stack.pop())
!
>>> print(stack.pop())
world
>>> print(stack.pop())
hello
>>> print('\nStack after all elements are poped')

Stack after all elements are poped
>>> print(stack)
[]

使用collections.deque實現棧

python中棧也可以用deque類實現,當我們想要在實現在容器兩端更快速地進行append和pop操作時,deque比列表更合適.deque可以提供O(1)時間的append和pop操作,而列表則需要O(n)時間.

>>> from collections import deque
>>> stack = deque()
>>> # append() fuction to push
... #element in list
... 
>>> stack.append('hello')
>>> stack.append('world')
>>> stack.append('!')
>>> print('Initial stack')
Initial stack
>>> print(stack)
deque(['hello','!'])
>>> #pop() function to pop element
... #from stack in LIFO order
... 
>>> print('\nElement poped from stack')

Element poped from stack
>>> print(stack.pop())
!
>>> print(stack.pop())
world
>>> print(stack.pop())
hello
>>> print('\nStack after all elements are poped')

Stack after all elements are poped
>>> print(stack)deque([])

使用queue module實現棧

Queue模組有LIFO queue,也就是棧結構.用put()和get()操作從Queue中新增和獲得資料

>>> from queue import LifoQueue
>>> stack = LifoQueue(maxsize = 3)
>>> print(stack.qsize())
0
>>> stack.put('hello')
>>> stack.put('world')
>>> stack.put('!')
>>> print('\nElement poped from stack')

Element poped from stack
>>> print(stack.get())
!
>>> print(stack.get())
world
>>> print(stack.get())
hello
>>> print('\nEmpty:',stack.empty())

Empty: True

以上就是python中實現棧的三種方法的詳細內容,更多關於python 實現棧的資料請關注我們其它相關文章!