棧(Stack)的Python實現

2021-09-10 09:10:51 字數 1746 閱讀 3917

棧就是只能在一端插入和刪除資料的鍊錶,這個端就叫做棧頂(top),最後乙個新增的資料第乙個被刪除。因此,這也叫後進先出(last in first out)鍊錶或是先進後出鍊錶(first in last out)。

舉個例子,餐廳的盤子堆,盤子洗完要堆到上面,而不是插到下面的某個位置(相信不會有人那麼做)。當廚師要用到盤子時從最上面的開始拿。即最先放在堆裡的盤子會被最後乙個用到。

棧有兩種操作:

有些情況下,棧的最大長度有限。如果棧中元素已經達到最大長度,再用進棧指令會造成堆疊上溢位(stack overflow),相似的,如果堆疊已空還用出棧指令會造成堆疊下溢位(stack underflow)。

class stack(object):

def __init__(self, limit=10):

self.__items =

self.__limit = limit

def isempty(self):

return self.__items ==

def peek(self):

return self.__items[len(self.__items) - 1]

def size(self):

return len(self.__items)

def push(self, item):

if len(self.__items) >= self.__limit:

self.double_limit()

def pop(self):

if len(self.__items) <= 0:

return -1

else:

return self.__items.pop()

def double_limit(self):

self.__limit *= 2

if __name__=="__main__":

mystack = stack()

mystack.push(1)

mystack.push(3)

mystack.push(5)

mystack.push(7)

mystack.push(8)

print(mystack.size())

mystack.pop()

mystack.pop()

mystack.pop()

print(mystack.size())

在python中,列表就類似是乙個棧,提供介面如下:

操作描述

s =

建立乙個棧

往棧內新增乙個元素

s.pop()

在棧內刪除乙個元素

not s

判斷是否為空棧

len(s)

獲取棧內元素的數量

s[-1]

獲取棧頂的元素

>>> stack = [3, 4, 5]

>>> stack

[3, 4, 5, 6, 7]

>>> stack.pop()

7>>> stack

[3, 4, 5, 6]

>>> stack.pop()

6>>> stack.pop()

5>>> stack

[3, 4]

Python實現的棧(stack)

class stack def init self self.stack 推入元素到棧的頂端 defpush self,item 從棧的頂端拿走元素 defpop self self.stack.pop 檢查是否為空 defis empty self return len self.stack 0 ...

棧Stack的實現及其應用

棧 先進後出 實現方式有兩種,一種使用陣列,一種是鏈式結構 使用陣列的缺點就是在定義棧的時候就需要以某值初始化陣列,確定陣列的大小,也就是確定了棧的深度 棧 底層用陣列實現 public class arrstack 陣列滿的時候棧滿 public boolean isfull 棧空時top為 1 ...

棧(Stack)原理及實現

目錄 棧概述順序結構實現 鍊錶結構實現 歸納起來 棧就是一種後進先出 lifo 的線性表。棧常用操作 順序儲存結構的棧簡稱為順序棧,它利用一組位址連續的儲存單元依次存放從棧底到棧頂的資料元素。棧底位置固定不變,它的棧頂元素可以直接通過順序棧底層陣列的陣列元素arr size 1 來訪問。以指定長度的...