python有棧嗎 Python 棧

2021-10-21 06:14:11 字數 1649 閱讀 4017

棧抽象資料型別由下面的結構和操作定義。棧是元素的有序集合,新增操作與移除操作都發生在其頂端。棧的操作順序是 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...