链表的操作,一般在c语言中都是用指针和结构体来完成的,这样的链表我们也叫做动态链表。
但是动态的链表有一个比较致命的缺点,就是它创造一个新的连接的时候,速度会特别特别的慢。如果在算法题中使用动态链表,TLE基本上就是板上钉钉了。
所以学习一下利用数组来模拟链表还是蛮重要的。用数组模拟的链表也叫静态链表,它的缺点是会有些浪费内存,但优点是你可以快到飞起QwQ
其实只要理解了链表,用数组来完成模拟的过程并不算复杂。。。所以理解链表以后记记模板就差不多欧克了QwQ
1.单链表
<1>一般的单链表
在用数组模拟链表时,我们可以用e[i]来表示当前节点的权值,ne[I]来表示当前节点指向的下一节点(也就是动态链表中的next),head表示头节点,idx来记录下标。
然后一般会用到的操作就是在表头加入元素,在表中任意一点加入元素,以及删除任意一个节点这三个操作。其实也不多,用代码实现起来也比较的简单。
const int N = 100010;
int e[N], ne[N], head, idx;
void init() //初始化链表
{
head = -1;
idx = 0;
}
void add_to_head(int x) //加入元素到表头
{
e[idx] = x; //先记录输入节点的权值
ne[idx] = head; //让输入节