数组模拟链表操作集
作者:
cylove
,
2024-02-08 17:09:40
,
所有人可见
,
阅读 44
// 单向链表 :
const int N = 1010 ; // 预设顶点数目最大值
const int M = 10010 ; // 预设边数最大值
struct node
{
int v ; // 结点存储信息 , 可以在结构体中添加
} e[N] ;
int ne[N] , h[N] , idx ; // 邻接表数组模拟写法
int n ;
void init() { //初始化
// memset(h , -1 , sizeof h) ;
for(int i = 1 ; i <= n ; i++ ) h[i] = -1 ;
idx = 0 ;
}
void add(int a,int b) { // 添加元素操作
e[idx] = {b} , ne[idx] = h[a] , h[a] = idx++ ;
}
void del(int k) { // 删除第 k 个插入元素的右边元素
ne[k] = ne[ne[k]] ;
}
// 双向链表 :
const int N = 1010 ;
const int M = 10010 ;
struct node
{
int v ;
} e[N] ;
int l[N] , r[N] , idx ;
int n ;
void init() {
l[1] = 0 , r[0] = 1 ;
idx = 2 ;
}
void add(int k,int x) { //在第k个插入的数右边添加一个数
e[idx] = {x} ;
r[idx] = r[k] ;
l[idx] = k ;
l[r[k]] = idx ;
r[k] = idx++ ;
}
void del(int k) { //删除第k个插入的数
r[l[k]] = r[k] ;
l[r[k]] = l[k] ;
}