基本数据结构
链表
这里使用的是使用数组模拟链表
因为NEW一个新结点所消耗的时间是很大的。在竞赛中不用。
数组模拟单链表
单链表最常用的是邻接表。
邻接表
邻接表相当于N个链表(用于存储图和树)。
使用
e
[
N
]
e[N]
e[N]表示某个结点的值是多少,
n
e
[
N
]
ne[N]
ne[N]表示某个结点的next指针是多少。(使用下标关联)
代码实现
在竞赛过程中不用考虑内存泄漏的问题。
头结点插入
//一、将x的next指针指向head指向的点
//二、将head的next指针指向x
void add_to_head(int x){
e[idx]=x;
ne[idx]=head;
head=idx++;
}
将x插入到k结点的后面
void add(int k,int x){
e[idx]=x;
ne[idx]=ne[k];
ne[k]=idx++;
}
将下标是k的点后面的点删掉
//直接将k结点的next指向要删除的结点的下一个结点
void remove(int k){
ne[k]=ne[ne[k]];
}
数组模拟双链表
双链表常用于优化某些问题。