博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

链表--双链表

Posted on 2019-10-22 10:37  淼哥学习园地  阅读(94)  评论(0)    收藏  举报

链表的基本操作: 

(1)插入一个数:在最左边插入,在最右边插入

(2)删除一个数:将第k个插入的数删除

(3)在第k个插入的数左边插入一个数

(4)在第k个数右边插入一个数

题目:

 

 代码:

 1 #include <iostream>
 2 
 3 using namespace std;
 4 const int N=100010;
 5 int m ;
 6 
 7 int e[N],l[N],r[N],idx;
 8 
 9 //初始化
10 void init()
11 {
12     r[0]=1;
13     l[1]=0;
14     idx =2;
15     
16 }
17 //插入:右边
18 
19 void insert(int k,int x)
20 {
21     e[idx]=x;
22     
23     //改变四条边
24     r[idx]=r[k];
25     l[idx]=k;
26     l[r[k]]=idx;
27     r[k]=idx;
28     
29     idx++;
30     
31 }
32 //插入:左边(k)
33 
34 /*
35 其实就是 add(l[k],int x);
36 */
37 
38 //删除
39 void remove(int k)
40 {
41     r[l[k]]=r[k];
42     l[r[k]]=l[k];
43 }
44 
45 int main()
46 {
47     cin>>m;
48     init();
49     
50     while(m--)
51     {
52         string op;
53         cin>>op;
54         
55         int k,x;
56         if(op=="L")
57         {
58             cin>>x;
59             insert(0,x);
60         }
61         else if(op=="R")
62         {
63             cin>>x;
64             insert(l[1],x);
65         }
66         else if(op=="D"){
67             cin>>k;
68             remove(k+1);
69         }
70         else if(op=="IL")
71         {
72             cin>>k>>x;
73             insert(l[k+1],x);
74         }
75         else{
76             cin>>k>>x;
77             insert(k+1,x);
78         }
79         
80         
81     }
82     //从左到右遍历双链表
83     for(int i=r[0];i!=1;i=r[i]) cout<<e[i]<<' ';
84     cout<<endl;
85     
86     return 0;
87 }