1. 程式人生 > >Python與數據結構[2] -> 隊列/Queue[0] -> 數組隊列的 Python 實現

Python與數據結構[2] -> 隊列/Queue[0] -> 數組隊列的 Python 實現

return 閱讀 位置 pri end 實現 http family 隊列實現

隊列 / 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 | 7

Enqueue element to queue:
1 | 2 | 3 | 4 | 5 | 6 | 7 | like

Dequeue element from queue:
Element 1 deququed,
2 | 3 | 4 | 5 | 6 | 7 | like

Set queue max size:
Resize queue failed, please dequeue some elements first.

Set queue max size:
7

Enqueue full queue:
Error: trying to enqueue element into a full queue

Clear queue:


Queue is empty:
True

Dequeue empty queue:
Error: trying to dequeue element from an empty queue

相關閱讀


1 數組棧

Python與數據結構[2] -> 隊列/Queue[0] -> 數組隊列的 Python 實現