首页 > 其他 > 详细

2.双链表

时间:2020-07-11 18:56:51      阅读:42      评论:0      收藏:0      [点我收藏+]

技术分享图片

 技术分享图片

 技术分享图片

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

不定义头结点和尾结点了

令下标是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.双链表

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!