数据结构期末总结

本文介绍了数据结构的基本概念,包括逻辑结构、物理结构和数据运算,详细阐述了线性表、栈、队列、数组、树和二叉树等常见数据结构,以及它们的存储方式和操作。此外,还讨论了算法的特性、效率分析和不同数据结构在实际问题中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据结构绪论

数据结构的概念

  • 数据结构 : 数据结构是相互之间存在一种或多种特定关系的数据元素的集合
  • 数据结构研究的问题 :数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象以及它们之间的关系和操作等的学科
  • 抽象数据类型ADT: 定义ADT格式不唯一 在这里插入图片描述
  • 例题 在这里插入图片描述
    在这里插入图片描述

数据结构的三要素

  • 逻辑结构:是对元素之间的逻辑关系
  • 物理结构:是数据结构在计算机中的表示和实现,又称“存储结构
  • 数据的运算:施加在数据上的运算包括运算的定义和实现。运算的定义是针对逻辑结构的,运算的实现是针对存储结构的。 在这里插入图片描述
  • 例题 在这里插入图片描述
  • 逻辑结构的四大分类: 根据数据元素之间关系的不同特性,分为集合、线性结构、树状结构、图状或网状结构。 在这里插入图片描述
  • 储存结构:数据的存储结构又称为物理结构。在物理结构表示数据结构中,主要研究数据元素的存储和关系存储,别称为数据元素的映像关系的映像
  • 物理结构:对于任意一个关系,可分为顺序存储、链式存储、索引存储、散列存储 在这里插入图片描述
  • 例题 在这里插入图片描述
    在这里插入图片描述

在C语言中的数据类型

在这里插入图片描述

  • 数组:有序的元素序列 在这里插入图片描述

  • 指针:一个变量的地址就称为该变量的指针。 指针就是地址,而地址就是内存单元的编号。

  • 取地址符&:取变量地址的符号。

  • 结构体:结构体就是将不同类型的数据组合合成一个有机的整体,以便于引用。

算法与算法分析

  • 算法的五大重要特性
    1、有穷性:一个算法必须总是有穷的。
    2、确定性:每一条指令必须有确切的含义。
    3、可行性
    4、输入
    5、输出
  • 例题 在这里插入图片描述

1、算法设计的要求
1、正确性
2、可读性
3、健壮性
4、效率与存储量需求

2、算法效率的度量
时间复杂度:一个语句的频度是指该语句在算法被重复执行的次数。T(n)=O(f(n))
空间复杂度:一个语句的频度是指该语句在算法被重复执行的次数。S(n)=O(f(n))
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 六种常用算法时间复杂度的大小比较
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

线性表

线性表的定义

基本概念:是一个有限序列,表中各个元素是相继排列的,且每两个相邻元素之间都有直接前驱和直接后继的逻辑关系。在这里插入图片描述
在这里插入图片描述
线性表的四大特点
1、存在唯一的第一个元素和最后一个元素。
2、除第一个元素外,其它元素有且仅有一个直接前驱;第一个元素没有直接前驱。
3、除最后一个元素外,其它元素有且仅有一个直接后继;最后一个元素没有直接后继。
4、线性表中的每一个元素都具有相同的数据类型,且不能按子表那样再分割。
在这里插入图片描述

顺序表

顺序表的定义和特点
在这里插入图片描述

单链表

当一个序列中只含有指向它的后继结点的链接时,就称该链表为单链表。
在这里插入图片描述
带头结点的单链表
头指针head指向头结点,头结点的值域不含任何信息,从头结点的后继结点开始存储数据信息。
头指针head始终不等于NULL,head->next等于NULL时,链表为空。
不带头结点的单链表
头指针head直接指向开始结点。
当head等于NULL时,链表为空。
链表是一个动态的结构,不需要分配空间。
在这里插入图片描述
单链表的插入
表头插入
在这里插入图片描述
表间插入
在这里插入图片描述
表头删除
在这里插入图片描述
表间删除
在这里插入图片描述头插法
在这里插入图片描述
尾插法
在这里插入图片描述

循环链表和双向链表

循环链表
最后一个结点的指针域的指针又指回第一个结点的链表。
和单链表的差别在于,判别链表中最后一个结点的条件不再是“后继是否为空”而是“后继是否为头结点”。
双向链表
每个数据结点都有两个指针,分别指向直接后继和直接前驱。
在这里插入图片描述
可以进行随机访问是顺序表
静态链表
借助数组来描述线性表的链式存储结构,这里的指针是结点的相对地址(数组下标)。
与顺序表一样,静态链表需要预先分配一块连续的存储空间。
总结
在这里插入图片描述
在这里插入图片描述

