数据结构笔记

news2024/12/26 15:31:43

数据结构笔记

1.  绪论

随着计算机深入到各个领域,它的作用已不再局限于科学计算,而更多的用于控制,管理及数据处理等非数值计算的处理工作。而它加工出理的对象也由纯粹的数值发展到字符,表格和图像等各种具有一定结构的数据。一个“好”的程序,必须分析待处理的对象的特性以及各处理对象之间存在的关系。这就是数据结构这门学科产生的背景。

1.1  什么是数据结构?

数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象以及它们之间的关系和操作等等的学科。

数据结构是计算机存储、组织数据的方式,是数据之间表现关系和处理关系的一种形式

作用(好处):可以带来更高的运行效率或者存储效率

1.2  数据结构的划分

1、线性结构:在数据元素的非空有限集合中,存在唯一一个被称做“第一个”的元素,存在唯一一个被称做“最后一个”的元素,除        第一个之外,集合中的每个数据元素均只有一个前驱,除最后一个以外,每一个元素都只有一个直接后继。

2、非线性结构:一个数据元素可能有多个直接前趋和多个直接后继

1.3  数据结构的术语

逻辑(数据)结构:数据元素之间的逻辑关系

存储(物理)结构:数据结构在计算机中的表示

算法的设计取决于逻辑结构而算法的实现依赖于采用的存储结构

时间复杂度:定量描述了该算法的运行时间        n:元素的个数

时间复杂度的大小排序: O(1) 、O(log n)、O(n)、O(nlog n) 、O(n^2) 、O(n^3)、 O(2^n)

                                       O(1):字典取值 、list.pop()

                                       O(log n):二分查找

                                       O(n):遍历、list.get(index)

                                       O(nlog n):快速排序、归并排序

                                       O(n^2):冒泡、选择排序                             

空间复杂度:空间复杂度是指执行这个算法所需要的内存空间

2、线性表

2.1  线性表的逻辑结构

n个数据元素的有限序列  最常用  最简单

2.2  线性表的顺序存储

顺序表:一组地址连续的存储单元依次存储线性表的数据元素,即逻辑相邻的元素,物理位置上也必须相邻。只有数据域(储存数据元素信息的域)

用途:(1)需要根据序号进行随机查找的数据

            (2)数据定长的且所需内存不太大的数据

特点:地址连续,确定了起始位置,可以进行随机存取。增删慢,查找快

缺点:对于长度变化比较大的顺序表,起始预留空间必须按照最大空间分配,不能充分利用存储空间,扩容难

2.3  线性表的链式存储

链表:一组任意的存储单元存储线性表的数据元素,即逻辑相邻的元素,物理位置上可以相邻,也可以不相邻。由数据域和指针域(存储直接后继存储位置的域)组成

        用途:(1)不需要根据序号进行随机查找的数据

                    (2)数据是逐渐增加的或者不定长的

                    3希望每次添加数据、删除数据的动作的时间复杂度都是O(1)的

                (常量时间),即需要大量增删的数据

        特点:地址不连续,无法随机存取。增删快,查找慢

3.  栈和队列

3.1  栈

3.1.1  栈的特点

限定仅在表尾进行插入和删除操作的线性表,表尾称为栈顶,表头称为栈底,    不含元素的栈称为空栈,数据元素先进后,英文缩写FILO

3.1.2  栈的用途

用途:(1)JVM中用栈存储基本数据类型,指令代码,常量,和JVM堆中对象的引用         地址。     

      (2)动态地存储函数之间的关系,以保证被调用函数在返回                         时恢复到母函数中继续执行。

      (3)表达式求值和进制转换,主要使用在计算器上。

3.2  队列

3.2.1  队列的特点

限定仅在表尾进行插入和在表头进行删除操作的线性表,表尾称为队尾,表头称为队头,数据元素先进先出,英文缩写FIFO

3.2.2  队列的应用

异步处理:使用队列的一个主要原因是进行异步处理,比如用户注册成功后需要发送注册成功邮件/新用户积分/优惠券等等、缓存过期时先返回老的数据,然后异步更新缓存、异步写日志等;通过异步处理,可以提升主流程响应速度,而非主流程/非重要业务可以异步集中处理,这样还可以将任务聚合然后批量处理;因此可以使用消息队列/任务队列来进行异步处理。

