2018百度之星初赛(A)2 度度熊学队列

本文介绍了一个利用C++标准模板库中的双向链表(list)进行数据操作的具体案例,包括插入、删除和反转等操作,并展示了如何通过双向链表解决实际问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

思路:

记录一下c++ stl中的双向链表list的各种用法。

https://blog.youkuaiyun.com/fanyun_01/article/details/56881515

实现:

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 
 4 list<int> a[150005];
 5 
 6 int main()
 7 {
 8     int n, q, t, u, v, w;
 9     while (scanf("%d %d", &n, &q) != EOF)
10     {
11         for (int i = 1; i <= n; i++) a[i].clear();
12         while (q--)
13         {
14             scanf("%d", &t);
15             if (t == 1)
16             {
17                 scanf("%d%d%d", &u, &w, &v);
18                 if (w == 0) a[u].push_front(v);
19                 else a[u].push_back(v);
20             }
21             else if (t == 2)
22             {
23                 scanf("%d%d", &u, &w);
24                 int ans;
25                 if (a[u].empty()) ans = -1;
26                 else if (w == 0)
27                 {              
28                     ans = a[u].front(); a[u].pop_front();
29                 }
30                 else
31                 {
32                     ans = a[u].back(); a[u].pop_back();
33                 }
34                 printf("%d\n", ans);
35             }
36             else
37             {
38                 scanf("%d%d%d", &u, &v, &w);
39                 if (w == 1) a[v].reverse();
40                 a[u].splice(a[u].end(), a[v]);
41             }
42         }
43     }
44     return 0;
45 }

 

转载于:https://www.cnblogs.com/wangyiming/p/9513391.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值