队列,又称为伫列(queue),是先进先出(FIFO, First-In-First-Out)的线性表。在具体应用中通常用链表或者数组来实现。队列只允许在后端(称为rear)进行插入操作,在前端(称为front)进行删除操作。
1) 设循环队列的容量为50(序号从0到49),现经过一系列的入队和出队运算后,有 front=16,rear=5(front指向队头,rear指向队尾元素的后一位置),当前循环队列中元素个数为多少?请给出计算过程。
2) 该循环队列为空的条件是什么?队满的条件是什么?
3) 请用熟悉的程序语言实现循环队列,需要有队列的插入,删除方法以及判断队列是否为空,队列是否已经满方法。
(1)
元素个数=(rear−front+容量)mod容量
元素个数=(5−16+50)mod50 = 39
(2)
2.队空front == rear
3.队满(rear+1)%队容量==front
(3)
class CircularQueue:
def __init__(self, capacity):
self.capacity = capacity
self.queue = [None] * capacity
self.front = self.rear = -1
def is_empty(self):
return self.front == -1
def is_full(self):
return (self.rear + 1) % self.capacity == self.front
def enqueue(self, item):
if self.is_full():
print("Queue is full. Cannot enqueue.")
return
elif self.is_empty():
self.front = self.rear = 0
else:
self.rear = (self.rear + 1) % self.capacity
self.queue[self.rear] = item
print(f"Enqueued {item} to the queue.")
def dequeue(self):
if self.is_empty():
print("Queue is empty. Cannot dequeue.")
return None
elif self.front == self.rear:
item = self.queue[self.front]
self.front = self.rear = -1
else:
item = self.queue[self.front]
self.front = (self.front + 1) % self.capacity
print(f"Dequeued {item} from the queue.")
return item
# 示例用法
if __name__ == "__main__":
queue = CircularQueue(5)
print("Is queue empty?", queue.is_empty()) # 应该输出 True
queue.enqueue(1)
queue.enqueue(2)
queue.enqueue(3)
queue.enqueue(4)
queue.enqueue(5)
print("Is queue full?", queue.is_full()) # 应该输出 True
queue.enqueue(6) # 应该输出 "Queue is full. Cannot enqueue."
queue.dequeue()
queue.dequeue()
queue.dequeue()
print("Is queue empty?", queue.is_empty()) # 应该输出 False