棧抽象資料型別由下面的結構和操作定義。棧是元素的有序集合,新增操作與移除操作都發生在其頂端。棧的操作順序是 lifo,它支援以下操作:
stack() 建立乙個空棧。它不需要引數,且會返回乙個空棧。
push(item) 將乙個元素新增到棧的頂端。它需要乙個引數 item,且無返回值。
pop() 將棧頂端的元素移除。它不需要引數,但會返回頂端的元素,並且修改棧的內容。
peek() 返回棧頂端的元素,但是並不移除該元素。它不需要引數,也不會修改棧的內容。
isempty() 檢查棧是否為空。它不需要引數,且會返回乙個布林值。
size() 返回棧中元素的數目。它不需要引數,且會返回乙個整數。
抽象資料型別的實現常被稱為資料結構
和其他物件導向程式設計語言一樣,每當需要在 python 中實現像棧這樣的抽 象資料型別時,就可以建立新類。棧的操作通過方法實現。更進一步地說,因為棧是元素的集合, 所以完全可以利用 python 提供的強大、簡單的原生集合來實現。這裡,我們將使用列表。
棧的實現,它假設列表的尾部是棧的頂端。當棧增長時(即進行 push 操作),新的元素會被新增到列表的尾部。pop 操作同樣會修改這一端。
用 python實現棧
class stack:
def __init__(self):
self.items =
def isempty(self):
return self.items ==
def push(self, item):
def pop(self):
if not self.items:
return none
else:
return self.items.pop()
def peek(self):
if not self.items:
return none
else:
return self.items[-1]
def size(self):
return len(self.items)
值得注意的是,也可以選擇將列表的頭部作為棧的頂端。
棧的另一種實現方式,選擇將列表的頭部作為棧的頂端
class stack2:
def __init__(self):
self.items =
def isempty(self):
return self.items ==
def push(self, item):
self.items.insert(0, item)
def pop(self):
return self.items.pop(0)
def peek(self):
return self.items[0]
def size(self):
return len(self.items)
改變抽象資料型別的實現卻保留其邏輯特徵,這種能力體現了抽象思想。
儘管上述兩 種實現都可行,但是二者在效能方面肯定有差異:
這意味著不論棧中有多少個元素,第一種實現中的 push 操作和 pop 操作都會在恆定的時間內完成
第二種實現的效能則受制於棧中的元素個數
因為 insert(0) 和 pop(0) 的時間複雜度都是 o(n),元素越多就越慢
python有類嗎 Python有匿名類嗎?
我想知道python是否有類似c 匿名類特性的東西。為了澄清這一點,這裡有乙個示例c 片段 var foo new var bar new foo.equals bar true 在python中,我可以想象如下 foo record x 1,y 2 bar record y 2,x 1 foo b...
python有多型嗎 Python 多型
python多型 思維導圖 多型概念 一種事物具備多種 不同的形態 例如 水 固態 液態 氣態 官方解釋 多個不同類的物件可以響應同乙個方法,產生不同的結果 首先強調多型不是一種特殊的語法,而是一種狀態 特性 即多個不同物件可以響應同乙個方法,產生不同結果 好處 對於使用者而言,大大的降低了使用難度...
Python有那麼神嗎?
這個問題其實簡單點說 就是講 python 到底能做什麼?它的優點在哪?資料庫 python在資料庫方面很優秀,可以和多種資料庫進行連線,進行資料處理,從商業型的資料庫到開放原始碼的資料庫都提供支援。例如 oracle,my sql server等等。有多種介面可以與資料庫進行連線,至少包括odbc...