栈和队列

:先进后出
栈的插入:push()在栈顶插入元素
栈的删除:pop()在栈顶移除一个元素,栈数-1

队列

链队列:用链表表示的队列称为链队列。一个链队列显然需要两个分别指示对头和队尾的指针才能唯一确定。
在这里插入图片描述
循环队列:在顺序队列中,当队尾指针已经到数组的上界,不能再有入队操作,但其实数组中还有空位置,这就叫做“假溢出”,解决假溢出的途径----采用循环队列。
在这里插入图片描述
循环队列与循环链表的区别:队列(包括循环队列)是一个逻辑概念,而链表是一个存储概念。一个队列是否是循环队列,不取决于它将采用何种存储结构,根据实际的需要,循环列队可以采用顺序存储结构,也可以采用链式存储结构,包括采用循环链表作为存储结构。
在这里插入图片描述
在这里插入图片描述
简述栈和线性表的差别
线性表是具有相同特性的数据元素的一个有限序列。
栈是限定仅在表尾进行插入和删除操作的线性表。

数组

数组的类型定义

一维数组:相同类型的数据元素的集合。
二维数组在这里插入图片描述

数组的顺序表示和实现

矩阵的压缩存储
在数值分析中经常出现一些阶数很高的矩阵,同时在矩阵中有许多值相同的元素,或者是零元素。有时为了节省存储空间,可以对这类矩阵进行压缩存储。
假若值相同的元素或者零元素在矩阵中是分布有一定规律,则我们称此类矩阵为特殊矩阵;反之,称为稀疏矩阵。
在这里插入图片描述
数据的顺序存储结构
为节约存储空间,值存对角线及对角线以上的元素,或者只存对角线及对角线以下的元素。前者称为上三角矩阵,后者称为下三角矩阵。
把它们按行存放于一个一维数组B中,称之为对称矩阵A的压缩存储方式。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
三对角矩阵的压缩储存
三对角矩阵中除对角线及在主对角先上下最临近的两条对角线上的元素外,所有其他元素均为0。总共有3n-2个非零元素。

稀疏矩阵的压缩存储

稀疏矩阵:非零元素个数远远少于矩阵元素个数且分布无规律可循。

树与二叉树

树的基本概念

树的定义:树是N(N>=0)个结点的有限集合。
N=0时,称为空树。
任意一棵非空数应满足
(1)有且仅有一个特定的称为的结点。
(2)当N>1时,其余结点可分为m(m>0)个互不相交的有限集合T1,T2,…,Tm,其中每个集合本身又是一棵树,称为根结点的子树
树的特点:树是一种递归的数据结构:
(1)除根结点外的所有结点有且仅有一个前驱结点。
(2)树中的所有结点可以有零个或多个后继结点。
在这里插入图片描述
结点的度:树中的一个结点的子结点个数称为该结点的度。
在这里插入图片描述

树的度:树中结点最大度称为树的度。
分支结点:度大于0的结点。
叶子结点:度为0的结点。
结点的层次:从根开始定义,根结点为第二层,依此类推。
结点的深度:从根结点开始自顶向下逐层累加。
结点的高度:从叶结点开始自低向上逐层累加。
树的高度树结点的最大层数。
有序树:树中的结点子树从左到右是有次序的,不能交换。
无序树:数中结点的子树从左到右没有次序的,可以交换。
路径:树中两个结点之间的路径是由这两个结点之间所经过的结点序列构成的。
路径长度:路径上所经过的边的个数。
在这里插入图片描述
在这里插入图片描述
树的性质
在这里插入图片描述

二叉树

二叉树的定义:两个限制条件:
1、每个结点最多有两棵树。
2、子树有左右顺序之分,不能颠倒。
满二叉树
在这里插入图片描述
完全二叉树
在这里插入图片描述
二叉排序树:一棵二叉树或空二叉树,具有如下性质:
左子树上所有结点的关键字均小于根结点的关键字。
右子树上所有结点的关键字均大于根结点的关键字。
平衡二叉树:树上任一结点的左子树和右子树的深度之差不超过1。
二叉树的性质在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
二叉树的储存结构
1、顺序存储:即用一个数组来存储一棵二叉树。
最适用于完全二叉树满二叉树,用于储存一般二叉树会浪费大量的存储空间。
2、链式存储:
在这里插入图片描述
在这里插入图片描述
线序遍历在这里插入图片描述
中序遍历在这里插入图片描述
后序遍历在这里插入图片描述
递归算法和非递归算法的转换
在这里插入图片描述
层次遍历在这里插入图片描述
在这里插入图片描述
线索二叉树
在这里插入图片描述
线索二叉树的构造
对二叉树线索化,实质上就是遍历一次二叉树。
在遍历过程中,检查当前节点左、右指针域是否为空,若为空,将它们改为指向前驱结点或后继结点的线索。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述排序二叉树的定义
在这里插入图片描述
排序二叉树的查找:从根结点开始,沿某一个分支逐层向下进行比较。
若二叉树非空,将给定值与根结点的关键字比较,若相等,则查找成功;若不等,侧当根结点的关键字大于给定关键字时,在根结点的左子树中查找,否则在根结点的右子树查找。
排序二叉树的插入:原二叉树排序树为空,则直接插入结点;
否则,若关键字k小于根结点关键字,则插入到左子树中,若关键字k大于根结点关键字,则插入到右子树中。

