静态链表

用数组模拟链表的好处是方便,代码量少,而且不需要用到指针,减少因为指针出现的错误。

在静态链表中,我们使用head表示头节点的下标,初状态下head=-1,说明表空。

将元素加入到头节点之后,head更新为这个元素的下标,表示这个元素就是这个表的新头节点。

具体可以看看代码,比较简单。

1
2
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
#include <iostream>
using namespace std;
const int N = 100010;
//静态链表,头节点(注意这里的头节点实际上就是第一个元素了!)、当前元素、当前元素的next指针,当前下标
int head, e[N], ne[N], idx;
int m;
char mode;

void init() {
head = -1;
idx = 0;
}
// 加到头,并更新头节点
void add_to_head(int x) {
e[idx] = x, ne[idx] = head, head = idx++;
}
// 在k的后面加入数
void add(int k, int x) {
e[idx] = x, ne[idx] = ne[k], ne[k] = idx++;
}
// 删除k的后面一个数
void del(int k) {
ne[k] = ne[ne[k]];
}

void print() {
for(int i = head; i != -1; i = ne[i]) cout << e[i] << ' ';
}

int main() {
cin >> m;
init();
while(m --) {
int x, k;
cin >> mode;
if(mode == 'H') cin >> x, add_to_head(x);
if(mode == 'I') cin >> k >> x, add(k - 1, x);
if(mode == 'D') {
cin >> k;
//k = 0的时候删除头节点,然后头节点的下一个元素成为新的头节点
if(k == 0) head = ne[head];
else del(k - 1);
}
}
print();
}
Author

InverseDa

Posted on

2021-03-15

Updated on

2023-03-30

Licensed under

Comments

Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×