首页 > 其他分享 >数组模拟队列

数组模拟队列

时间:2024-03-30 21:00:24浏览次数:137  
标签:队列 tt hh 模拟 数组 push query empty

数组模拟队列

通常用一个数组模拟一个队列,用两个变量标记队列的首尾。

1
int q[SIZE], hh = 1, tt; //hh表示队头,tt表示队尾

队列操作对应的代码如下:

现在要对队列进行 M 个操作,其中的每个操作 3 和操作 4 都要输出相应的结果。

输入格式

第一行包含整数 M,表示操作次数。

接下来 M行,每行包含一个操作命令,操作命令为 push xpopemptyquery 中的一种。

输出格式

对于每个 empty 和 query 操作都要输出一个查询结果,每个结果占一行。

其中,empty 操作的查询结果为 YES 或 NOquery 操作的查询结果为一个整数,表示队头元素的值。

数据范围

1≤M≤1000001
1≤x≤1091,
所有操作保证合法。

  • 插入元素:q[++tt] = x;
  • 删除元素:hh++;
  • 访问队首:q[hh]
  • 访问队尾:q[tt]
  • 清空队列:hh = 1; tt = 0;
  • 实现一个队列,队列初始为空,支持四种操作:
  • push x – 向队尾插入一个数 x;
  • pop – 从队头弹出一个数;
  • empty – 判断队列是否为空;
  • query – 查询队头元素。
输入样例:
10
push 6
empty
query
pop
empty
push 3
push 4
pop
query
push 6
输出样例: 
NO
6
YES
4
#include<iostream>
using namespace std;
const int N=100010;
int q[N];
int hh,tt=-1;
int m;
string s;
void push(int u)
{
    q[++tt]=u; //在队尾插入元素
}
void pop()
{
    hh++; //弹出队头,队头指针后移
}
void empty()
{
    if(hh>tt) //tt>=hh 队尾大于等于队头,表示队列不为空
    {
        cout<<"YES"<<endl;
    }
    else
    {
        cout<<"NO"<<endl;
    }
}
void query()
{
    cout<<q[hh]<<endl;
}
int main()
{
    cin>>m;
    while(m--)
    {
        int u;
        cin>>s;
        if(s=="push")
        {
            cin>>u;
            push(u);
        }
        else if(s=="pop")
        {
            pop();
        }
        else if(s=="empty")
        {
            empty();
        }
        else
        {
            query();
        }
    }
    return 0;
}

标签:队列,tt,hh,模拟,数组,push,query,empty
From: https://blog.csdn.net/2303_80209427/article/details/137182749

相关文章

  • C108 整体二分+树状数组(区修+区查)P3332 [ZJOI2013] K大数查询
    视频链接:C108整体二分+树状数组(区修+区查)P3332[ZJOI2013]K大数查询_哔哩哔哩_bilibili   参考:C82树状数组区修+区查P3372线段树1-董晓-博客园(cnblogs.com)LuoguP3332[ZJOI2013]K大数查询//整体二分+树状数组(区修+区查)O(n*logn*logn)#include<iost......
  • linux---简单模拟实现shell(内置命令的解析)
    准备工作的知识我们要模拟实现一个命令行解释器的话,需要运用进程替换的知识。我们用我,如花,王婆,实习生的例子来说:这里的“我”就是程序员,如花是操作系统,王婆是命令行解释器bash,实习生则是子进程,我们用户想要和操作系统交流的话,就需要通过bash,而命令行解释器(王婆)不会自己去执行......
  • 椋鸟数据结构笔记#4:栈与队列
    萌新的学习笔记,写错了恳请斧正。目录栈栈的实现队列队列的实现循环队列栈栈是一种特殊的线性表,是一种遵循后进先出(LIFO,LastInFirstOut)原则的数据结构。想象一下一摞盘子,你最后放上去的盘子会是你第一个拿掉的;同样地,在栈中,最后存入的数据会是第一个被取出来的。......
  • 【Java多线程】7——阻塞队列&线程池
    7线程池⭐⭐⭐⭐⭐⭐Github主页......
  • JS数组与对象
    数组什么是数组:数组是可以用来存储一组数据,数组中的数据可以存储任意的数据类型如何定义数组:用[]定义数组,在[]中,多个元素/值中间用逗号分隔数组的格式:变量名=[元素或值]获取数组中的值:变量名[下标]数组元素是一对:下标和值;每一个元素都有相对应的下标,下标从0开始,依次递增......
  • (67)动态口令 (68)解码异或后的数组
    文章目录每日一言题目(67)动态口令解题思路代码题目(68)解码异或后的数组解题思路代码结语每日一言我们并不清楚,人类为何降生到这个世界;但我们可以试着去发现,这是一个什么样的世界。题目(67)动态口令题目链接:动态口令某公司门禁密码使用动态口令技术。初始密码......
  • yii2-队列使用
    yii2-队列使用安装yii2-queuecomposerrequireyiisoft/yii2-queue安装yii2-rediscomposerrequireyiisoft/yii2-redis控制台配置文件console.php和web.php'redis'=>['class'=>'yii\redis\Connection',&......
  • sort函数对vector一维或者二维数组排序
    目录sort对一维数组排序1、sort对一位数组升序排序2、sort对一维数组降序排序sort对二维数组排序1、sort默认对横坐标进行升序排序,如下:2、使用自定义排序对纵坐标进行升序排序:额外知识:对横坐标进行降序排列,当横坐标相同时,对纵坐标进行升序排序sort对一维数组排序......
  • 【RabbitMQ】【消息队列】基础知识整理
    在什么场景下使用RabbitMQ?开源消息队列中间件,它提供了可靠的消息传递机制,可以在分布式中进行异步通信。常见场景:异步任务处理:处理耗时任务时,可使用MQ来实现异步任务处理。     常见场景举例:新用户注册后,需要发注册邮件和注册短信,传统的做法有两种1.串行的方......
  • 24、C++的一维数组概念
    数组是一组数据类型相同的变量,可以存放一组数据。1、创建数组声明数组的语法:数据类型数组名[数组长度];注意:数组长度必须是整数,可以是常量,也可以是变量和表达式。C90规定必须用常量表达式指明数组的大小,C99允许使用整型非常量表达式。经测试,在VS中可以用用整型非常量表达......