数组模拟链表

本文介绍了如何使用数组模拟链表,包括单链表和双链表的实现。通过数组中的元素表示节点值和指向,静态链表克服了动态链表创建连接慢的问题,但会占用更多内存。文中详细阐述了单链表的头插法、中插法和删除操作,以及邻接链表在图论问题中的应用。双链表则通过r和l指针实现双向连接,简化操作。
摘要由CSDN通过智能技术生成

链表的操作,一般在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;     //让输入节
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值