系统解耦:比如用户成功支付完成订单后,需要通知生产配货系统、发票系统、库存系统、推荐系统、搜索系统、风控系统等进行业务处理;而未来需要添加/支持哪些业务是不清楚的,而且这些业务处理不需要实时处理、不需要强一致,只需要最终一致性即可,因此可以通过消息队列/任务队列进行系统解耦。

数据同步:比如想把MySQL变更的数据同步到Redis、或者将Mysql数据同步到MongoDB、或者机房间数据同步、或者主从数据同步等,此时可以考虑使用如databus、canal、otter。使用数据总线队列进行数据同步的好处是可以保证数据修改的有序性。

流量削峰:系统瓶颈一般在数据库上,比如扣减库存、下单等;此时可以考虑使用队列将变更请求暂时放入队列,通过缓存+队列暂存的方式将数据库流量削峰;还有如秒杀系统,下单服务会是该系统的瓶颈,此时会使用队列进行排队和限流,从而保护下单服务。通过队列暂存或者队列限流来削峰。

4.串

4.1  串的特点

串(字符串),是由零个或者多个字符组成的有限序列

4.2  串的应用

等同于python中的字符串的应用

5. 数组和广义表

5.1  数组

5.1.1  数组的特点

等同于java中的数组

5.1.2  数组的用途

(1)给定一组下标,存取相应的数据元素。

(2)给定一组下标,修改相应数据元素中的某一个或者几个数据项的值

(3)矩阵的压缩存储,节约内存空间

注:数组一般不进行插入或者删除操作,所以一般用顺序结构来存储数组

5.2  广义表

线性表的扩展,线性表只能存储原子数据,而广义表的数据元素可以是线性表。主要应用于人工智能领域的表处理语言LISP语言。由于广义表的数据元素可以具有不同的结构,所以一般使用链式存储

6.  树

n个节点的有限集,直观的看法,树是以分支关系定义的层次结构。

    用途:(1)人类社会中的族谱和各种社会机构组织

         (2)文件目录结构

6.1  二叉树

一种树结构,每个节点至多只有两个子树,且子树有左右子树之分,其次序不能随意颠倒

6.2  二叉查找树

又称二叉搜索树或二叉排序树或者B树,是最基本的查找树,是AVL树,红黑树等查找树的基础。

6.2.1  二叉查找树的特点

二叉查找树或者是一棵空树,或者是具有下列性质的二叉树:

(1)若左子树不空,则左子树上所有结点的值均小于或等于它的根结点的值;

(2)若右子树不空,则右子树上所有结点的值均大于或等于它的根结点的值;

(3)左、右子树也分别为二叉查找树;

6.2.2  二叉查找树的应用

基本不用最原始的二叉查找树,而使用比它性能更好的变种树等

6.3  B-树

6.3.1  B-树的特点

6.3.2  B-树的应用

主要用在文件系统

6.4  B+树

6.4.1  B+树的特点

  1.其定义基本与B-树同,除了:

       非叶子结点的子树指针与关键字个数相同;

       非叶子结点的子树指针P[i],指向关键字值属于[K[i], K[i+1])的子树

            (B-树是开区间);

       为所有叶子结点增加一个链指针;

       所有关键字都在叶子结点出现;

6.4.2   B+树的应用

用在文件系统,数据索引和数据库索引

6.4.3  B+树的优点

  1. B+-tree的磁盘读写代价更低

内部结点并没有指向关键字具体信息的指针。因此其内部结点相对B 树更小,可以有更多非叶子节点存放在再内存中,减少大量的IO

  1. B+-tree的查询效率更加稳定

由于非终结点并不是最终指向文件内容的结点,而只是叶子结点中关键字的索引。所以任何关键字的查找必须走一条从根结点到叶子结点的路。所有关键字查询的路径长度相同,导致每一个数据的查询效率相当。

  1. 方便扫库

B树必须用中序遍历的方法按序扫库,而B+树直接从叶子结点挨个扫一遍就完了

6.5  哈夫曼树

6.5.1  哈夫曼树的特点

给定n个权值作为n个叶子结点,构造一棵二叉树,若带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)

6.5.2  哈夫曼树的应用

哈夫曼编解码:用每个字母作为节点,用它们各自出现的频率作为权,构建一颗哈夫曼树,即可求得最短编码。

6.6  T树

6.6.1  T树的特点

