實現乙個棧的資料結構,使其具有:入棧、出棧、取棧頂元素、判斷棧是否為空、獲取棧中元素個數
# -*- 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 ...