python演算法 實現棧的基本操作

2021-09-25 20:43:53 字數 3045 閱讀 4824

實現乙個棧的資料結構,使其具有:入棧、出棧、取棧頂元素、判斷棧是否為空、獲取棧中元素個數

# -*- coding:utf-8 -*-

'''陣列實現棧的資料結構:入棧、出棧、取棧頂元素、判斷棧是否為空、獲取棧中元素個數

'''class mystack:

#模擬棧

def __init__(self):

self.items =

#判斷是否為空

def isempty(self):

return len(self.items) == 0

#返回棧大小

def size(self):

return len(self.items)

#返回棧頂元素

def top(self):

if not self.isempty():

return self.items[len(self.items)-1]

else:

return none

#出棧def pop(self):

if len(self.items)>0:

return self.items.pop()

else:

print("棧已為空!")

return none

#入棧def push(self,item):

if __name__ == "__main__":

s = mystack()

s.push(6)

s.push(3)

print("棧頂元素為:"+str(s.top()))

print("棧大小為:"+str(s.size()))

s.pop()

print("出棧成功!")

print("棧頂元素為:" + str(s.top()))

print("棧大小為:" + str(s.size()))

s.pop()

print("出棧成功!")

s.pop()

執行效果:

棧頂元素為:3

棧大小為:2

出棧成功!

棧頂元素為:6

棧大小為:1

出棧成功!

棧已為空!

# -*- coding:utf-8 -*-

'''鍊錶實現棧的資料結構:入棧、出棧、取棧頂元素、判斷棧是否為空、獲取棧中元素個數

頭結點指向棧頂結點

'''#構造空結點

class lnode():

def __init__(self):

self.data = none

self.next = none

#構造棧

class mystack():

#帶頭結點的鍊錶

def __init__(self):

self.data = none

self.next = none

#判斷stack為空,如果為空返回true,否則返回false

def empty(self):

if self.next == none:

return true

else:

return false

#獲取棧中元素個數

def size(self):

size = 0

p = self.next

while p != none:

p = p.next

size += 1

return size

#入棧:其實就是頭插法建立鍊錶中的插入操作

def push(self,e):

p = lnode()

p.data = e

p.next = self.next

self.next = p

#出棧,同時返回棧頂元素

def pop(self):

tmp = self.next

if tmp != none:

self.next = tmp.next

return tmp.data

print("棧已為空!")

return none

#取得棧頂元素

def top(self):

if self.next != none:

return self.next.data

print("棧已為空,無法獲得棧頂元素~~~")

return none

if __name__ == "__main__":

stack = mystack()

stack.push(10)

stack.push(20)

print("棧頂元素為:"+str(stack.top()))

print("棧大小為:" +str(stack.size()))

stack.pop()

print("出棧成功!")

print("棧頂元素為:" + str(stack.top()))

print("棧大小為:" + str(stack.size()))

stack.pop()

print("出棧成功!")

stack.pop()

執行結果:

棧頂元素為:20

棧大小為:2

出棧成功!

棧頂元素為:10

棧大小為:1

出棧成功!

棧已為空!

陣列實現棧:

優點:乙個元素值占用乙個空間;

缺點:如果初始化申請儲存空間太大,會造成空間浪費,如果申請儲存空間太小,後期經常需要擴充儲存空間,擴充儲存空間是個費事的操作,這樣會造成效能下降。

鍊錶實現棧:

優點:靈活方便,只有在需要的時候才會申請空間

缺點:除了要儲存元素外,還需要額外儲存空間儲存指標資訊。

效能分析:

兩種方法入棧、出棧時間複雜度均為o(1)

棧的定義及基本演算法實現

棧定義 是一種只能在一端進行插入或刪除操作的線性表 1 允許 進行插入 刪除操作的一端稱為 棧 頂 2 表的另一端稱為 棧底 3 當棧中沒有資料元素時 稱為 空棧 4 棧的插入操作通常稱為 進棧 或 入 棧 5 棧的刪除操作通常稱為 退棧 或 出棧 例如 死胡同就是乙個棧 洗1疊碗時的取放 棧據有先...

python實現基本演算法

classnode object 建立節點類 def init self elem 1 lchild none,rchild none self.elem elem self.lchild lchild self.rchild rchild 就是每次將樹中的節點依次取出來,放入佇列,判斷 class...

python的操作步驟 python基本操作

一 python介紹 1 什麼是python python 是乙個高層次的結合了解釋性 編譯性 互動性和面向 物件的指令碼語言。2 什麼是物件導向 這意味著python支援物件導向的風格或 封裝在 物件的程式設計技術。3 什麼是解釋型別 這意味著開發過程中沒有了編譯這個環節。4 什麼是動態型別 5 ...