时间限制:1秒
空间限制:128M
小码哥想创建一个双端队列,即,两头都能进,两头都能访问,两头都能出。请你创建一个这样的双端队列并帮他实现以下三种操作:
这个双端数列一开始是空的。
第一行输入一个整数n,表示操作个数。
接下来n行,每行输入一个操作,格式如题目描述中所示。
保证:对于100%的数据:1<=n<=1,000,000,x在int类型范围内,数列为空时只进行操作1和2。
对于每个操作3和4,输出一行一个整数表示答案。
11
1 3
1 6
2 9
3
4
5
2 7
2 8
6
3
4
6
9
3
7
本片题解提供一种使用C++ list 模拟双端队列的方法
list可以很方便地进行头部和尾部的插入删除取值操作,正好是题目要求进行的6种操作。
因此直接进行模拟即可。
/*
* @Author: LetMeFly
* @Date: 2022-09-28 20:33:04
* @LastEditors: LetMeFly
* @LastEditTime: 2022-09-28 20:35:15
*/
#include
using namespace std;
#define mem(a) memset(a, 0, sizeof(a))
#define dbg(x) cout << #x << " = " << x << endl
#define fi(i, l, r) for (int i = l; i < r; i++)
#define cd(a) scanf("%d", &a)
typedef long long ll;
int main() {
int N;
cin >> N;
list<int> li;
while (N--) {
int op;
cin >> op;
if (op == 1) {
int x;
cin >> x;
li.push_front(x);
}
else if (op == 2) {
int x;
cin >> x;
li.push_back(x);
}
else if (op == 3) {
cout << *li.begin() << endl;
}
else if (op == 4) {
cout << li.back() << endl;
}
else if (op == 5) {
li.pop_front();
}
else {
li.pop_back();
}
}
return 0;
}
虽然代码可以复制,但最好还是自己理解后再敲哦
原创不易,转载请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/127097523