T树是一个每个结点含有多个关键字的平衡二叉树,每个节点内的关键字有序排列,左子树都要比根节点关键字小,右子树都要比根节点关键字大。

6.6.2  T树的应用

T-tree是针对主存访问优化的索引技术,内存数据库中最主要的一种索引方式。

和B+树的区别:在无并发的情况下,T树的性能要优于B树,在有并发操作的情况下,B树的性能要好于T树

6.7  AVL树

6.7.1  AVL树的特点

它是平衡二叉树,平衡条件非常严格(树高差只有1),只要插入或删除不满足上面的条件就要通过旋转来保持平衡

6.7.2  AVL树的应用

插入删除次数比较少,但查找多的情况,windows对进程地址空间的管理应用了AVL

     

6.8  红黑树

6.8.1  红黑树的特点

是每个节点都带有颜色属性的二叉查找树,颜色或红色或黑色。在二叉查找树强制一般要求以外,对于任何有效的红黑树我们增加了如下的额外要求:

       1. 节点是红色或黑色。

       2. 根节点是黑色。

       3 每个叶节点(NIL节点,空节点)是黑色的。

       4 每个红色节点的两个子节点都是黑色。(从每个叶子到根的所有路径上不能有两个连续的红色节点)

       5. 从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。

       特点:从根到叶子的最长的可能路径不多于最短的可能路径的两倍长,树大致平衡

6.8.2  红黑树的应用

       1、在搜索时,插入删除次数多的情况下用红黑树来取代AVL

       2、著名的linux进程调度Completely Fair Scheduler,用红黑树管理进程控                        制块

       3、epoll在内核中的实现,用红黑树管理事件块

       4、nginx中,用红黑树管理timer等

       5、Java的TreeMap实现

       6、Mysql的索引

           

  1. 排序
    1. 快速排序
    2. 归并排序
    3. 插入排序
    4. 希尔排序
    5. 基数排序
    6. 堆排序

可以转化为树,再选择一种树来解决问题。

最常见问题:最短路径

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/797496.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

overleaf上踩的坑~

