数组模拟单链表(静态链表)
链表
数据对象的存储结构可以分为两种:0顺序存储结构和链式存储结构
顺序存储结构要求所有的元素依次存放在一片连续的存储空间中
链式存储结构无需占用一整块存储空间,但是为了表示节点之间的关系,需要给每一个节点附加指针字段,用于存放后继元素的存储地址。
单链表的数组模拟实现
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 
 | #include <iostream>
 using namespace std;
 
 const int N = 100010;
 
 
 
 
 
 int e[N], ne[N], head, idx;
 
 
 void init()
 {
 
 head = -1;
 
 idx = 0;
 }
 
 void add_to_head(int x)
 {
 e[idx] = x;
 ne[idx] = head;
 head = idx;
 idx++;
 }
 
 
 void add(int k, int x)
 {
 e[idx] = x;
 ne[idx] = ne[k];
 ne[k] = idx;
 idx++;
 }
 
 
 void remove(int k)
 {
 ne[k] = ne[ne[k]];
 }
 
 int main()
 {
 init();
 int m;
 cin >> m;
 while (m--)
 {
 int x, k;
 char op;
 cin >> op;
 if (op == 'H')
 {
 cin >> x;
 add_to_head(x);
 }
 else if (op == 'D')
 {
 cin >> k;
 
 if (k == 0)
 head = ne[head];
 
 remove(k - 1);
 }
 else
 {
 cin >> k >> x;
 add(k - 1, x);
 }
 }
 for (int i = head; i != -1; i = ne[i])
 cout << e[i] << ' ';
 
 return 0;
 }
 
 | 
单链表的局限性
单链表不能在链表的任意位置插入一个数据,因为单链表只能找到某一个数据的后继,而不能找到一个数据的前导。
要解决这一个问题,要使用到双链表。