链表&邻接表

链表与邻接表数据结构详解
本文详细介绍了链表的数据结构,包括其特点、插入删除操作,并提供了一个邻值查找的例题,利用排序后的链表高效解决。接着讨论了邻接表的概念,作为图论中的高级数据结构,如何通过表头数组方便地访问和组织边的信息。

链表

链表:
链表支持任意位置插入删除,但是只能按以此的顺序进行查找,我们通常使用两个变量记录当前点前面的后面的点的节点,然后经常建立额为的两个节点head和tail代表链表头尾

hou[qian[t]]=hou[t];
qian[hou[t]]=qian[t];//数组模拟链表 
a[a[t].qian].hou=a[t].hou;//指针指向 
a[a[t].hou].qian=a[t].qian;//指针指向,类似出队 
t=a[t].hou;//结构体模拟链表

例题 邻值查找

给定一个长度为n的序列a,序列中的每个元素都不相同,对于每个数ai,求ai-aj最小。
把序列a进行排序,然后依次穿成链表,注意排序的时候建立数组b,其中bi在原始序列ai处于哪个位置。
因为链表有序,所以链表中指针bn指向的前继后续,通过比较与an的差就能求出最接近的。
在链表中删除bn指向的节点。
于是以此类推,最终就能求出了。

邻接表

邻接表是一个很高级的东西,比较牛。
它是用来将每一个边进行编号,不断往上访问前一个边。
邻接表其实是把每一个数据分成若干组,或者说若干链,每一类 都有代表元素,称之为表头,所有表头构成数组,作为一个所及访问的索引。
head所存的就是说一个这个点为起点的最后一条边的编号,然后不断获取next往前一个获取编号

void add(int x,int y,int z)
{
	ver[++tot]=y;
	edge[tot]=z;//存终点以及权重
	next[tot]=head[x],head[x]=tot;//表头存编号 
}
for(int i=head[x];i;i=next[i])
{
	int y=ver[i],z=edge[i];//获取终点和权重 
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值