什么是队列?
队列就是只能在一端插入,而在另一端删除的线性表,故队列又称为先进先出队列
队列类型有哪些?
循环队列和顺序队列
队列的存储实现方式有哪些?
顺序存储(数组)和链式存储(链表),此博文描述的是数组的实现(后续更新链表实现)
代码实现
初始化队列:初始化一个size长度的队列,队列的值都为0
判断队列是否已满:队列满,不可插入队列
判断队列是否为空:队列空,没有数据可以出队
入队:将数据item插入队列
出队:将对头元素从队列中删除并返回的值
class Queue:
"""非循环队列"""
def __init__(self, size):
self.size = size
self.front = -1
self.rear = -1
self.queue = [0]*size
def enqueue(self, item):
if self.isFull():
raise Exception('队列满')
else:
self.rear += 1
self.queue[self.rear] = item
def dequeue(self):
if self.isEmpty():
raise Exception('队列空')
else:
self.front += 1
data = self.queue[self.front]
self.queue[self.front] = 0
return data
def isFull(self):
return self.rear - self.front == self.size
def isEmpty(self):
return self.rear == self.front
def showQueue(self):
print(self.queue)
class circleQueue:
"""循环队列"""
def __init__(self, size):
self.size = size + 1
self.front = 0
self.rear = 0
self.queue = [0] * self.size
def enQueue(self, item):
"""进队列,将值放进队列"""
if self.isFull():
raise Exception('队列满')
else:
self.queue[self.rear] = item
self.rear = (self.rear+1) % self.size
return True
def deQueue(self):
"""出队,移动队头的索引"""
if self.isEmpty():
raise Exception('队列空')
else:
self.front = (self.front+1) % self.size
return True
def frontItem(self):
"""返回队头的值"""
if self.isEmpty():return -1
return self.queue[self.front]
def rearItem(self):
"""返回队尾的值"""
if self.isEmpty():return -1
return self.queue[(self.rear - 1 + self.size) % self.size]
def isEmpty(self):
return self.rear == self.front
def isFull(self):
return (self.rear+1) % self.size == self.front
def showQueue(self):
print(self.queue)