定义 队列是一个遵循“先进先出”(First-In-First-Out, FIFO)原则的线性数据结构。简单来说,元素按照一定的顺序加入到队列的一端(称为尾部或后端),然后从另一端(称为头部或前端)按照加入的先后顺序逐个移除。
操作 队列支持以下主要操作:
有限制的插入与删除: 队列对插入和删除操作的位置有严格的限制,这种约束使得队列能有效地管理需要按顺序处理的任务或事件。
FIFO性质: 遵循先进先出原则是队列的核心特性,确保了最早加入队列的元素会被优先处理,这对于维护数据处理的公平性和一致性至关重要。
动态变化: 随着enqueue和dequeue操作的进行,队列的大小会动态改变,适应不同的应用场景需求。
数组实现
初始化队列结构:
front
(队头指针,初始值为0)、rear
(队尾指针,初始值为0)以及maxSize
(数组的容量,即队列的最大容量)。入队操作(addQueue):
rear
指向的位置,然后通过取模运算更新rear
指针:rear = (rear + 1) % maxSize
。出队操作(dequeue):
front ==
rear
),如果队列为空,则不能出队。front
位置的元素,然后通过取模运算更新front
指针:front = (front + 1) % maxSize
。判断队列状态:
front
和rear
可以判断队列是空还是满。当它们相等时,若之前有元素进出过队列,则队列为空;否则,需要考虑“约定位置”情况,即在初始化时增加一个额外的空间使得rear+1
与front
相等表示队列满。获取队列长度:
(rear - front + maxSize) % maxSize
,确保无论rear
位于front
之前还是之后都能得到正确的结果。- //构造队列
- class CircleArrayQueue {
- private int maxSize; //表示数组最大容量
- //队列头 指向队列的第一个元素,也就是arr[front] front初始值=0
- private int front;
- //队列尾 指向队列最后一个元素的最后一个位置,因此空出一个空间作为约定 rear初始值=0
- private int rear;
- private int[] arr; //该数组用于存放数据,模拟队列
- // 队列构造
- public CircleArrayQueue(int arrMaxSize) {
- arr = new int[arrMaxSize];
- maxSize = arrMaxSize;
- }
- }
- // 判断队列是否满
- public boolean isFull() {
- return (rear + 1) % maxSize == front;
- }
-
- // 判断队列是否为空
- public boolean isNull() {
- return front == rear;
- }
- // 数据入队列
- public void addQueue(int n) {
-
- if (isFull()) {
- System.out.println("队列已经满了,无法添加数据!");
- return;
- }
- arr[rear] = n;
- rear = (rear + 1) % maxSize;
- }
- // 数据出队列
- public int getQueue() {
- if (isNull()) {
- System.out.println("队列是空的,无法获取数据!");
- throw new RuntimeException("队列是空的,无法获取数据!");
- }
- int value = arr[front];
- front = (front + 1) % maxSize;
- return value;
- }
- // 求出当前队列有效个数
- public int size() {
- return (rear + maxSize - front) % maxSize;
- }
-
- // 显示队列头部数据
- public int headQueue() {
- if (isNull()) {
- System.out.println("队列是空的,无法获取数据!");
- throw new RuntimeException("队列是空的,无法获取数据!");
- }
- return arr[front];
- }
-
- //展示队列
- public void showQueue() {
- if (isNull()) {
- System.out.println("队列是空的,无法遍历!");
- return;
- }
- for (int i = front; i < front + size(); i++) {
- System.out.printf("arr[%d]=%d\n", i % maxSize, arr[i % maxSize]);
- }
- }
队列作为经典的数据结构,在诸多领域发挥着不可或缺的作用,其简洁高效的特性使其成为了软件设计与开发过程中的得力工具。理解队列的工作原理并熟练运用,对于提升程序性能和解决复杂问题具有重要意义。
以上展示的是队列介绍,实现原理及相关重要代码的展示。