队列是什么?

队列是一种特殊的线性表,特殊之处在于它只允许在表的前端进行删除操作,而在表的后端进行插入操作。

和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。

——来自百度百科

队列,简单来说,就是数据排队(废话)。

打个比方,在超市买东西,假设我们是收银员,顾客在排队,每个人来了之后都要排在队尾,而离开的人总是排在队首的人,

这就是一个队列,每个顾客都是一个元素,每个元素都在队列的最后进入,从队列头出去。

队列有什么作用?

我可以十分不负责任的说,队列这个东西本身没什么卵用(我自己感觉),但是!!!

队列和一些重要的算法息息相关,比如广搜,而广搜又和图论和二叉树扯上关系,所以队列十分重要。

(这里BB两句广搜)

广搜算法的大概实现方法是,从一个点出发,把从这个点出发的所有可能算出,让他们进入队列,然后一个个出队列,算可能,存结果……

广搜对于寻找最短路相对于深搜具有巨大的优势,因为广搜一旦搜索出了最短路,立刻就会停止搜索,这样节省了大量时间。而深搜需要把整个图都搜完,才能给出结果。

广搜我之后也会写博客(前提是我能学会)

队列代码怎么写?

在c++一本通里,编者的代码都是手写队列,用数组和指针。当然我也推荐这么写(因为运行快),但是!!!这样写非常的费时间!

那么今天的重头戏来了,既然c++给我们提供了专用队列函数,为什么不用呢?

queue!

queue是一个c++给我们提供的队列,并且配套了一整套函数,用起来非常的香!!!

#include<queue>

声明格式

queue<int>q;(<>中间是任何你想要的数据类型,最后是你的队列名)

这个头文件里,主要有以下函数

q.push() 将一个元素入队

q.pop() 将一个元素弹出队列(你可以认为是删除)

q.front() 访问队列头

q.back() 访问队列尾

q.empty() 如果队列为空,返回true

q.size() 返回队列的元素个数

例题!!!

