標籤:因此 html item pytho setter some 定製 def 過程
隊列 / Queue
數組隊列
數組隊列是隊列基於數組的一種實現,其實作類別似於數組棧,是一種FIFO的線性資料結構。
Queue: <--| 1 | 2 | 3 | 4 | 5 |<--
下面將使用Python中的list來替代C語言中的數組實現數組隊列的資料結構。
Note: 這裡的實現並沒有像C語言中的申請一塊固定大小的數組,手動的定製數組中隊列的頭尾位置,而是利用list的特性直接完成,因此較為簡單。
數組隊列的實現與數組棧的實現基本類似,同時入列和出列也十分簡單,僅需要對數組進行操作即可。
這裡直接給出完整代碼和運行結果,實現過程可參考數組棧的實現。
後續再補充固定數組大小的隊列實現。
完整代碼
1 class QueueEmptyException(Exception): pass 2 3 4 class QueueFullException(Exception): pass 5 6 7 class Queue: 8 """ 9 Queue: 10 <--| 1 | 2 | 3 | 4 | 5 |<-- 11 """ 12 def __init__(self, max=0): 13 self.queue = [] 14 self._max = max 15 self.max = max 16 17 def __str__(self): 18 return ‘ | ‘.join(map(str, self.queue)) 19 20 def init(self, iterable=()): 21 if not iterable: 22 return 23 self.queue.extend(list(iterable)) 24 25 @property 26 def max(self): 27 return self._max 28 29 @max.setter 30 def max(self, m): 31 m = int(m) 32 if m < self.length: 33 raise Exception(‘Resize queue failed, please dequeue some elements first.‘) 34 self._max = m 35 if self._max < 0: 36 self._max = 0 37 38 def show(self): 39 print(self) 40 41 @property 42 def length(self): 43 return len(self.queue) 44 45 @property 46 def is_empty(self): 47 return not bool(self.queue) 48 49 @property 50 def is_full(self): 51 return bool(self._max and self.length == self._max) 52 53 def enqueue(self, item): 54 if self.is_full: 55 raise QueueFullException(‘Error: trying to enqueue element into a full queue‘) 56 self.queue.append(item) 57 58 def dequeue(self): 59 if self.is_empty: 60 raise QueueEmptyException(‘Error: trying to dequeue element from an empty queue‘) 61 front = self.queue[0] 62 self.queue = self.queue[1:] 63 return front 64 65 def clear(self): 66 self.queue = [] 67 68 69 def test(queue): 70 print(‘\nInit queue:‘) 71 queue.init([1, 2, 3, 4, 5, 6, 7]) 72 queue.show() 73 74 print(‘\nEnqueue element to queue:‘) 75 queue.enqueue(‘like‘) 76 queue.show() 77 78 print(‘\nDequeue element from queue:‘) 79 e = queue.dequeue() 80 print(‘Element %s deququed,‘ % e) 81 queue.show() 82 83 print(‘\nSet queue max size:‘) 84 try: 85 queue.max = 1 86 except Exception as e: 87 print(e) 88 89 print(‘\nSet queue max size:‘) 90 queue.max = 7 91 print(queue.max) 92 93 print(‘\nEnqueue full queue:‘) 94 try: 95 queue.enqueue(7) 96 except QueueFullException as e: 97 print(e) 98 99 print(‘\nClear queue:‘)100 queue.clear()101 queue.show()102 103 print(‘\nQueue is empty:‘)104 print(queue.is_empty)105 106 print(‘\nDequeue empty queue:‘)107 try:108 queue.dequeue()109 except QueueEmptyException as e:110 print(e)111 112 if __name__ == ‘__main__‘:113 test(Queue())
運行得到結果
Init queue:1 | 2 | 3 | 4 | 5 | 6 | 7Enqueue element to queue:1 | 2 | 3 | 4 | 5 | 6 | 7 | likeDequeue element from queue:Element 1 deququed,2 | 3 | 4 | 5 | 6 | 7 | likeSet queue max size:Resize queue failed, please dequeue some elements first.Set queue max size:7Enqueue full queue:Error: trying to enqueue element into a full queueClear queue:Queue is empty:TrueDequeue empty queue:Error: trying to dequeue element from an empty queue
相關閱讀
1 數組棧
Python與資料結構[2] -> 隊列/Queue[0] -> 數組隊列的 Python 實現