棧設計必要性解釋:
(1)棧是一種“後進先出”(Last In First Out,LIFO)或“先進後出”(First In Last Out,FILO)的數據結構。
(2)Python列表本身就可以實現棧結構的基本操作。例如,列表對象的append()方法是在列表尾部追加元素,類似於入棧操作;pop()方法默認是彈出並返回列表最後一個元素,類似於出棧操作。
(3)但是直接使用Python列表對象模擬棧操作並不是很方便,例如,當列表爲空時,若再執行pop()出棧操作,則會拋出一個很不友好的異常,另外,也無法限制棧的大小。
(4) 所以需要編寫一個棧的代碼來方便實現棧操作,運用到面向對象思想。
代碼實現:
class Stack:
def __init__(self,size=10): # __init__爲實例方法且內部成員爲私有成員,self代表將來要創建的對象的本身
self._content=[] # 定義實例屬性,"_"代表content爲私有成員
self._size=size
def empty(self): # 定義列表,內部成員爲共有成員,對象可以調用
self._content=[]
def isEmpty(self): # 判斷對象是否爲空
if not self._content:
return True
else:
return False
def setSize(self,size): # 定義大小
self._size=size
def isFull(self): # 判斷列表是否溢出
if len(self._content)==self._size:
return True
else:
return False
def push(self,v): # 入棧操作
if len(self._content)<self._size:
self._content.append(v)
else:
print("Stack Full!")
def pop(self): # 出棧操作
if self._content:
return self._content.pop()
else:
print("Stack is empty!")
def show(self): # 顯示棧
print(self._content)
def showRemainderSpace(self): # 統計棧中空白空間
print("Stack can still PUSH",self._size-len(self._content),"elements.")
x=Stack() #實例化對象
x.push(1) # 對象調用類實例方法 入棧
x.push(2)
x.show()
x.pop() # 出棧
x.show()
x.showRemainderSpace()
print(x.isEmpty())
print(x.isFull())
實驗結果:
以上內容均摘自董付國版《Python程序設計基礎》。