关于我们

质量为本、客户为根、勇于拼搏、务实创新

< 返回新闻公共列表

【算法入门】设计模板队列|循环队列(上)

发布时间:2023-06-28 09:00:13
前言 本专栏收录的均为牛客网的算法题目,内含链表、双指针、递归、动态规划、基本数据结构等算法思想的具体运用。牛客网不仅有大量的经典算法题目,也有大厂的面试真题,面试、找工作完全可以来这里找机会。此外,网站内的编码主题多样化,调试功能可运用性强,可谓是非常注重用户体验。这么好的免费刷题网站还不快入手吗,快去注册开启算法百炼成神之路吧! 1、AB7 【模板】队列 题目链接:设计队列 考查队列的基本特点、类的设计,适合新手入门与老手巩固,不妨挑战一下 题目描述: 1.1、解题思路 解决此题需要明白队列的属性及含义: 初始状态下的队列示意图: 有元素入队后的队列示意图: 队首指针front和队尾指针rear是队列操作的核心 数组buffer可以看作是队列所占的空间 初始状态队首指针和队尾指针都在下标0的位置 随着元素入队,rear向后移动,front不变,只有出队操作可以让其向后移动 1.2、代码实现及解析 本题源码: #include 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操作的基础上让队首指针自增,相当于队首出队

/template/Home/leiyu/PC/Static