前言
常見python面試題:如何用python實現棧(Stack)的操作?
什么是棧(Stack)
棧是一個很基本的數據結構,也是非常重要的數據結構,棧的特點:“先進后出,后進先出”,舉個生活中最常見的例子
彈夾大家並不陌生,先按進去的最后才打出來,最后按進去的最先打出來,這就是棧的數據結構。
下圖是詳細的棧結構
所有的操作只在一端進行(如:彈夾),有2個最基本的操作,入棧(子彈按進去) 和 出棧 (子彈彈出來)。
棧有兩端,最底端叫棧底,最上端叫棧頂。
python 實現棧(Stack)
弄清楚了棧的基本結構和操作后,就可以用python寫一個棧(Stack)
定義抽象數據類型棧的各種操作:
- Stack():創建一個空棧,不包含任何數據項
- push(item):將item加入棧頂,無返回值
- pop():將棧頂數據項移除,並返回所移除的值,棧被修改
- peek():“窺視”棧頂數據項,返回棧頂的數據項但不移除,棧不被修改
- isEmpty():返回棧是否為空棧
- size():返回棧中有多少個數據項
class Stack(object):
def __init__(self):
self.items = []
def is_empty(self):
"""判斷是否為空集"""
return self.items == []
def push(self, item):
"""添加新元素到棧頂"""
self.items.append(item)
def pop(self):
"""刪除棧頂元素"""
return self.items.pop()
def peek(self):
"""窺探棧頂元素"""
return self.items[-1]
def size(self):
"""查看棧的大小"""
return len(self.items)
if __name__ == '__main__':
stack = Stack()
print(stack.is_empty())
stack.push(2) # 入棧
stack.push(3) # 入棧
print(stack.size())
print(stack.peek())
stack.pop() # 出棧
print(stack.size())
運行結果
True
2
3
1