資料結構及演算法(Python) 棧

2021-08-09 06:56:06 字數 3164 閱讀 4489

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...

資料結構演算法 棧

棧是一種操作受限的線性表,在我們平時的日常生活中,可以看到許多與之相似的場景。比如一層一層疊起來的盤子,我們網上疊的時候,是乙個個乙個向上疊加,我們在取的時候,也是從最上面乙個乙個拿走。不能從中間直接抽取 這種滿足先進者後出,後進者先出的就是棧結構 因為只允許在一端插入和刪除,所以這是一種操作受限的...