1、資料儲存方式:可以採用列表或單鏈表
2、操作:
stack() 建立乙個新的空棧
push(data) 新增乙個新的元素data到棧頂
pop() 彈出棧頂元素
peek() 返回棧頂元素
is_empty() 判斷棧是否為空
size() 返回棧的元素個數
"""
採用列表儲存的方式
"""class
stack
(object):
"""棧"""
def__init__
(self):
"""初始化"""
self.__list = # 定義乙個列表用於存放資料
defpush
(self, data):
"""新增乙個新的元素data到棧頂"""
defpop
(self):
"""彈出棧頂元素"""
return self.__list.pop() # 從列表尾部出棧操作
""" 也可以把列表頭部作為棧頂,如果把列表頭部作為棧頂,
則壓棧就是 self.__list.insert(0, data),
出棧則是self.__list.pop(0)
此種方式與把列表尾部作為棧頂區別在於,列表尾部操作時間複雜度是o(1),而頭部操作時間複雜度是o(n)
"""defpeek
(self):
"""返回棧頂元素"""
if self.__list: # 列表為空時,返回none,否則返回最後乙個元素
return self.__list[-1]
else:
return
none
defis_empty
(self):
"""判斷棧是否為空"""
return
not self.__list # 列表為空時,返回true,否則返回false
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.peek())
print("判空:", s.is_empty())
print("長度:", s.size())
print(s.pop())
print(s.pop())
print(s.pop())
print(s.pop())
print("棧頂資料:", s.peek())
print("判空:", s.is_empty())
print("長度:", s.size())
執行結果
棧頂資料: 4
判空: false
長度: 443
21棧頂資料: none
判空: true
長度: 0
"""
採用單鏈表儲存的方式
"""import singlelinklist
class
stack
(object):
"""棧"""
def__init__
(self):
"""初始化"""
self.__sll = singlelinklist() # 定義乙個鍊錶用於存放資料
defpush
(self, data):
"""新增乙個新的元素data到棧頂"""
self.__sll.add(data) # 把鍊錶的頭部作為棧頂
defpop
(self):
"""彈出棧頂元素"""
data = self.peek() # 獲取棧頂的元素
if data:
self.__sll.remove(data) # 刪除棧頂的元素
return data # 把鍊錶的頭部作為棧頂
defpeek
(self):
"""返回棧頂元素"""
return self.__sll.index(0) # 直接返回首節點的元素
# return self.__sll._singlelinklist__head.data # 可以通過例項訪問類的私有變數
defis_empty
(self):
"""判斷棧是否為空"""
return self.__sll.is_empty() # 直接返回鍊錶判空結果 true空
defsize
(self):
"""返回棧的元素個數"""
return self.__sll.length() # 直接返回鍊錶的長度
if __name__ == '__main__':
s = stack()
s.push(1)
s.push(2)
s.push(3)
s.push(4)
print("棧頂資料:", s.peek())
print("判空:", s.is_empty())
print("長度:", s.size())
print(s.pop())
print(s.pop())
print(s.pop())
print(s.pop())
print("棧頂資料:", s.peek())
print("判空:", s.is_empty())
print("長度:", s.size())
執行結果
棧頂資料: 4
判空: false
長度: 443
21棧頂資料: none
判空: true
長度: 0
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...
資料結構演算法 棧
棧是一種操作受限的線性表,在我們平時的日常生活中,可以看到許多與之相似的場景。比如一層一層疊起來的盤子,我們網上疊的時候,是乙個個乙個向上疊加,我們在取的時候,也是從最上面乙個乙個拿走。不能從中間直接抽取 這種滿足先進者後出,後進者先出的就是棧結構 因為只允許在一端插入和刪除,所以這是一種操作受限的...