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

简介: 【算法入门】设计模板队列|循环队列

🔥前言

本专栏收录的均为牛客网的算法题目,内含链表、双指针、递归、动态规划、基本数据结构等算法思想的具体运用。牛客网不仅有大量的经典算法题目,也有大厂的面试真题,面试、找工作完全可以来这里找机会。此外,网站内的编码主题多样化,调试功能可运用性强,可谓是非常注重用户体验。这么好的免费刷题网站还不快入手吗,快去注册开启算法百炼成神之路吧!


1、AB7 【模板】队列

题目链接:设计队列


考查队列的基本特点、类的设计,适合新手入门与老手巩固,不妨挑战一下


题目描述:


d734e55f4e454773b26b73b874467708.png


1.1、解题思路

解决此题需要明白队列的属性及含义:


初始状态下的队列示意图:

637bdace482246cda4eb3629c3952621.png

有元素入队后的队列示意图:

11dbdc6e1b9a48658e14a0304f58838f.png

队首指针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操作的基础上让队首指针自增,相当于队首出队


目录
相关文章
|
7天前
|
机器学习/深度学习 人工智能 算法
深度学习入门:理解神经网络与反向传播算法
【9月更文挑战第20天】本文将深入浅出地介绍深度学习中的基石—神经网络,以及背后的魔法—反向传播算法。我们将通过直观的例子和简单的数学公式,带你领略这一技术的魅力。无论你是编程新手,还是有一定基础的开发者,这篇文章都将为你打开深度学习的大门,让你对神经网络的工作原理有一个清晰的认识。
|
1月前
|
算法
【算法】前缀和——二维前缀和模板题
【算法】前缀和——二维前缀和模板题
|
2天前
|
存储 算法 前端开发
深入理解操作系统:进程调度与优先级队列算法
【9月更文挑战第25天】在操作系统的复杂世界中,进程调度是维持系统稳定运行的核心机制之一。本文将深入探讨进程调度的基本概念,分析不同的进程调度算法,并着重介绍优先级队列算法的原理和实现。通过简洁明了的语言,我们将一起探索如何优化进程调度,提高操作系统的效率和响应速度。无论你是计算机科学的初学者还是希望深化理解的专业人士,这篇文章都将为你提供有价值的见解。
|
1月前
|
缓存 算法 Java
刷算法,你应该知道的队列经典应用
文章介绍了队列的基本特性和经典应用,包括如何用队列实现栈、使用优先级队列解决Top K问题,并通过LeetCode题目示例展示了队列在算法实现中的应用。
刷算法,你应该知道的队列经典应用
|
1月前
|
机器学习/深度学习 人工智能 算法
AI入门必读:Java实现常见AI算法及实际应用,有两下子!
本文全面介绍了人工智能(AI)的基础知识、操作教程、算法实现及其在实际项目中的应用。首先,从AI的概念出发,解释了AI如何使机器具备学习、思考、决策和交流的能力,并列举了日常生活中的常见应用场景,如手机助手、推荐系统、自动驾驶等。接着,详细介绍了AI在提高效率、增强用户体验、促进技术创新和解决复杂问题等方面的显著作用,同时展望了AI的未来发展趋势,包括自我学习能力的提升、人机协作的增强、伦理法规的完善以及行业垂直化应用的拓展等...
156 3
AI入门必读:Java实现常见AI算法及实际应用,有两下子!
|
2月前
|
机器学习/深度学习 数据采集 人工智能
机器学习算法入门与实践
【7月更文挑战第22天】机器学习算法入门与实践是一个既充满挑战又极具吸引力的过程。通过掌握基础知识、理解常见算法、注重数据预处理和模型选择、持续学习新技术和参与实践项目,你可以逐步提高自己的机器学习技能,并在实际应用中取得优异的成绩。记住,机器学习是一个不断迭代和改进的过程,保持好奇心和耐心,你将在这个领域走得更远。
|
1月前
|
算法
【数据结构与算法】优先级队列
【数据结构与算法】优先级队列
12 0
|
1月前
|
算法
【数据结构与算法】循环队列
【数据结构与算法】循环队列
16 0
|
1月前
|
存储 算法
【数据结构与算法】队列(顺序存储)
【数据结构与算法】队列(顺序存储)
13 0
|
1月前
|
存储 算法
【C算法】编程初学者入门训练140道(1~20)
【C算法】编程初学者入门训练140道(1~20)