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

來源:互聯網
上載者:User

標籤:因此   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 實現

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.