牛客题解 | 【模板】循环队列

news/2025/2/21 17:43:01/文章来源:https://www.cnblogs.com/wc529065/p/18729686

题目

题目链接

解题思路

  1. 使用一个固定大小的数组来存储队列元素。
  2. 维护两个指针 headtail,分别指向队首和队尾。
  3. push 操作:将元素加入队尾,更新 tail 指针。
  4. pop 操作:输出并移除队首元素,更新 head 指针。
  5. front 操作:输出队首元素。
  6. 检查队列是否满或空,以决定是否输出 "full" 或 "empty"。

代码

#include <iostream>
#include <vector>
#include <string>
using namespace std;class CircularQueue {
private:vector<int> data;int head, tail, size, capacity;public:CircularQueue(int n) : data(n), head(0), tail(0), size(0), capacity(n) {}void push(int x) {if (size == capacity) {cout << "full\n";} else {data[tail] = x;tail = (tail + 1) % capacity;size++;}}void pop() {if (size == 0) {cout << "empty\n";} else {cout << data[head] << "\n";head = (head + 1) % capacity;size--;}}void front() {if (size == 0) {cout << "empty\n";} else {cout << data[head] << "\n";}}
};int main() {int n, q;cin >> n >> q;CircularQueue cq(n);string op;while (q--) {cin >> op;if (op == "push") {int x;cin >> x;cq.push(x);} else if (op == "pop") {cq.pop();} else if (op == "front") {cq.front();}}return 0;
}
import java.util.Scanner;class CircularQueue {private int[] data;private int head, tail, size, capacity;public CircularQueue(int n) {data = new int[n];head = 0;tail = 0;size = 0;capacity = n;}public void push(int x) {if (size == capacity) {System.out.println("full");} else {data[tail] = x;tail = (tail + 1) % capacity;size++;}}public void pop() {if (size == 0) {System.out.println("empty");} else {System.out.println(data[head]);head = (head + 1) % capacity;size--;}}public void front() {if (size == 0) {System.out.println("empty");} else {System.out.println(data[head]);}}
}public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();int q = sc.nextInt();CircularQueue cq = new CircularQueue(n);for (int i = 0; i < q; i++) {String op = sc.next();if (op.equals("push")) {int x = sc.nextInt();cq.push(x);} else if (op.equals("pop")) {cq.pop();} else if (op.equals("front")) {cq.front();}}}
}
class CircularQueue:def __init__(self, n):self.data = [0] * nself.head = 0self.tail = 0self.size = 0self.capacity = ndef push(self, x):if self.size == self.capacity:print("full")else:self.data[self.tail] = xself.tail = (self.tail + 1) % self.capacityself.size += 1def pop(self):if self.size == 0:print("empty")else:print(self.data[self.head])self.head = (self.head + 1) % self.capacityself.size -= 1def front(self):if self.size == 0:print("empty")else:print(self.data[self.head])# 读取输入
n, q = map(int, input().split())
cq = CircularQueue(n)for _ in range(q):op = input().strip()if op.startswith("push"):_, x = op.split()cq.push(int(x))elif op == "pop":cq.pop()elif op == "front":cq.front()

算法及复杂度分析

  • 算法:循环队列的基本操作
  • 时间复杂度:\(\mathcal{O}(1)\) 对于每个操作。
  • 空间复杂度:\(\mathcal{O}(n)\),其中 \(n\) 是队列的容量。

这个问题考察了循环队列的实现,重点在于正确维护 headtail 指针的移动和边界条件的处理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/887686.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

BUUCTF-Web方向16-20wp

