先入队的元素先出队,即先进先出(first in first out,FIFO)。
在python中同样可以使用列表,来构建一个队列。
# -*- coding:utf-8 -*-
# file: pyqueue.py
#
class PyQueue: # 创建队列
def __init__(self, size = 20):
self.queue = [] # 队列
self.size = size # 队列大小
self.end = -1 # 队尾
def setSize(self, size): # 设置队列大小
self.size = size
def In(self, element): # 入队
if self.end < self.size - 1:
self.queue.append(element)
self.end = self.end + 1
else:
raise QueueException('PyQueueFull') # 如果队列满则引发异常
def Out(self): # 出队
if self.end != -1:
element = self.queue[0]
self.queue = self.queue[1:]
self.end = self.end - 1
return element
else:
raise QueueException('PyQueueEmpty') # 如果对列为空则引发异常
def End(self): # 输出队尾
return self.end
def empty(self): # 清除队列
self.queue = []
self.end = -1
class QueueException(Exception): #自定义异常类
def __init__(self,data):
self.data=data
def __str__(self):
return self.data
if __name__ == '__main__':
queue = PyQueue()
for i in range(10):
queue.In(i) # 元素入队
print(queue.End())
for i in range(10):
print(queue.Out()) # 元素出队
for i in range(20):
queue.In(i) # 元素入队
queue.empty() # 清空队列
for i in range(20):
print(queue.Out()) # 此处将引发异常
运行结果如下:
Python 3.6.1 (v3.6.1:69c0db5, Mar 21 2017, 18:41:36) [MSC v.1900 64 bit (AMD64)] on win32
Type "copyright", "credits" or "license()" for more information.
>>>
== RESTART: G:\中南硕士生涯\(全部)Python学习\《python数据分析从入门到精通》张啸宇\源代码\第5章\pyqueue.py ==
9
0
1
2
3
4
5
6
7
8
9
Traceback (most recent call last):
** IDLE Internal Exception:
File "C:\Users\lenovo\AppData\Local\Programs\Python\Python36\lib\idlelib\run.py", line 460, in runcode
exec(code, self.locals)
File "G:\pyqueue.py", line 48, in <module>
print(queue.Out()) # 此处将引发异常
File "G:\pyqueue.py", line 24, in Out
raise QueueException('PyQueueEmpty') # 如果对列为空则引发异常
QueueException: PyQueueEmpty