Python資料結構——佇列(queue)
阿新 • • 發佈:2018-11-19
先入隊的元素先出隊,即先進先出(first in first out,FIFO)。
在python中同樣可以使用列表,來構建一個佇列。
# -*- coding:utf-8 -*- # file: pyqueue.py # class PyQueue: # 建立佇列 def __init__(self, size = 20): self.queue = [] # 佇列 self.size = size # 佇列大小 self.end = -1 # 隊尾 def setSize(self, size): # 設定佇列大小 self.size = size def In(self, element): # 入隊 if self.end < self.size - 1: self.queue.append(element) self.end = self.end + 1 else: raise QueueException('PyQueueFull') # 如果佇列滿則引發異常 def Out(self): # 出隊 if self.end != -1: element = self.queue[0] self.queue = self.queue[1:] self.end = self.end - 1 return element else: raise QueueException('PyQueueEmpty') # 如果對列為空則引發異常 def End(self): # 輸出隊尾 return self.end def empty(self): # 清除佇列 self.queue = [] self.end = -1 class QueueException(Exception): #自定義異常類 def __init__(self,data): self.data=data def __str__(self): return self.data if __name__ == '__main__': queue = PyQueue() for i in range(10): queue.In(i) # 元素入隊 print(queue.End()) for i in range(10): print(queue.Out()) # 元素出隊 for i in range(20): queue.In(i) # 元素入隊 queue.empty() # 清空佇列 for i in range(20): print(queue.Out()) # 此處將引發異常
執行結果如下:
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章\pyqueue.py == 9 0 1 2 3 4 5 6 7 8 9 Traceback (most recent call last): ** IDLE Internal Exception: File "C:\Users\lenovo\AppData\Local\Programs\Python\Python36\lib\idlelib\run.py", line 460, in runcode exec(code, self.locals) File "G:\pyqueue.py", line 48, in <module> print(queue.Out()) # 此處將引發異常 File "G:\pyqueue.py", line 24, in Out raise QueueException('PyQueueEmpty') # 如果對列為空則引發異常 QueueException: PyQueueEmpty