题目链接:https://www.luogu.org/problemnew/show/P2952
分析:
这道题非常适合练习deque双端队列,~~既然是是练习的板子题了,建议大家还是练练deque,下面来简单讲解一下deque的一些操作。
clear()clear()clear():清空队列
pushpushpush_back()back()back():从尾部插入一个元素。
pushpushpush_front()front()front():从头部插入一个元素。
deque双端队列的先进就在这里,它可以两端都支持同样的操作。
size()size()size():返回队列元素个数
front()front()front():返回队列首部元素。
back()back()back():返回尾部元素。
poppoppop_back()back()back():弹出队尾元素。
poppoppop_front()front()front():弹出队首元素。
empty()empty()empty():检查队列是否为空。
........................... 然后输出的方法多种多样,我选择使用迭代器,具体详见代码。
代码:
#include<cstdio>
#include<deque>
using namespace std
;
deque
<int>q
;
int main()
{
int s
;
scanf("%d\n",&s
);
int cnt
=0;
for(int j
=1;j
<=s
;j
++)
{
char c1
,c2
;
int c3
;
scanf("%c %c",&c1
,&c2
);
if(c1
=='A')
{
if(c2
=='L')
{
q
.push_front(++cnt
);
}
else
{
q
.push_back(++cnt
);
}
if(j
!=s
)
scanf("\n");
}
else
{
scanf("%d",&c3
);
if(j
!=s
)
scanf("\n");
if(c2
=='L')
{
for(int i
=1;i
<=c3
;i
++)
{
q
.pop_front();
}
}
else
{
for(int i
=1;i
<=c3
;i
++)
q
.pop_back();
}
}
}
deque
<int>::iterator it
=q
.begin();
for(it
=q
.begin();it
!=q
.end();it
++)
{
printf("%d\n",*it
);
}
return 0;
}
转载于:https://www.cnblogs.com/vercont/p/10210021.html
相关资源:JAVA上百实例源码以及开源项目