码迷,mamicode.com
首页 > 其他好文 > 详细

2.双链表

时间:2020-07-11 19:14:03      阅读:46      评论:0      收藏:0      [点我收藏+]

标签:space   tail   main   ace   str   链表   while   mamicode   init   

技术图片

 技术图片

 技术图片

 双链表一个节点里面有两个指针,一个指向左边,一个指向右边

不定义头结点和尾结点了

令下标是0的点表示head

令下标是1的点表示tail

邻接表的知识:把每个点的所有邻边全部存下来

邻接表就是n个单链表

head[i]存储第i个点的邻边

技术图片

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 const int N = 100010;
 4 int e[N], l[N], r[N], idx;
 5 //l[i]存储i这个点左边是谁
 6 //r[i]存储i这个点右边是谁
 7 //初始化
 8 void init() {
 9     r[0] = 1;
10     l[1] = 0;
11     idx = 2; //因为0和1已经用过了
12 } 
13 //在下标是k的节点右边插入值为x的节点
14 void add(int k, int x) {
15     e[idx] = x;
16     r[idx] = r[k];
17     l[idx] = k;
18     l[r[k]] = idx;
19     r[k] = idx;
20     idx++;
21 } 
22 //删除下标为k的节点
23 void remove(int k) {
24     r[l[k]] = r[k];
25     l[r[k]] = l[k];
26 }
27 int main() {
28     init();
29     int m;
30     cin >> m;
31     while (m--) {
32         string s;
33         int k, x;
34         cin >> s;
35         if (s == "L") {
36             cin >> x;
37             add(0, x);
38         } else if (s == "R") {
39             cin >> x;
40             add(l[1], x);
41         } else if (s == "D") {
42             cin >> k;
43             remove(k + 1);
44         } else if (s == "IL") {
45             cin >> k >> x;
46             add(l[k + 1], x);
47         } else {
48             cin >> k >> x;
49             add(k + 1, x);
50         }
51     }
52     for (int i = r[0]; i != 1; i = r[i]) {
53         cout << e[i] << " ";
54     }    
55     cout << endl;
56     return 0;
57 }

 

2.双链表

标签:space   tail   main   ace   str   链表   while   mamicode   init   

原文地址:https://www.cnblogs.com/fx1998/p/13284510.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!