码迷,mamicode.com
首页 > 编程语言 > 详细

Python与数据结构[2] -> 队列/Queue[0] -> 数组队列的 Python 实现

时间:2018-01-15 00:31:31      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:因此   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 | 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 实现

标签:因此   html   item   pytho   setter   some   定制   def   过程   

原文地址:https://www.cnblogs.com/stacklike/p/8284617.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!