数组模拟链表与邻接表
在算法题里数组会比链表更快
1.数组模拟单链表
1.1邻接表,是n个链表,存储图和树
head->0
e[N],表示该节点的值
ne[N]表示下一个节点坐标
用下标关联
空节点用-1的下标表示
#include<iostream>
using namespace std
const int N=100010;
int idx,head,e[N],ne[N];
//idx指向当前可以使用的节点下标(最小的空数组下标)
void init(){
head=-1;
idex=0;
}
void add_to_head(int x){
e[idx]=x;
ne[idex]=head;
head=idx;
idx++;
}
void add(int k,int x){
e[idx]=x;
ne[idex]=ne[k];
ne[k]=idx;
idx++;
}
//算法里面可以忽略空间的浪费
void remove(int k){
ne[k]=ne[ne[k]];
}
例题:
2.数组模拟双链表
2.1优化问题
#include<iostream>
using namespace std;
int e[N],l[N],r[N],idx;
int m;
void init(){
r[0]=1;
l[1]=0;
idx=0;
}
void add(int k,int x){
e[idx]=x;
r[idex]=r[k];
l[idx]=k;
l[r[k]]=idx;
r[k]=idx;
}
void remove(int k){
r[l[k]]=r[k];
l[r[k]]=l[k];
}