数据结构

推荐博文:
数据结构与算法(java版):https://blog.csdn.net/zhankuangqu4845/article/details/86349087?utm_source=app
数据结构与算法中的经典算法:https://blog.csdn.net/yph001/article/details/81123414
数据结构与算法(一):数据结构https://www.jianshu.com/p/30fdd6faea79
程序 = 数据结构 + 算法

基本概念和术语

1.数据、数据元素、数据项和数据类型
数据:所有能被输入到计算机中,且能被计算机处理的符号的集合。是计算机操作的对象的总称。整型、浮点型等数值类型及字符、声音、图像等非数值数据都属于数据。
数据元素:数据(集合)中的一个“个体”,数据及结构中讨论的基本单位。
数据项:数据的不可分割的最小单位。一个数据元素可由若干个数据项组成。
数据类型:在一种程序设计语言中,变量所具有的数据种类。整型、浮点型、字符型等等。
举例:某个公司的所有员工是一项数据,每个员工都是一个数据元素,其中员工的工号、性别、姓名等信息都是数据项。
学习数据结构是为了提高数据处理的效率。
数据结构主要包括数据的逻辑结构、数据的存储结构、对各种数据结构进行的运算。

常用数据结构:

数据结构优点缺点
无序数组插入快,在知道坐标的前提下可以快速存取查删慢,大小固定
有序数组比无序数组查找快删除和插入慢,大小固定
后进先出存取其他项很慢
队列先进先出存取其他项都很慢
链表插入、删除快查找慢
二叉树查找、插入、删除快删除算法复杂
散列表(hash表)如果关键字已知则存取速度极快,插入快删除慢,如果不知道关键字则存取很慢,对存储空间使用不充分
插入,删除快,对最大数据的项存取很快对其他数据项存取很慢
对现实世界建模有些算法慢且复杂

数组

数组是相同数据类型的元素按一定顺序排列的集合,是一块连续的内存空间。数组是一种线性表数据结构。
数组的get和set操作时间上都是O(1)的;add和remove操作时间上都是O(N)。

栈(stack)又名堆栈,它是一种运算受限的线性表(在一端进行插入和删除的线性表,它按照“先进后出,后进先出”的原则)。
1、栈是一个元素集合,支持两个基本操作:push用于将元素压入栈,pop用于删除栈顶元素。
2、后进先出的数据结构。插入与删除仅在栈顶处执行。
3、时间复杂度:索引:O(n),查找:O(n),插入:O(1),删除:O(1)

队列

1、队列是指允许在一端进行插入,而在另一端进行删除的线性表,它按照“先进先出”的原则组织数据,支持两种基本操作:enqueue用于添加一个元素到队列, dequeue用于删除。
2、先进先出的数据结构。
3、时间复杂度:索引:O(n),查找:O(n),插入:O(1),删除:O(1)。

链表

1、链表是一种由节点组成的线性数据集合,每个节点通过指针指向下一个节点。它是一种由节点组成,并能用于表示序列的数据结构。
2、单链表:每个节点仅指向下一个节点,最后一个节点指向空
3、双链表:每个节点有两个指针p,n。p指向前一个节点,n指向下一个节点,最后一个 节点指向空。
4、循环列表:每个节点指向下一个节点,最后一个节点指向第一个节点。
5、时间复杂度:索引:O(n),查找:O(n),插入:O(1),删除:O(1)

二叉树

树形数据结构,每个节点最多可以有两个子节点,称为左子节点和右子节点。
满二叉树:二叉树中每个节点有0或者2个子节点。
完美二叉树:二叉树中每个节点有两个子节点,并且所有的叶子节点的深度是一样的。
完全二叉树;二叉树中除最后一层外,其他各层的节点数均达到最大值,最后一层的节点都连续集中在最左边。
哈夫曼树:哈夫曼树是一种带权路径长度最短的二叉树,也称为最优二叉树。

散列表(hash表)

1、哈希用于将任意长度的数据映射到固定长度的数据。哈希函数的返回值被称为哈希 值哈希码或者哈希。如果不同的主键得到相同的哈希值,则发生了冲突。
2、Hash Map:hashmap是一个存储键值关系的数据结构,hash map通过哈希函数将键 值转化为桶或者槽中的下标,从而便于指定值的查找。
3、冲突解决:链地址法:在链地址法中,每个桶是相互独立的,每个索引对应一个元 素列表。处理hashmap的时间就是查找桶的时间与遍历列表元素的时间之和。
开放地址法:在开放地址法中,当插入新值时,会判断该值对应的哈希桶是否存在, 如果存在则根据某种算法依次选择下一个可能的地址,直到找到一个未被占用 的地址。开放地址即某个元素的位置并不永远由其哈希值决定。

1、堆是一种基于树的满足某些特征的数据结构,整个堆中的所有父子节点的键值都满 足相同的排序条件。堆分为最大堆和最小堆。在最大堆中,父节点的键值永远大于 所有子节点键值,根节点的键值是最大的。最小堆中,父节点的键值永远小于子节 点键值,根节点的键值是最小的。
2、时间复杂度:索引查找插入删除:同上,删除最大最小:O(1)

1、图是G=(V,E)的有序对,其包括顶点或节点的集合V以及边或弧的集合E,其中E包括了两个来自V的元素。
2、无向图:图的邻接矩阵是对称的,因此如果存在节点a到节点b的边,那节点b到节点a的边也一定存在。
3、有向图:图的邻接矩阵是非对称的,因此如果存在节点a到节点b的边,那节点b到节点a的边并不一定存在。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值