- 单链表
int ne[N], head, e[N], len;
void init(){
head = -1, len = 0;
}
void add_head(int x){
e[len] = x;
ne[len] = head;
head = len++;
}
void add(int k, int x){
e[len] = x;
ne[len] = ne[k];
ne[k] = len++;
}
void remove(int k){
ne[k] = ne[ne[k]];
}
void print(){
for(int i = head; ~i; i = ne[i]){
cout << e[i] << " ";
}
2.双链表
#include<iostream>
using namespace std;
const int N = 1e5 + 10;
int head, e[N], l[N], r[N], len;
int n;
void init(){
//左端点是0,右端点是1
r[0] = 1, l[1] = 0;
len = 2;
}
void add(int k, int x){
e[len] = x;
l[len] = k, r[len] = r[k];
l[r[k]] = len;
r[k] = len++;
}
//左端点插入 add(0, x);
//右端点插入 add(l[1], x);
//k的左侧插入 add(l[k + 1], x);
//k的右侧插入 add(k + 1, x);
void remove(int k){
l[r[k]] = l[k];
r[l[k]] = r[k];
}
//删除k这个节点remove(k + 1);
void print(){
for(int i = r[0]; i != 1; i = r[i])
cout << e[i] << " ";
}
3.邻接表
int len, h[N * 2], w[N], ne[N * 2], e[N * 2];
int ans;
void init(){
memset(h, -1, sizeof h);
len = 0;
}
void add(int a, int b){
e[len] = b;
ne[len] = h[a];
h[a] = len++;
}
void print(){
for(int i = h[son]; ~i; i = ne[i]){
}
}