数据结构复习

数据结构复习

时间复杂度

数据结构复习_第1张图片

链表

在链表中,数据的添加和删除都较为方便,访问比较耗时间

数据结构复习_第2张图片

每个数字都有一个“指针”,指向下一个数据内存地址。

数据无需存储在连续空间

访问某个数据:从第一个开始依次往下顺续访问

查找所需时间:O(n);增删所需时间:O(1);

循环链表;双向链表

数组

数组中,访问数据十分简单,而添加和删除数据比较耗工夫

数据结构复习_第3张图片

查找所需时间:O(1);增删所需时间:O(n);

只能访问最新添加的数据。栈就像是一摞书,拿到新书时我们会把它放在书堆的最上面,取书时也只能从最上面的新书开始取。

数据结构复习_第4张图片

往栈中添加数据的操作叫作“入栈”(push)。出栈同理

像栈这种最后添加的数据最先被取出,即“后进先出”的结构,我们称为 Last In First Out,简称 LIFO。

*深度优先搜索算法

队列

队列中添加和删除数据的操作分别是在两端进行的

数据结构复习_第5张图片

像队列这种最先进去的数据最先被取来,即“先进先出”的结构,我们称为 First In First Out,简称 FIFO。

*广度优先搜索算法

哈希表

哈希表存储的是由键(key)和值(value)组成的数据。

我们可以利用哈希函数快速访问到数组中的目标数据。如果发生哈希冲突,就使用链表进行存储。

数据结构复习_第6张图片

链地址法:在存储数据的过程中,如果发生冲突,可以利用链表在已有数据的后面插入新数据来解决冲突。

堆是一种图的树形结构,被用于实现“优先队列”

优先队列是一种数据结构,可以自由添加数据,但取出数据时要从最小值开始按顺序取出。在堆的树形结构中,各个顶点被称为“结点”(node),数据就存储在这些结点中。

数据结构复习_第7张图片

一个结点最多有两个子结点

排列顺序:从上到下,从左到右

子结点必定大于父结点

取出最小值时间:O(1)

由于取出数据后需要将最后的数据移到最顶端,,那么重构树的时间复杂度便为O(logn)

添加数据:O(logn)

*狄克斯特拉算法

二叉查找树

二叉搜索树、二叉排列数

数据结构复习_第8张图片

两个性质:

1、每个结点的值均大于其左子数上任意一个结点的值,如9大于其左子树上的3和8;15大于左子树上的所有数字。

2、每个结点的值均小于其右子树上任意一个结点的值,如15小于其右子树上的23、17和28。

结论:

1、二叉查找树的最大结点要从顶端开始,往其右下的末端寻找,此处为3。

2、二叉查找树的最大结点要从顶端开始,往其右下的末端寻找,此处为28。

添加数据:从顶端结点开始,依次向下比较,与结点中的值进行比较,小于它则往 左移,大于它则往右移。

删除数据:若该数:没有子结点,直接删掉即可;有一个子结点,删掉目标结点,将子结点的数移到被删除结点的位置上即可;有两个子结点,删掉目标结点,在被删除结点的左子树中寻找最大结点,移到被删除的位置(被删结点的右子树中寻找最小结点,并替换也可以)。如果有更多结点,则需递归执行前面的操作。

数据结构复习_第9张图片

二分查找算法思想的树形结构体现

数据比较的次数取决于数的高度。结点数为n,树的形状又较为均衡,时间复杂度为O(logn),若树的形状朝单侧纵向延伸,时间复杂度变为O(n)。

平衡二叉查找树:这种数据结构可以修正形状不均衡的树,让其始终保持均衡形态,以提高查找效率。

数取决于数的高度。结点数为n,树的形状又较为均衡,时间复杂度为O(logn),若树的形状朝单侧纵向延伸,时间复杂度变为O(n)。

参考书籍:我的第一本算法书 (石田保辉 宮崎修一)

你可能感兴趣的:(数据结构,学习)