循环队列是一种特殊的队列,它的尾部连接到头部,形成一个循环体。当队列满时,新元素会替换队头元素。
循环队列可以通过数组实现,关键就是控制好队头指针front和队尾指针rear,具体实现如下:
public class CircleQueue {
private int[] arr; // 数组
private int front; // 队头指针
private int rear; // 队尾指针
private int size; // 当前队列大小
public CircleQueue(int capacity) {
arr = new int[capacity];
front = 0;
rear = 0;
size = 0;
}
// 入队操作
public void enQueue(int element) {
if (isFull()) {
System.out.println("Queue is full!");
return;
}
arr[rear] = element;
rear = (rear + 1) % arr.length; // circulating rear pointer
size++;
}
// 出队操作
public int deQueue() {
if (isEmpty()) {
throw new RuntimeException("Queue is empty!");
}
int element = arr[front];
front = (front + 1) % arr.length; // circulating front pointer
size--;
return element;
}
// ...
}
关键点是使用数组的模(%操作)来循环移动front和rear指针,这确保了队列在数组范围内循环使用。
当队列满时,front == rear,此时入队会覆盖front指向的元素,实现循环使用数组空间。
通过控制好指针和使用模运算,我们实现了基于数组的循环队列。
循环队列相比普通队列的主要优点是在大小受限的情况下,可以循环使用空间,不会出现“队列满”的情况。这在需要固定长度的队列情况下比较实用。
© 版权声明
本文刊载的所有内容,包括文字、图片、音频、视频、软件、程序、以及网页版式设计等部门来源于互联网,版权均归原作者所有!本网站提供的内容服务于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯本网站及相关权利人的合法权利。
联系信息:邮箱aoxolcom@163.com或见网站底部。
联系信息:邮箱aoxolcom@163.com或见网站底部。
THE END



















请登录后发表评论
注册
社交帐号登录