单向链表(数组模拟)

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 
 4 const int maxn=1010;
 5 struct node{    //point即指针,data就是需要维护的数据
 6     int point,data;
 7 }a[maxn];
 8 int head,cnt;    //head即头指针,cnt即内存池计数器
 9 
10 void buid(){
11     head=++cnt;        //把head设为没有实际意义的哨兵
12     a[head].data=0;
13 }
14 
15 void add(int k,int now)
16 {
17     for(int i=head;i;i=a[i].point)    //从头指针开始遍历链表
18         if(!(--k))        //到达插入位置
19         {
20             a[++cnt].point=a[i].point;    //将新插入节点的指针指向插入位置的后继
21             a[i].point=cnt;        //将前驱节点的指针指向新插入节点
22             a[cnt].data=now;
23             break;
24         }
25 }
26 void del(int k)
27 {
28     for(int i=head;i;i=a[i].point)
29         if((--k)==1)    //找到前驱
30         {
31             a[i].point=a[a[i].point].point;        //将前驱的指针指向后继
32             break;
33         }
34 }
35 int main()
36 {
37     buid();
38     add(1,5);    //进入,因为计算时考虑了哨兵,所以进入时++k
39     add(2,6);    //进入,因为计算时考虑了哨兵,所以进入时++k
40     add(3,3);
41     add(4,1);
42     add(5,2);
43     add(6,8);
44     add(7,4);
45     
46     for(int i=a[head].point;i;i=a[i].point)
47         cout<<a[i].data<<" ";
48     cout<<endl;
49     
50     add(6,9);
51     
52     for(int i=a[head].point;i;i=a[i].point)
53         cout<<a[i].data<<" ";
54     cout<<endl;
55         
56     del(3);
57     
58     for(int i=a[head].point;i;i=a[i].point)
59         cout<<a[i].data<<" ";
60     cout<<endl;    
61     
62     return 0;
63 }

链表博客  https://www.cnblogs.com/ivanovcraft/p/9037475.html

原文地址:https://www.cnblogs.com/tflsnoi/p/13522336.html