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

Queue:
<--| 1 | 2 | 3 | 4 | 5 |<--

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 数组栈

原文作者：StackLike
原文地址: https://www.cnblogs.com/stacklike/p/8284617.html
本文转自网络文章，转载此文章仅为分享知识，如有侵权，请联系博主进行删除。