先进先出
1. 循环队列的思想
循环队列使用特定数组作为容器,通过取模运算,数组可以实现循环使用。
front与rear用来描述队头与队尾。
空队列: front==rear 非空队列: front为空,rear指向末元素
当队列满的时候,(rear+1)%QueueSize==front%QueueSize,
其长度实际为数组长度减1
2. 循环队列的实现
1. 队列初始化
令front与rear等于0
class CircleQueue:
def __init__(self,QueueSize=10):
self.QueueSize=QueueSize
self.data=[None]*self.QueueSize
self.front=self.rear=0
2. 入队操作
1.判断是否上溢
2.修改尾指针并赋值
def EnQueue(self,x):
#首先判断是否会溢出
if self.front==(self.rear+1)%self.QueueSize:
raise ValueError("上溢异常")
#若不会溢出,则添加元素
#例如,QueueSize=10
#self.rear由8变为9,由9变为0
self.rear=(self.rear+1)%self.QueueSize
self.data[self.rear]=x
3. 出队操作
1.判断是否下溢
2.修改头指针并返回出队元素的值
def DeQueue(self,x):
#首先判断是否为空
if self.front==self.rear:
raise ValueError("下溢异常")
#若不会异常,则出队
self.front=(self.front+1)%self.QueueSize
#可以不用修改front为空
return self.data[self.front]
4.获取队头元素 获取长度
def GetFront(self):
if self.rear==self.front:
raise ValueError("下溢异常")
return self.data[(self.front+1)%self.QueueSize]
def GetLength(self):
#return (self.rear-self.front)
return (self.rear-self.front+self.QueueSize)%self.QueueSize