双向队列,顾名思义就是队列二边都可以操作的队列。 双向队列和向量很相似,但是它允许在容器头部快速插入和删除(就像在尾部一样)。双向都可以进行相应的操作。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Constructors 创建一个新双向队列
Operators 比较和赋值双向队列
assign() 设置双向队列的值
at() 返回指定的元素
back() 返回最后一个元素
begin() 返回指向第一个元素的迭代器
clear() 删除所有元素
empty() 返回真如果双向队列为空
end() 返回指向尾部的迭代器
erase() 删除一个元素
front() 返回第一个元素
get\_allocator() 返回双向队列的配置器
insert() 插入一个元素到双向队列中
max\_size() 返回双向队列能容纳的最大元素个数
pop\_back() 删除尾部的元素
pop\_front() 删除头部的元素
push\_back() 在尾部加入一个元素
push\_front() 在头部加入一个元素
rbegin() 返回指向尾部的逆向迭代器
rend() 返回指向头部的逆向迭代器
resize() 改变双向队列的大小
size() 返回双向队列中元素的个数
swap() 和另一个双向队列交换元素

看个例题

双向队列

Description

​ 想想双向链表……双向队列的定义差不多,也就是说一个队列的队尾同时也是队首;两头都可以做出队,入队的操作。 现在给你一系列的操作,请输出最后队列的状态;

命令格式:

LIN X X表示一个整数,命令代表左边进队操作;

RIN X 表示右边进队操作;

ROUT LOUT 表示出队操作;

Input

第一行包含一个整数M(M<=10000),表示有M个操作; 以下M行每行包含一条命令; 命令可能不合法,对于不合法的命令,请在输出中处理;

Output

输出的第一行包含队列进行了M次操作后的状态,从左往右输出,每两个之间用空格隔开; 以下若干行处理不合法的命令(如果存在); 对于不合法的命令,请输出一行X ERROR 其中X表示是第几条命令;

Sample Input

1
2
3
4
5
6
7
8
9
8 
LIN 5
RIN 6
LIN 3
LOUT
ROUT
ROUT
ROUT
LIN 3

Sample Output

1
2
3 
7 ERROR

AC代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include <cstdio>
#include <cstring>
#include <queue>
#include <deque>
#include <algorithm>

using namespace std;
#define MAX 10010
int main()
{
deque<int>q; //创建双向队列
while(!q.empty())//清空双向队列
q.pop_front();
int n,a,i,m[MAX]= {0};
scanf("%d",&n);
for(i=1; i<=n; i++)
{
char s[10];
scanf(" %s",s);
if(!strcmp(s,"LIN"))
{
scanf("%d",&a);
q.push_front(a); //在队列头(左边)存入数据
}
else if(!strcmp(s,"RIN"))
{
scanf("%d",&a);
q.push_back(a);//在队列尾(右边)存入数据
}
else if(!strcmp(s,"LOUT"))
{
if(!q.empty())
q.pop_front(); //如果队列非空删除队列头(最左边)的数据
else
m[i]++;
}
else if(!strcmp(s,"ROUT"))
{
if(q.empty())
m[i]++;
else
q.pop_back();
}
}
printf("%d",q.front());
q.pop_front();
while(!q.empty())
{
printf(" %d",q.front());//输出队列中的数据
q.pop_front();
}
printf("\n");
for(i=1; i<=n; i++)
if(m[i])
printf("%d ERROR\n",i);
return 0;
}

评论




博客内容遵循 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 协议

载入天数...载入时分秒... 本站使用 Volantis 作为主题 鲁ICP备-20012065号