链表
链表:
链表支持任意位置插入删除,但是只能按以此的顺序进行查找,我们通常使用两个变量记录当前点前面的后面的点的节点,然后经常建立额为的两个节点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];//获取终点和权重
}
链表与邻接表数据结构详解
本文详细介绍了链表的数据结构,包括其特点、插入删除操作,并提供了一个邻值查找的例题,利用排序后的链表高效解决。接着讨论了邻接表的概念,作为图论中的高级数据结构,如何通过表头数组方便地访问和组织边的信息。
858

被折叠的 条评论
为什么被折叠?



