🐵指尖猴全新升级
第17课:循环队列
🔄

循环队列

数组首尾相接,空间循环利用零浪费!

📖知识引入

🌀环形结构
把数组想象成首尾相接的圆环,下标到头就绕回起点继续用
➗取模回绕
rear = (rear + 1) % N,加一后取模容量,自动绕回0号位
⚖️判满技巧
牺牲一个格子:(rear+1) % N == front 即队满,避免与队空混淆
🌍空间复用
普通数组队列出队后前部空间浪费,循环队列让格子反复可用
💡
循环队列开N个格子最多存N-1个元素,队空front==rear,队满(rear+1)%N==front

🔍循环队列核心操作

int q[5];         // 容量5,最多存4个
int front = 0, rear = 0;

// 入队:rear取模回绕
void enqueue(int x) {
    if ((rear + 1) % 5 == front) return;  // 队满
    q[rear] = x;
    rear = (rear + 1) % 5;
}

// 出队:front取模回绕
void dequeue() {
    if (front == rear) return;            // 队空
    front = (front + 1) % 5;
}

取模让下标永远在环上转圈,空间用了一圈又一圈

🎯小测验

第1题:容量为N的循环队列(牺牲一格判满)最多存多少元素?

第2题:rear = (rear + 1) % N 中取模的作用是?

第3题:循环队列队空的判断条件是?

📝本课知识点

  • ✓取模%让数组首尾成环
  • ✓队空front==rear
  • ✓牺牲一格区分空与满
第17课完成!继续探索下一课吧 🚀