首页 > 代码库 > 数据结构与算法

数据结构与算法

数据结构从逻辑结构划分为:
(1)线性结构
元素之间为一对一的线性关系,第一个元素无直接前驱,最后一个元素无直接后继,其余元素都有一个直接前驱和直接后继。
(2)非线性结构
元素之间为一对多或多对多的非线性关系,每个元素有多个直接前驱或多个直接后继。
(3)集合结构
元素之间无任何关系,元素的排列无任何顺序。

 

数据结构从存储结构划分为:
(1)顺序存储(向量存储)
所有元素存放在一片连续的存储单元中,逻辑上相邻的元素存放到计算机内存中仍然相邻。

(2)链式存储
所有元素存放在可以不连续的存储单元中,但元素之间的关系可以通过地址确定,逻辑上相邻的元素存放到计算机内存后不一定是相邻的。

(3)索引存储
使用该方法存放元素的同时,还建立附加的索引表,索引表中的每一项称为索引项,索引项的一般形式是:(关键字,地址),其中的关键字是能惟一标识一个结点的那些数据项。

 

---------------------------

算法应用中,排序算法肯定会遇到,把元素按照某种逻辑排序。

选择排序核心思想:循环选择剩余元素中最小者与要交换位置的元素比较。细化一点也是,首先找到数组中最小的那个元素,其次,将它和数组的第一个元素交换位置(如果第一个元素就是最小元素那么它就和自己交换),再次,在剩下的元素中找到最小的元素,将它与数组的第二个元素交换位置。如此往复,直到整个数组排序。这个算法中交换的总次数是N,算法的时间效率取决于比较的次数。

插入排序核心思想:一张一张的来,将每一张牌插入到其他已经有序的牌中的适当位置,插入前为了给插入元素腾出空间,需要将其余所有元素在插入之间都向右移动一位。插入排序所需时间取悦于输入中元素的初始顺序。对于一个已知序列,适合插入排序。

 

快速排序:把数组分成2个子数组,将两部分独立排序,当两个子数组都有序时整个数组也就自然有序了。

 

查找符号表

技术分享

链表:每个节点都存储一个键值。

二叉树:每个节点都有两个链接。

 

索引查找是在线性表(主表)的索引存储结构上进行的,而索引存储的基本思想是:首先将一个线性表(主表)按照一定的规则分成若干个逻辑上的子表,并为每个子表分别建立一个索引项,由所有这些索引项得到主表的一个索引表,然后,可采用顺序或链接的方法来存储索引表和各个子表。索引表中的每个索引项通常包含三个域:一是索引值域,用来存储标识对应子表的索引值,它相当于记录的关键字,在索引表中由此索引值来惟一标识一个索引项(子表);二是子表的开始位置,用来存储对应子表的第一个元素的存储位置;三是子表的长度,用来存储对应子表的元素个数

 

 

图:最短路径

技术分享

 

 

 

 

 

 

 

 

 

 

二分查找:查找时,我们先将被查找的键和子数组的中间键比较,如果被查找的键小于中间键,我们就在左子数组中继续查找, 如果大于我们就在右子数组中继续查找,否则中间键就是我们要找的键

数据结构与算法