IEEE模板伪代码 问题: 格式显示不对,且 \\ 换行后不会自动标序号 解决办法: 在宏包中只保留 \usepackage[algo2e,linesnumbered,lined,boxed,commentsnumbered,ruled]{algorithm2e} 删除其他伪代码宏包: %\usepackage{algorith…

“嵌入式应用:超越想象的智能化时代“

从传统的家电如空调、电饭煲、电风扇到现代的智能手机、路由器、洗衣机,嵌入式技术无处不在。这些设备通过结合互联网和智能化功能,变得更加智能和便捷。例如,通过添加Wi-Fi模块,空调可以实现远程控制和预约开机功能。 嵌入式技术…

做独立站跨境出海,需要考虑哪些要素?

对于不少中小卖家而言,利用独立站出海已然成为下一个跨境热潮。但是采用独立站模式做出海生意前,卖家需要考虑哪些要素? 产品选择 对于国内的卖家来说,依托于国内强大的供应链优势,只要能把握住消费者心态,…

Linux 为什么还要坚持使用宏内核?

假如一家三口都生活在同一个房间,那么可以直接说话,对方都能听到,这样子效率就比较高。 假如一家三口都有自己的房间,那么对话时,一方就需要跑到对方的房间去了。这样子效率就会下降。 对于内核来说,第一…

PDF怎么转成Excel?4个方法非常实用!

如何使用记灵在线工具将PDF转成Excel?在日常工作中,我们经常需要转换PDF文件为Excel文件以方便我们处理数据。虽然PDF格式对于文本和图片的可视化效果效果不错,但是在处理数据时,Excel表格更加便捷。当我们将PDF文件转换成Excel文…

基于 STM32+FPGA 的通用工业控制器设计(一)系统方案设计

本章首先介绍了现有 PLC 系统的概况,然后提出了本文设计的通用工业控制器的 整体方案架构,分析了硬件和软件上需要实现的功能,最后对各部分功能进行分析并提 出具体的实现方案。 2.1 PLC 系统简介 可编程逻辑控制器( Progra…

linux----软连接和硬链接

介绍 # 文件分 文件名 inode信息:文件类型,大小,位置,时间 文件真正存储位置block# 软连接---》复制一份inode信息(win的快捷方式)软链接文件会将inode指向源文件的block,当我们访问这个软链接文件时,其实访问的是源文件本身…

数据决定AIGC的高度,什么又决定着数据的深度?

有人曾言,数据决定人工智能发展的天花板。深以为然。 随着ChatGPT等AIGC应用所展现出的强大能力,人们意识到通用人工智能的奇点正在来临,越来越多的企业开始涌入这条赛道。在AIGC浪潮席卷全球之际,数据的重要性也愈发被业界所认同…

使用ComPDFKit PDF SDK 构建iOS PDF阅读器

在当今以移动为先的世界中,为企业和开发人员创建一个iOS应用程序是必不可少的。随着对PDF文档处理需求的增加,使用ComPDFKit这个强大的PDF软件开发工具包(SDK)来构建iOS PDF阅读器和编辑器可以让最终用户轻松查看和编辑PDF文档。 …

嵌入式行业真的没前途吗?

就嵌入式而言,需要学的东西比较多。linux底层驱动的了解,单片机底层驱动开发、RTOS、bootloader、应用层开发(MBD)、各种标准、服务、协议等等,还要懂一些硬件,看得懂硬件原理图,最好自己能画板…

【业务功能篇53】Springboot 数据封装对象

Entity、VO、DTO解释 1)Entity:实体,与数据库的每一行数据打交道的,它的属性对应数据库每个字段 class User{ private Long idCard; private String name; private Date birthday; ...... } 对应数据库的id,name&…

VMware虚拟机安装VMware tools

一、挂载光驱 执行以下命令来创建 /mnt/cdrom 目录: mkdir -p /mnt/cdrom-p 参数会确保如果 /mnt/cdrom 的上级目录(例如 /mnt)不存在的话也会被创建。 然后,你可以再次尝试挂载光盘: mount /dev/sr0 /mnt/cdrom这次…

DragGAN:用崭新的方式进行图像处理

该项目的论文被SIGGRAPH 2023 收录,论文以 StyleGAN2 架构为基础,实现了 “Drag” 关键点就能轻松 P 图的效果。 https://github.com/XingangPan/DragGAN https://vcai.mpi-inf.mpg.de/projects/DragGAN/ 目录 原图1测试一测试二测试三 原图2测试一测试…

基于Java+SpringBoot+vue前后端分离师生健康信息管理系统设计实现

博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…

数据结构 | 基本数据结构——栈

目录 一、线性数据结构 二、栈 2.1 何谓栈 2.2 栈抽象数据类型 2.3 用Python实现栈 2.4 匹配括号 2.5 普通情况:匹配符号 2.6 将十进制数转换成二进制数 3.7 前序、中序和后序表达式 3.7.1 从中序到后序的通用转换法 3.7.2 计算后序表达式 一、线性数据结…

Docker 镜像操作

Docker镜像操作 我们已经介绍了容器操作,今天来了解下 Docker镜像 以及 镜像操作 。让我们一起开启镜像之旅吧。 Docker镜像 镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时、库…

QML 往图表添加文字显示

需求: 需要在图表的某几个点上,添加相应的文字显示。效果如下: 主要是,如何将坐标进行转化为图表的相对坐标,然后动态创建文本后,将转换坐标设置到Text中。 演示demo。需要点击Text按钮后,图表显示。 impo…

如何为WordPress博客网站配置自己购买的域名,并且公网可访问?

文章目录 如何为WordPress博客网站配置自己购买的域名,并且公网可访问?前置条件:具体操作步骤如下:步骤1: 后台预留自定义域名步骤2: 配置您的域名DNS解析步骤3: 测试域名解析步骤4: 在前台终端测试运行步骤4: 修改cpolar配置文件…

等保测评需要做几次?做一次以后还需要做吗?

虽然我国等保政策已经严格落地执行了,但不少企业对于等保测评相关政策还不是很了解,有人在问,等保测评需要做几次?做一次以后还需要做吗?今天我们就来简单回答一下吧! 等保测评需要做几次?做一…

【无公网IP】在公网环境下Windows远程桌面Ubuntu 18.04

文章目录 一、 同个局域网内远程桌面Ubuntu1. 更新软件仓库2. 安装支持包3. 安装XFCE4桌面环境4. 安装XRDP5. 环境设置5.1 XFCE桌面配置5.2 在配置文件中,加入XFCE会话 6 重启服务7. 查看IP地址8. 使用Windows远程桌面连接 二、公网环境系统远程桌面Ubuntu1. 注册cp…