由于纯纯的队列题,一本通题库里几乎没有,所以简单的上两个题,就水完这篇博客了(逃

ybt1332

【题目描述】

假设在周末舞会上,男士们和女士们进入舞厅时,各自排成一队。跳舞开始时,依次从男队和女队的队头上各出一人配成舞伴。

规定每个舞曲能有一对跳舞者。若两队初始人数不相同,则较长的那一队中未配对者等待下一轮舞曲。现要求写一个程序,模拟上述舞伴配对问题。

【输入】

第一行两队的人数;

第二行舞曲的数目。

【输出】

配对情况。

经典的队列题!

我们假设男、女都是一个队列,先让他们站好队,然后每次输出队首的元素,再把这个队首的元素入队,最后把队首元素弹出就OK了!

上代码!

#include<iostream>
#include<queue>
using namespace std;
int main()
{
queue<int>q;//声明队列
queue<int>p;
int man,wom,n;
cin>>man>>wom>>n;
for (int i=;i<=man;i++)
{
q.push(i);//男士入队
}
for (int i=;i<=wom;i++)
{
p.push(i);//女士入队
}
for (int i=;i<=n;i++)
{
cout<<q.front()<<" "<<p.front()<<endl;//访问队首元素并输出,即为配对成功
q.push(q.front());//把队首元素入队
p.push(p.front());
q.pop();//弹出队首元素
p.pop();
}
return ;
}

怎么样,是不是很简单???

那么我们看白皮书上给的代码!

#include<cstdio>
#include<iostream>
using namespace std;
int a[],b[],k1=,k,i,f1=,r1,f2=,r2;//k1是计数器
int main()
{
int m,n;
cin>>m>>n;
for (i=;i<=m;i++)
{
a[i]=i;//入队
}
for (i=;i<=n;i++)
{
b[i]=i;
}
cin>>k;
r1=m;//r1/r2负责在队尾插入元素
r2=n;
while(k1<=k)
{
printf("%d %d\n",a[f1],b[f2]);
r1++;a[r1]=a[f1];f1++;//f1/f2是指针,指向第k1轮输出的元素
//第一次a[m+1]=a[1]=1,第二次a[m+2]=a[2]=2,如此循环
r2++;b[r2]=b[f2];f2++;
//第一次b[n+1]=b[1]=1,第二次b[m+2]=b[2]=2,如此循环
k1++;
}
return ;
}

相比之下,手写队列的变量显然较多(因为要有指针,入队操作)

我们用queue函数库里的函数就可以让我们的代码变得清爽啦!!!

是不是很香呢???

像我一样的新手赶紧用起来吧!!!(逃)

最后,水一下博文长度,上一个疑似队列的题(个人感觉)

ybt 1334

题目描述】

有nn个人依次围成一圈,从第1个人开始报数,数到第mmm个人出列,然后从出列的下一个人开始报数,数到第mm个人又出列,…,

如此反复到所有的人全部出列为止。设nn个人的编号分别为1,2,3,4,5……1,2,…,

请你打印出列的顺序。

【输入】

n

n和mm

【输出】

出列的顺序。

上代码

//1334第二队列
#include<iostream>
using namespace std;
int duilie[];
int main()
{
int n,num,kkk=,zhizhen=;
cin>>n>>num;
for (int i=;i<=n;i++)
{
duilie[i]=i;
}
if (num==)
{
for (int i=;i<=n;i++)
{
cout<<duilie[i]<<" ";
}
return ;
}
while ()
{
kkk++;
zhizhen++;
if (zhizhen==n+)
{
zhizhen=;
}
if (kkk==num)
{
cout<<duilie[zhizhen]<<" ";
for (int j=zhizhen;j<n;j++)
{
duilie[j]=duilie[j+];
}
if (zhizhen==n)
{
zhizhen=;
}
kkk=;
n--;
}
if(n==)
{
break;
}
}
return ;
}

注解,,,额,实在是困了,懒得写了,相信各位大佬都能看懂吧……(逃)

12点了,晚安,睡觉去了。

STL函数库的应用第一弹——数据结构(队列)的更多相关文章

  1. STL函数库的应用第二弹——快排sort函数与结构体关键字排序

    时隔20多天,本蒟蒻终于记起了他的博客园密码!!! 废话不多说,今天主题:STL快排函数sort()与结构体关键字排序 Part 1:引入和导语 首先,我们需要知道,algorithm库里有一些奇怪的 ...

  2. 分治算法(二分查找)、STL函数库的应用第五弹——二分函数

    分治算法:二分查找!昨天刚说不写算法了,但是突然想起来没写过分治算法的博客,所以强迫症的我…… STL函数库第五弹——二分函数lower_bound().upper_bound().binary_se ...

  3. STL函数库的应用第四弹——全排列(+浅谈骗分策略)

    因为基础算法快学完了,图论又太难(我太蒻了),想慢慢学. 所以暂时不写关于算法的博客了,但又因为更新博客的需要,会多写写关于STL的博客. (毕竟STL函数库还是很香的(手动滑稽)) 请出今天主角:S ...

  4. ----堆栈 STL 函数库 ----有待补充

    #include<cstdio> #include<string> #include<vector> #include<iostream> using ...

  5. STL函数库的应用第三弹——数据结构(栈)

    Part 1:栈是什么 栈(stack)又名堆栈,它是一种运算受限的线性表.限定仅在表尾进行插入和删除操作的线性表. 这一端被称为栈顶,相对地,把另一端称为栈底. 向一个栈插入新元素又称作进栈.入栈或 ...

  6. Blazor 组件库 Blazui 开发第一弹【安装入门】

    标签: Blazor Blazui文档 Blazui 传送门 Blazor 组件库 Blazui 开发第一弹[安装入门]https://www.cnblogs.com/wzxinchen/p/1209 ...

  7. 菜鸟Python学习笔记第一天:关于一些函数库的使用

    2017年1月3日 星期二 大一学习一门新的计算机语言真的很难,有时候连函数拼写出错查错都能查半天,没办法,谁让我英语太渣. 关于计算机语言的学习我想还是从C语言学习开始为好,Python有很多语言的 ...

  8. C++STL模板库适配器之queue队列

    目录 适配器之队列 一丶队列简介 二丶队列(queue)代码操作 1.常用方法 适配器之队列 一丶队列简介 队列是先进先出的数据结构. 在STL中使用 queue表示. 底层使用的是序列容器deque ...

  9. STL标准库-容器-deque

    技术在于交流.沟通,本文为博主原创文章转载请注明出处并保持作品的完整性. deque双向开口可进可出的容器 我们知道连续内存的容器不能随意扩充,因为这样容易扩充别人那去 deque却可以,它创造了内存 ...

随机推荐

  1. go test 测试用例那些事(二) mock

    关于go的单元测试,之前有写过一篇帖子go test测试用例那些事,但是没有说go官方的库mock,很有必要单独说一下这个库,和他的实现原理. mock主要的功能是对接口的模拟,需要在写代码的时候定义 ...

  2. springMVC -- 对接UEditor(富文本编辑器)

    工作中需要用到UEditor编辑文本,在与springMVC进行整合时,出现了一些问题,结果导致,在进行图片上传时出现如下提示: 上网查询了很多相关资料,此处简要记录下,防止以后遇到类似问题. 一种方 ...

  3. 还不懂mysql的undo log和mvcc?算我输!

    最近一直没啥时间写点东西,坚持分享真的好难,也不知道该分享点啥,正好有人要问我这些东西,所以腾出点时间,写一下这个主题.同样本篇可以给读者承诺,听不懂或者没收获算我输,哈哈! 众所周知,mysql中读 ...

  4. python---filecmp 实现文件,目录,遍历子目录的差异对比功能。

    python---filecmp ilecmp可以实现文件,目录,遍历子目录的差异对比功能. 自带filecmp模块,无需安装. 常用方法说明 filecmp提供3个操作方法,cmp(单文件对比),c ...

  5. 常用的 Systemctl 命令

    常用的 Systemctl 命令 设置开机启动 systemctl enable apache.service 立即启动一个服务 $ sudo systemctl start apache.servi ...

  6. 修改alpine Linux的Docker容器的时区

    适用对象 使用 Alpine Linux 发行版的 Docker 镜像容器. 仅仅适用于没有安装uclibc的系统. 修改步骤 进入容器命令行 # docker exec -it container_ ...

  7. The JOIN operation -- SQLZOO

    The JOIN operation 注意:where语句中对表示条件的需要用单引号, 下面的译文使用的是有道翻译如有不正确,请直接投诉有道 01.Modify it to show the matc ...

  8. python基础day5_元组

    元祖---只读列表,可循环查询,可切片 儿子不能改,孙子可能可以改.增加(主要看要操作的是属于列表还是元组) tu = (1,2,3,'alex',[2,3,4,'taibai'],'egon') t ...

  9. C/C++编程笔记:C语言基础printf()和scanf()函数,大学入门知识

    在解释这两个函数之前,为了方便大家更容易理解,我们先来讲讲下面的这幅图. ​ 这个图中的例子其实很简单,我们就是把题目通过输入设备(例如键盘鼠标)传输到计算机中,然后让计算机进行运算得出结果,再然后把 ...

  10. BSOJ 5445 -- 【2018雅礼】树 prufer序列 dp

    BSOJ在哪我也不知道 没有链接. 对于有标号无根树的统计和有度数限制 一般采用prufer序列. 根据prufer序列 容易知道 某个点的出现次数+1为当前点的度数. 对于这道题 考虑设f[i][j ...