Python数据结构——队列(queue)

版权声明:转载请注明出处 https://blog.csdn.net/Rex_WUST/article/details/83269231

先入队的元素先出队,即先进先出(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

猜你喜欢

转载自blog.csdn.net/Rex_WUST/article/details/83269231
今日推荐