🔥前言
本专栏收录的均为牛客网的算法题目,内含链表、双指针、递归、动态规划、基本数据结构等算法思想的具体运用。牛客网不仅有大量的经典算法题目,也有大厂的面试真题,面试、找工作完全可以来这里找机会。此外,网站内的编码主题多样化,调试功能可运用性强,可谓是非常注重用户体验。这么好的免费刷题网站还不快入手吗,快去注册开启算法百炼成神之路吧!
1、AB7 【模板】队列
题目链接:设计队列
考查队列的基本特点、类的设计,适合新手入门与老手巩固,不妨挑战一下
题目描述:
1.1、解题思路
解决此题需要明白队列的属性及含义:
初始状态下的队列示意图:
有元素入队后的队列示意图:
队首指针front和队尾指针rear是队列操作的核心
数组buffer可以看作是队列所占的空间
初始状态队首指针和队尾指针都在下标0的位置
随着元素入队,rear向后移动,front不变,只有出队操作可以让其向后移动
1.2、代码实现及解析
本题源码:
#include <iostream> using namespace std; class queue { int tail = 0; int head = 0; int buffer[100001]; public: void push(int x) { buffer[tail++] = x; } void pop() { if (tail == head) cout << "error" << endl; else cout << buffer[head++] << endl; } void front() { if (tail == head) cout << "error" << endl; else cout << buffer[head] << endl; } }; int main() { queue q; int n; cin >> n; for (int i = 0; i < n; i++) { string op; cin >> op; if (op == "push") { int x; cin >> x; q.push(x); } else if (op == "pop") q.pop(); else q.front(); } return 0; }
重要注释:
初始化队首和队尾指针为0,根据操作次数n来确定队列大小为100001
push操作会让队尾指针rear向后移动,因此使用了自增的形式
front操作需要先判断队列是否为空,若为空就打印error,反之打印队首元素buffer[front]
pop操作在front操作的基础上让队首指针自增,相当于队首出队