一、队列核心概念队列是先进先出 FIFO线性结构队尾只允许入队队头只允许出队先进入的元素先出去后进入后出去生活类比排队买票、食堂打饭、消息排队处理。二、队列基础五大操作push队尾入队pop队头出队front获取队头元素back获取队尾元素empty /size判空、获取元素个数三、C STL queue 快速使用头文件#include queue using namespace std;基础示例queueint q; q.push(10); q.push(20); q.push(30); cout 队头 q.front() endl; cout 队尾 q.back() endl; q.pop(); // 弹出队头 cout 出队后队头 q.front() endl; if(q.empty()) cout 队列为空;四、普通顺序队列的缺陷普通数组队列出队后前面空间无法复用造成假溢出解决方式循环队列头尾指针环形绕圈重复利用空间五、手写循环队列面试必背核心思路数组固定容量front 指向队头rear 指向队尾下一个位置留一个空位区分「满」和「空」完整实现代码#include iostream using namespace std; const int MAXN 5; struct MyCirQueue { int arr[MAXN]; int front; // 队头 int rear; // 队尾下一位 // 初始化 MyCirQueue() { front 0; rear 0; } // 判空 bool empty() { return front rear; } // 判满 bool full() { return (rear 1) % MAXN front; } // 入队 bool push(int val) { if(full()) return false; arr[rear] val; rear (rear 1) % MAXN; return true; } // 出队 bool pop() { if(empty()) return false; front (front 1) % MAXN; return true; } // 取队头 int getFront() { return arr[front]; } };六、队列经典应用场景BFS 广度优先搜索二叉树层序、图最短路径消息队列、任务排队打印机任务调度滑动窗口、单调队列后续专项精讲优先队列堆底层衍生七、栈 vs 队列 一句话区分栈后进先出叠盘子队列先进先出排队八、新手易错点混淆栈和队列进出规则循环队列不会用%取模环形移动不预留一个空位无法区分队空和队满队头队尾指针移动方向搞反九、今日总结队列特性先进先出 FIFO熟练掌握 STL queue 日常刷题用法手写循环队列是面试高频考点记住取模环形逻辑队列是 BFS、层序遍历、滑动窗口的基础
队列核心:FIFO原理与实战应用
一、队列核心概念队列是先进先出 FIFO线性结构队尾只允许入队队头只允许出队先进入的元素先出去后进入后出去生活类比排队买票、食堂打饭、消息排队处理。二、队列基础五大操作push队尾入队pop队头出队front获取队头元素back获取队尾元素empty /size判空、获取元素个数三、C STL queue 快速使用头文件#include queue using namespace std;基础示例queueint q; q.push(10); q.push(20); q.push(30); cout 队头 q.front() endl; cout 队尾 q.back() endl; q.pop(); // 弹出队头 cout 出队后队头 q.front() endl; if(q.empty()) cout 队列为空;四、普通顺序队列的缺陷普通数组队列出队后前面空间无法复用造成假溢出解决方式循环队列头尾指针环形绕圈重复利用空间五、手写循环队列面试必背核心思路数组固定容量front 指向队头rear 指向队尾下一个位置留一个空位区分「满」和「空」完整实现代码#include iostream using namespace std; const int MAXN 5; struct MyCirQueue { int arr[MAXN]; int front; // 队头 int rear; // 队尾下一位 // 初始化 MyCirQueue() { front 0; rear 0; } // 判空 bool empty() { return front rear; } // 判满 bool full() { return (rear 1) % MAXN front; } // 入队 bool push(int val) { if(full()) return false; arr[rear] val; rear (rear 1) % MAXN; return true; } // 出队 bool pop() { if(empty()) return false; front (front 1) % MAXN; return true; } // 取队头 int getFront() { return arr[front]; } };六、队列经典应用场景BFS 广度优先搜索二叉树层序、图最短路径消息队列、任务排队打印机任务调度滑动窗口、单调队列后续专项精讲优先队列堆底层衍生七、栈 vs 队列 一句话区分栈后进先出叠盘子队列先进先出排队八、新手易错点混淆栈和队列进出规则循环队列不会用%取模环形移动不预留一个空位无法区分队空和队满队头队尾指针移动方向搞反九、今日总结队列特性先进先出 FIFO熟练掌握 STL queue 日常刷题用法手写循环队列是面试高频考点记住取模环形逻辑队列是 BFS、层序遍历、滑动窗口的基础