棧就是只能在一端插入和刪除資料的鍊錶,這個端就叫做棧頂(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 來訪問。以指定長度的...