题目

题目描述:
栗酱有一天在网上冲浪的时候发现了一道很有意思的数据结构题。
该数据结构形如长条形。
一开始该容器为空,有以下七种操作。
1 a从前面插入元素a
2 从前面删除一个元素
3 a从后面插入一个元素
4 从后面删除一个元素
5 将整个容器头尾翻转
6 输出个数和所有元素
7 对所有元素进行从小到大排序

输入描述:
只有一组数据,第一行n≤50000,m≤200000, a≤100000 代表最大数据数目和操作次数。
接下来每一行一个操作如上描述。保证所有操作合法(不会在容器为空时删除元素)。
6、7操作共计不会超过10次。

输出描述:
当执行6操作时,第一行先输出当前的个数,然后从头到尾按顺序输出,每两个元素之间用一个空格隔开,末尾不能有空格。


解析

知识点

  • 真就简单的数据结构呗:要不就用STL,要不就数组手动模拟。随你咯~

算法操作

  • STL可以用vector(变长数组),也可以用deque(双端队列)。这里当然用deque简单一点(有STL为啥要手动模拟呢嘿嘿嘿)。

部分STL介绍

  1. deque就是一个两头操作的队列呗。
  2. 头插,尾插:push_front()/push_back()。
  3. 头删,尾删:pop_front()/pop_back()。
  4. 然后再用一些工作性算法:sort(排序)reverse(倒置)
  5. 就这样呗。

打代码:

  1. 输入。
  2. 分情况STL。
  3. 看代码~


AC代码

#include <iostream>
#include <algorithm>
#include <deque>
using namespace std;
#define IOS ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
//代码预处理区

const int MAX = 1e5 + 7;
deque<int> dq;
//全局变量区

int main() {
    IOS;
    int n, T; cin >> n >> T;
    while (T--) {
        int way; cin >> way;
        if (1 == way) {
            int x; cin >> x;
            dq.push_front(x);
        }
        else if (2 == way) dq.pop_front();
        else if (3 == way) {
            int x; cin >> x;
            dq.push_back(x);
        }
        else if (4 == way) dq.pop_back();
        else if (5 == way) reverse(dq.begin(), dq.end());
        else if (6 == way) {
            int len = dq.size(); cout << len << endl;
            for (int i = 0; i < len; i++)
                cout << dq[i] << " ";
            cout << endl;
        }
        else sort(dq.begin(), dq.end());
    }
    return 0;
}
//函数区