链表
单链表
head $\rightarrow \empty$
node: val, next
- 值数组: e[N] (val数组)
- 指针数组: ne[N] (next 数组)
- e和ne用下标关联起来
代码
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
| const int N = 100010;
int head, e[N], ne[N], 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 x, int k){ e[idx] = x; ne[idx] = ne[k]; ne[k] = idx; idx++; }
void remove(int k){ ne[k] = ne[ne[k]]; }
|
双链表
l[N],r[N], 0:head, 1:tail
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
| int e[N], l[N], r[N], idx;
void init(){ r[0]=1; l[1]=0; idx=2; }
void add(int k, int x){ e[idx] = x; r[idx] = r[k]; l[idx] = k; r[k] = idx; l[r[idx]] = idx; idx++; }
void remove(int k){ r[l[k]] = r[k]; l[r[k]] = l[k]; }
|
邻接表:n个单链表