排序二叉树的构造
每读入一个元素,就建立一个新的结点,若二叉排序树非空,则将新结点的汉字与根结点的值比较,如果小于根结点的值,则插入左子树中,否侧插入右子树;若二叉排序树为空,侧新结点作为二叉排序树的根结点。
排序二叉树的删除
1、如果被删除结点z是叶节点,则直接删除,不会破坏二叉排序树的性质。
2、若结点z只有一棵左子树或右子树,则让z的子树成为z父节点的子树,替代z的位置。
3、若结点z有左、右两棵子树,则令z的直接后继(或直接前驱)替代z,然后从二叉排序树中删除这个直接后继(或直接前驱)。
平衡二叉树的定义:在插入和删除二叉树结点是,保证任意结点的左、右子树的高度差的绝对值不超过1,这样的二叉树称为平衡二叉树。
结点左子树与右子树的高度差为该节点的平衡因子,则平衡二叉树结点的平衡因子的值只可能是-1、0或1。
平衡二叉树的插入
1、LL(左)平衡旋转
2、RR(右)平衡旋转
3、LR(左右)平衡旋转
4、RL(右左)平衡旋转
平衡二叉树的查找
在这里插入图片描述
哈夫曼树的定义
在含有N个带权叶子结点的二叉树中,其中带权路径长度(WPL)最小的二叉树称为哈夫曼树,也称为最优二叉树。
哈夫曼树的构造
在这里插入图片描述
哈夫曼树的特点
1、权值越大的结点,距离根结点越近。
2、树中没有度为1的结点。
3、树的带权路径长度最短。

树、森林

森林的定义
森林:是m(m>=0)棵互不相交的树的集合。
只要把树的根结点删除就成了森林。
顺序储存结构
在这里插入图片描述
链式存储结构
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

数、二叉树、森林互转
在这里插入图片描述
在这里插入图片描述
二叉树的遍历
在这里插入图片描述

图的基本概念

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

图的遍历

深度优先
在这里插入图片描述

广度优先
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

图的基本应用

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

如题,也是在优快云下载的,传到自己这里用起来比较方便一些。附录a-1 立项建议书.doc附录a-2 立项调查报告.doc附录a-3 立项可行性分析报告.doc附录a-4 立项评审报告.doc附录b-1 结项申请书.doc附录b-2 结项评审报告.doc附录c-1 项目估计表.doc附录c-2 项目计划.doc附录c-3 项目计划变更控制报告.doc附录d-1 项目监控数据表.doc附录d-2 项目偏差控制报告.doc附录d-3 项目进展报告.doc附录e-1 风险检查表.doc附录e-2 风险管理报告.doc附录f-1 需求跟踪报告.doc附录f-2 需求变更控制报告.doc附录g-1 用户需求说明书.doc附录g-2 产品需求规格说明书.doc附录h-1 技术预研计划.doc附录h-2 技术预研报告.doc附录i-1 体系结构设计报告.doc附录i-2 用户界面设计.doc附录i-3 数据库设计报告.doc附录i-4 模块设计报告.doc附录j-1 实现与测试计划.doc附录j-2 编程文档.doc附录k-1 系统测试计划.doc附录k-2 测试用例.doc附录k-3 测试报告.doc附录l-1 beta测试协议.doc附录l-2 beta测试报告.doc附录m-1 客户验收计划.doc附录m-2 客户验收报告.doc附录n-1 技术评审计划.doc附录n-2 技术评审通知.doc附录n-3 技术评审报告.doc附录n-4 技术评审检查表.doc附录o-1 配置管理计划.doc附录o-2 配置库管理报告.doc附录o-3 配置项变更控制报告.doc附录p-1 质量保证计划.doc附录p-2 质量保证检查表.doc附录p-3 质量保证报告.doc附录p-4 质量问题跟踪表.doc
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值