Pyhon資料結構——棧(stack)
阿新 • • 發佈:2018-11-19
棧可以看成一個容器。先入棧的資料儲存在容器底部,後入棧的資料儲存在容器頂部。出棧的時候,後入棧的資料先出,先入棧的資料後出。因此棧有一個特性叫做後入先出(last in first out,LIFO)。
在pystack.py指令碼中,利用列表,建立了一個簡單的棧結構。程式碼如下:
# -*- coding:utf-8 -*- # file: pystack.py # class PyStack: # 堆疊類 def __init__(self, size = 20): self.stack = [] # 堆疊列表 self.size = size # 堆疊大小 self.top = -1 # 棧頂位置 def setSize(self, size): # 設定堆疊大小 self.size = size def push(self, element): # 元素進棧 if self.isFull(): raise StackException('PyStackOverflow')# 如果棧滿則引發異常 else: self.stack.append(element) self.top = self.top + 1 def pop(self): # 元素出棧 if self.isEmpty(): raise StackException('PyStackUnderflow') # 如果棧為空則引發異常 else: element = self.stack[-1] self.top = self.top - 1 del self.stack[-1] return element def Top(self): # 獲取棧頂位置 return self.top def empty(self): # 清空棧 self.stack = [] self.top = -1 def isEmpty(self): # 是否為空棧 if self.top == -1: return True else: return False def isFull(self): # 是否為滿棧 if self.top == self.size - 1: return True else: return False class StackException(Exception): #自定義異常類 def __init__(self,data): self.data=data def __str__(self): return self.data if __name__ == '__main__': stack = PyStack() # 建立棧 for i in range(10): stack.push(i) # 元素進棧 print(stack.Top()) # 輸出棧頂位置 for i in range(10): print(stack.pop()) # 元素出棧 stack.empty() # 清空棧 for i in range(21): stack.push(i) # 此處將引發異常
執行結果如下:
Python 3.6.1 (v3.6.1:69c0db5, Mar 21 2017, 18:41:36) [MSC v.1900 64 bit (AMD64)] on win32 Type "copyright", "credits" or "license()" for more information. >>> == RESTART: G:\中南碩士生涯\(全部)Python學習\《python資料分析從入門到精通》張嘯宇\原始碼\第5章\pystack.py == 9 9 8 7 6 5 4 3 2 1 0 Traceback (most recent call last): File "G:\pystack.py", line 56, in <module> stack.push(i) # 此處將引發異常 File "G:\pystack.py", line 13, in push raise StackException('PyStackOverflow')# 如果棧滿則引發異常 StackException: PyStackOverflow