数据结构复习:链表、数组、栈、队列、哈希表、堆、二叉树

数据结构复习:链表、数组、栈、队列、哈希表、堆、二叉树

时间复杂度

在这里插入图片描述

链表

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

在这里插入图片描述

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

数据无需存储在连续空间

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

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

循环链表;双向链表

数组

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

在这里插入图片描述

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

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

在这里插入图片描述

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

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

*深度优先搜索算法

队列

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

在这里插入图片描述

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

*广度优先搜索算法

哈希表

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

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

在这里插入图片描述

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

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

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

在这里插入图片描述

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

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

子结点必定大于父结点

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

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

添加数据:O(logn)

*狄克斯特拉算法

二叉查找树

二叉搜索树、二叉排列数

在这里插入图片描述

两个性质:

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

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

结论:

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

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

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

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

在这里插入图片描述

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

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

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

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

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

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值