本文主要是介绍带你了解学习数据结构和算法(说人话版本),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1.数据结构
1.1.基本概念
数据结构是来进行装数据以及数据之间关系的一种集合,就是计算机来进行存储,组织数据的方式,好比装东西的不同的盒子,不同的东西拿不同的盒子来装,就会起到事半功倍的效果,
1.2数据结构的分类
根据逻辑结构分为:集合,线性,树形,图形,
逻辑结构:数据与数据之间的联系被称为数据的逻辑结构
集合结构:数据都放在同一个地方,之间是没有什么联系的,就好比你去做公交车,公交车里面的乘客就是一个集合
线性结构:该结构里面的数据存在一对一的相互的关系,就好比排队做核酸,一个对一个,之间存在先后的关系
树形结构:该结构里面的数据存在一对多的相互的关系,就好比学校的老师,一个老师教一个班的学生
图形结构:该结构里面的数据存在多对多的相互的关系,就好比一个人可以有多个身份,一个身份有多个人同时拥有
1.3物理结构的分类
根据物理结构分为:顺序存储结构,链接存储结构,数据索引存储结构,数据散列存储结构(hash)
物理结构:数据的逻辑结构在计算机的存储方式叫为数据的物理结构
A--顺序存储结构:在计算机上面存储的时候是一段连续的内存空间来对于存储每个放入的数据元素
优点:可进行随机访问,只有知道内存的地址
不足:插入删除效率低,大小固定
代表:数组
B--链接存储结构:在计算机上面存储的时候每个放入的元素位置相邻在内存上也要相邻
优点:大小动态扩展,插入删除效率高
不足:随机访问,查询效率不高,容易造成碎片化对内存管理不太友好
代表:链表
C--数据索引存储结构:顾名思义就是给一个索引,你通过索引来放置在对于的索引所指示的位置,好比你去图书馆找书,给你一个书籍的寻找牌(在第几层第几个)。
此图为稀疏索引(就是一组结点在索引表里面对应一个搜索码项)反之就是稠密索引
优点:检索速度快
不足:因为会增加多余的索引表出来,所以会占用比较多的存储空间
D--数据散列存储结构(hash存储):把数据通过函数转为另一个值,这个值就是这个数据在计算机上面的地址值,这个函数就是hash函数,放转换之后的数据的地方为列表
优点:这种是类似为数组的但是查询的速度是比数组快的
不足:存取随机,不便于顺序查找
2.常见的数据结构
2.1集合结构
Set ,Hashset TreeSet
2.2线性结构
数组,栈(先进后出),队列(先进先出),串和线性表
2.3树形结构
1. 树是什么?
是由一个或者是以上的节点组成的,会存在一个根节点形式的数据结构
A:为根节点
B,C,D:为A的子节点, 但其相互为兄弟节点 ,同时BCD下面没有子节点也可叫为叶子节点
2.二叉树是什么?
就是树中的每个节点的度都不超过2个,(就是每个都有两个孩子)
满二叉树(两边都是满的)
完全二叉树(满足:1.除了最后一层其他的是满二叉树,2.在最后一层的节点为依次从左到右分布)
非安全二叉树(啥也不是)
红黑树:
特点:1.根节点为黑色 2.叶子节点为黑色 3.红旁边的一定为黑 4.从跟节点出发任意走两边的线黑色都是一样的
红黑树也是属于二叉树,它是通过旋转和变色来保证平衡的
代表:java里面的TreeSet和TreeMap底层
3.B树和B+树
B树是多叉树(避免树的层次太高,造成磁盘IO,读写频繁),是平衡树,
特点:1.每个节点店铺超过了2个
2.数据存储在节点上,数据不会重复存储
3.B树比较矮,IO次数越少,搜索性能越
B+树是B树的增强版,在内部的节点上只记录地址,在叶子节点存储数据。叶子节点有双向链表,把叶子节点连起来。查询效率比较高,并且树的高度只有3层
代表:mysql使用的是B+树
3.算法
3.1算法是什么?
是一种解决问题的步骤,一般可以来进行优化我们的接口的效率,比如步骤少了以后,返回的效率就会对应的高了起来
3.2算法复杂度
说一个算法怎么样是根据时间复杂度和空间复杂度
时间复杂度:包括时间频度,常数阶O(1),对数阶O(log2n),线性阶O(n)。。。等
空间复杂度:是算法在进行运行的过程中临时占用存储空间大小的量度
比如:我们知道的缓存就是空间换时间
3.3常见的算法
A--散列算法:就是你给我一个任意长度的数据,我通过散列算法转换为固定的长度(但可能会出现转换之后的值是一致的产生hash碰撞)
比如:MD5 SHA-1等
B--递归:就是自己去调用自己,当达到一个条件的时候就跳出这个循环,不然一直进行调用
注意:一定要给一个出口,不然你的电脑就GG了
C--排序:有以下的各种排序方式
下面我说的是java中的排序:
关键字:Arrays.sort (元素<47,使用插入排序,元素<286使用快速排序)
关键字:Arrars.aslist(按照自然顺序进行升序排序)
java当中实际时候的也只是一些函数的使用,和方法的来调用来解决,
详细深入的学习10大经典算法给看看下面的文章
https://www.runoob.com/w3cnote/ten-sorting-algorithm.html
本人对算法只是大致的了解,本章就是浅浅的学习了解算法,当然这些只是算法的冰山一角
欢迎进行学习交流,不足之处请指出,喜欢麻烦点赞+收藏,谢谢各位大佬了
这篇关于带你了解学习数据结构和算法(说人话版本)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!