带你了解学习数据结构和算法(说人话版本)

2024-01-06 05:40

本文主要是介绍带你了解学习数据结构和算法(说人话版本),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

本人对算法只是大致的了解,本章就是浅浅的学习了解算法,当然这些只是算法的冰山一角

欢迎进行学习交流,不足之处请指出,喜欢麻烦点赞+收藏,谢谢各位大佬了

这篇关于带你了解学习数据结构和算法(说人话版本)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/575365

相关文章

C#数据结构之字符串(string)详解

《C#数据结构之字符串(string)详解》:本文主要介绍C#数据结构之字符串(string),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录转义字符序列字符串的创建字符串的声明null字符串与空字符串重复单字符字符串的构造字符串的属性和常用方法属性常用方法总结摘

Linux卸载自带jdk并安装新jdk版本的图文教程

《Linux卸载自带jdk并安装新jdk版本的图文教程》在Linux系统中,有时需要卸载预装的OpenJDK并安装特定版本的JDK,例如JDK1.8,所以本文给大家详细介绍了Linux卸载自带jdk并... 目录Ⅰ、卸载自带jdkⅡ、安装新版jdkⅠ、卸载自带jdk1、输入命令查看旧jdkrpm -qa

Tomcat版本与Java版本的关系及说明

《Tomcat版本与Java版本的关系及说明》:本文主要介绍Tomcat版本与Java版本的关系及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Tomcat版本与Java版本的关系Tomcat历史版本对应的Java版本Tomcat支持哪些版本的pythonJ

SpringBoot实现MD5加盐算法的示例代码

《SpringBoot实现MD5加盐算法的示例代码》加盐算法是一种用于增强密码安全性的技术,本文主要介绍了SpringBoot实现MD5加盐算法的示例代码,文中通过示例代码介绍的非常详细,对大家的学习... 目录一、什么是加盐算法二、如何实现加盐算法2.1 加盐算法代码实现2.2 注册页面中进行密码加盐2.

Java时间轮调度算法的代码实现

《Java时间轮调度算法的代码实现》时间轮是一种高效的定时调度算法,主要用于管理延时任务或周期性任务,它通过一个环形数组(时间轮)和指针来实现,将大量定时任务分摊到固定的时间槽中,极大地降低了时间复杂... 目录1、简述2、时间轮的原理3. 时间轮的实现步骤3.1 定义时间槽3.2 定义时间轮3.3 使用时

IDEA中Git版本回退的两种实现方案

《IDEA中Git版本回退的两种实现方案》作为开发者,代码版本回退是日常高频操作,IntelliJIDEA集成了强大的Git工具链,但面对reset和revert两种核心回退方案,许多开发者仍存在选择... 目录一、版本回退前置知识二、Reset方案:整体改写历史1、IDEA图形化操作(推荐)1.1、查看提

一文带你了解SpringBoot中启动参数的各种用法

《一文带你了解SpringBoot中启动参数的各种用法》在使用SpringBoot开发应用时,我们通常需要根据不同的环境或特定需求调整启动参数,那么,SpringBoot提供了哪些方式来配置这些启动参... 目录一、启动参数的常见传递方式二、通过命令行参数传递启动参数三、使用 application.pro

JDK多版本共存并自由切换的操作指南(本文为JDK8和JDK17)

《JDK多版本共存并自由切换的操作指南(本文为JDK8和JDK17)》本文介绍了如何在Windows系统上配置多版本JDK(以JDK8和JDK17为例),并通过图文结合的方式给大家讲解了详细步骤,具有... 目录第一步 下载安装JDK第二步 配置环境变量第三步 切换JDK版本并验证可能遇到的问题前提:公司常

一文带你深入了解Python中的GeneratorExit异常处理

《一文带你深入了解Python中的GeneratorExit异常处理》GeneratorExit是Python内置的异常,当生成器或协程被强制关闭时,Python解释器会向其发送这个异常,下面我们来看... 目录GeneratorExit:协程世界的死亡通知书什么是GeneratorExit实际中的问题案例

nvm如何切换与管理node版本

《nvm如何切换与管理node版本》:本文主要介绍nvm如何切换与管理node版本问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录nvm切换与管理node版本nvm安装nvm常用命令总结nvm切换与管理node版本nvm适用于多项目同时开发,然后项目适配no