Open Zakariyya opened 4 years ago
因为队列的输出、输入分别是从前后端来处理,因此需要两个变量 front 及 rear 分别记录队列前后端的下标,front会随着数据输出而改变,而rear则是随着数据输入而改变。
若尾指针rear 小于队列的最大下标 maxSize-1,则将数据存入rear所指的数组元素中,否则无法存入数据
rear == maxSize-1[队列满]
思路
//直接将数据加入 arr[rear] = n;
//将rear后移,这里必须考虑取模 rear = (rear+1)%maxSize;
### 取出数据 > 这里需要分析出 front 是指向队列的第一个元素 1. 先把front对应的值保留到一个临时变量 1. 先把front后移: **front = (front+1)% maxSize;** 1. 将临时保存的变量返回 ```java //显示队列的所有数据 public void showQueue(){ if(isEmpty()){ sout("空队列"); return; } //遍历 // 思路:从front开始遍历,遍历多少个元素 for(int i = front; i < front + size(); i++){ sout("arr[%d]=%d\n", i % maxSize, arr[i%maxSize]); } } // 求出当前队列的有效数据个数 public int size(){ return (rear + maxSize - front) % maxSize; }
因为队列的输出、输入分别是从前后端来处理,因此需要两个变量 front 及 rear 分别记录队列前后端的下标,front会随着数据输出而改变,而rear则是随着数据输入而改变。
构建队列思路
若尾指针rear 小于队列的最大下标 maxSize-1,则将数据存入rear所指的数组元素中,否则无法存入数据
rear == maxSize-1[队列满]
环形队列(取模:%)
添加数据
//直接将数据加入 arr[rear] = n;
//将rear后移,这里必须考虑取模 rear = (rear+1)%maxSize;