首页 > 代码库 > 《数据结构》之数组结构和链表

《数据结构》之数组结构和链表

1:间接寻址的基本概念{

间接寻址就是二级指针的利用,指向指针的指针,一维数组,二维数组。间接寻址在此特指其一维数组的含义;

间接寻址是一维和二维数组的组合。既保留了数组的许多优点,也获得了链表的众多特色。首先,可以根据索引在O(1)

的时间内询问每个元素;其次可以采用二分在对数时间内对一个有序表进行搜索;最后,在诸如插入和删除的操作期间

不必对元素进行实际的行动}

2:间接寻址使用指针数组来跟踪每一个元素,对元素本身如何分配不设限制(可离散可连续)。将实体节点转化为指针节点。

3 使用:内存池

自构建等块内存池,每一个指针分别指向每一块内存的首地址。内存池可以避免内存碎片和系统调用。

  :散列链表

如果指针指向的元素包含next指针,则间接寻址就变成了散列链表。

4:模拟指针简单的描述就是利用数组的下标当指针。

实现1:首先构造一个节点数组,节点包含两个域:data和link。link域指向数组中的其他节点。和间接寻址有相似处。

实现2:数组值包含link域,可以用来模拟树。(用来解决并查集的问题);

等价类:

定义:假定有一个具有n个元素的集合u,另有一个具有r个关系的集合r。如果(a,b)%r,则元素a和b是等价的。等价类

是指等价元素的最大集合。一言以避之,将集合u根据关系进行划分,类内的元素等价,可以看做是一种聚类。

。离线等价类

  一直n和R,确定所有的等价类。

。在线等价类

  初始时有n个元素,每个元素都属于一个独立的等价类。然后不停地执行Find和Union操作向R中增加新关系。通常被称为并查集问题。

5:并查集的操作:

Find:查询元素a和b是否属于同一类;

Union:合并元素a和b所在的lei;

并查集的实现

  采用方式二的模拟指针。数组的下标即表示指针,指针的指向使并查集构成了一颗虚拟的森林。但是并查集不关注每棵树的形状以及

相互指向关系,只关注最终的根节点以及该树的元素个数或者高度。

并查集的优化

  可以根据重量规则或者高度规则对并查集进行优化 

6:并查集的应用

  最小生成树-Kruskal算法

算法的思想:

  从n个点的图中选择n-1个点,每次从剩下的边中选择一条不会产生环路得具有最小消耗的边加入已选择的边集合中

  从当前选择的边将所有的点分成不同的类(连通分量),当判断下一条要增加的边的两个点是否在同一个类中:若

在同一类中说明构成环,否则可以增加到生成树中。

《数据结构》之数组结构和链表