[极客大挑战 2019]PHP 由内容提示应该存在源码备份,常见的如下,一个个尝试 后缀:tar tar.gz zip rar 名字:www web website backup back wwwroot temp访问www.zip,下载下来解压查看index.phpflag.phpclass.php <?php include flag.php;error_reporting(0);class Name{…

【Nginx开发】如何使用Nginx搭建旁路服务器获取客户端IP

一、前言 在实际业务开发过程中,很多时候有记录客户端真实IP的需求,但是从客户端发送的请求往往会经过很多代理服务器,导致后端服务获取的IP为代理以后的IP,不具有业务含义。为了解决这个问题,可以搭建一个旁路服务器,前端在发起请求的时候需要先请求旁路服务器,获取该客…

PyBy2:若依计划任务自动化上线+内存马自动生成v2.0

免责声明 本公众号文章以技术分享学习为目的。由于传播、利用本公众号发布文章而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号及作者不为此承担任何责任。一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢!前言 攻防中,遇到一个ruo…

当任务失败时,顶级调度系统如何实现分钟级数据补偿?

一、补数机制的定义与挑战 补数(Backfill) 指在数据管道因系统故障、数据延迟或逻辑错误导致历史任务缺失时,重新调度并执行指定时间范围内的工作流以修复数据缺口。在大数据场景中,补数机制需解决三大核心挑战:复杂依赖链重建:需精准识别历史时间段内任务上下游关系,避…

绿色建筑设计原则与案例分析 - 如何将环保理念融入建筑设计中

在这个追求可持续发展的时代,绿色建筑不仅是一种趋势,更是对地球未来的责任和承诺。它旨在通过最少的环境影响,提供健康、高效、舒适的生活与工作空间。本文将深入探讨绿色建筑设计的核心原则,并通过具体案例分析,揭示如何将环保理念巧妙融入建筑设计之中,为读者呈现一场…

Windows 程序隐藏启动黑窗口总结

免责声明: 该公众号分享的安全工具和项目均来源于网络,仅供安全研究与学习之用,如用于其他用途,由使用者承担全部法律及连带责任,与工具作者和本公众号无关。以下文章来源于锦鲤安全 ,作者四五qq 前言 Windows 控制台程序在启动时会出现一个黑(dos)窗口,一般我们想要隐…

docker部署.net core3.1

1.安装dockerapt install docker.io2.拉取.net core依赖镜像docker pull mcr.microsoft.com/dotnet/core/aspnet:latest3.创建.net core3.1项目 选择docker支持,会生成dockerFile配置文件如图:4.编写dockerfile文件,经删减后为:FROM mcr.microsoft.com/dotnet/core/aspnet:3…

DeepSeek 满血版在 VScode 和 IDEA 中怎么用?手把手教程来了

DeepSeek 满血版在 IDEA 中怎么用?手把手教程来了作者:沉默王二近期有几个热点事件,不知道大家关注到没有?第一个标志事件,一向挑剔的苹果宣布和阿里合作,一起为国行版 iPhone 提供 AI 技术服务。 第二个标志事件,DeepSeek R1 蒸馏了 6 个模型开源给社区,其中有 4 个来…

redission-delay-queue使用及原理

1.引入jar包<dependency><groupId>xxxx.delay</groupId><artifactId>redisson-delayed-queue</artifactId><version>1.0.0-SNAPSHOT</version> </dependency>2.客户端代码开发2.1:新增实现BaseTask的bean 参数由业务自行决定…

利用网页爬虫从专业产品论坛提取评论的完整指南

了解如何通过网页爬虫从专业产品论坛提取评论,以获取可操作的洞见、改进策略,并节省时间。利用网页爬虫从专业产品论坛提取评论已经成为企业的游戏规则改变者。它使您能够从多个平台收集客户反馈(https://dataforest.ai/blog/top-web-scraping-use-cases),实时监控情绪,并自…

树的重心(树形dp)

我最开始将n减了1,应为边长有n-1条,但是这会导致计算时出现错误,因为其他地方会用到n#include<iostream> #include<vector> using namespace std; const int N=1e5+5; vector<int>v[N]; int f[N]; int vis[N]; int ans=1e5; int n; int dfs(int x){vis[x]…

仓库管理到底该怎么管?记住这五常六准原则!

仓库管理到底该怎么管? 要是你觉得仓库只是个“堆货的地方”,那可就大错特错了! 想象一下,货物乱成一团,找东西时费劲,出库慢,结果错发了货,那可真的是“大麻烦”啊。 客户打电话来投诉,老板又来催货,这种情况谁遇到谁头疼。 但其实,仓库管理不复杂,只要掌握了一些…