数据结构期末总结

数据结构绪论

数据结构的概念

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

数据结构的三要素

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

在C语言中的数据类型

数据结构期末总结_第10张图片

  • 数组:有序的元素序列 数据结构期末总结_第11张图片

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

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

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

算法与算法分析

  • 算法的五大重要特性
    1、有穷性:一个算法必须总是有穷的。
    2、确定性:每一条指令必须有确切的含义。
    3、可行性
    4、输入
    5、输出
  • 例题 数据结构期末总结_第12张图片

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

2、算法效率的度量
时间复杂度:一个语句的频度是指该语句在算法被重复执行的次数。T(n)=O(f(n))
空间复杂度:一个语句的频度是指该语句在算法被重复执行的次数。S(n)=O(f(n))
数据结构期末总结_第13张图片
数据结构期末总结_第14张图片
数据结构期末总结_第15张图片
数据结构期末总结_第16张图片
数据结构期末总结_第17张图片
数据结构期末总结_第18张图片

  • 六种常用算法时间复杂度的大小比较
    数据结构期末总结_第19张图片

数据结构期末总结_第20张图片
数据结构期末总结_第21张图片

线性表

线性表的定义

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

顺序表

顺序表的定义和特点
数据结构期末总结_第25张图片

单链表

当一个序列中只含有指向它的后继结点的链接时,就称该链表为单链表。
数据结构期末总结_第26张图片
带头结点的单链表
头指针head指向头结点,头结点的值域不含任何信息,从头结点的后继结点开始存储数据信息。
头指针head始终不等于NULL,head->next等于NULL时,链表为空。
不带头结点的单链表
头指针head直接指向开始结点。
当head等于NULL时,链表为空。
链表是一个动态的结构,不需要分配空间。
数据结构期末总结_第27张图片
单链表的插入
表头插入
数据结构期末总结_第28张图片
表间插入
数据结构期末总结_第29张图片
表头删除
数据结构期末总结_第30张图片
表间删除
数据结构期末总结_第31张图片头插法
数据结构期末总结_第32张图片
尾插法
数据结构期末总结_第33张图片

循环链表和双向链表

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

栈和队列

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

队列

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

数组

数组的类型定义

一维数组:相同类型的数据元素的集合。
二维数组数据结构期末总结_第41张图片

数组的顺序表示和实现

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

稀疏矩阵的压缩存储

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

树与二叉树

树的基本概念

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

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

二叉树

二叉树的定义:两个限制条件:
1、每个结点最多有两棵树。
2、子树有左右顺序之分,不能颠倒。
满二叉树
数据结构期末总结_第49张图片
完全二叉树
数据结构期末总结_第50张图片
二叉排序树:一棵二叉树或空二叉树,具有如下性质:
左子树上所有结点的关键字均小于根结点的关键字。
右子树上所有结点的关键字均大于根结点的关键字。
平衡二叉树:树上任一结点的左子树和右子树的深度之差不超过1。
二叉树的性质数据结构期末总结_第51张图片
数据结构期末总结_第52张图片
数据结构期末总结_第53张图片
二叉树的储存结构
1、顺序存储:即用一个数组来存储一棵二叉树。
最适用于完全二叉树满二叉树,用于储存一般二叉树会浪费大量的存储空间。
2、链式存储:
数据结构期末总结_第54张图片
数据结构期末总结_第55张图片
线序遍历数据结构期末总结_第56张图片
中序遍历数据结构期末总结_第57张图片
后序遍历数据结构期末总结_第58张图片
递归算法和非递归算法的转换
数据结构期末总结_第59张图片
层次遍历数据结构期末总结_第60张图片
数据结构期末总结_第61张图片
线索二叉树
数据结构期末总结_第62张图片
线索二叉树的构造
对二叉树线索化,实质上就是遍历一次二叉树。
在遍历过程中,检查当前节点左、右指针域是否为空,若为空,将它们改为指向前驱结点或后继结点的线索。
数据结构期末总结_第63张图片
数据结构期末总结_第64张图片
数据结构期末总结_第65张图片排序二叉树的定义
数据结构期末总结_第66张图片
排序二叉树的查找:从根结点开始,沿某一个分支逐层向下进行比较。
若二叉树非空,将给定值与根结点的关键字比较,若相等,则查找成功;若不等,侧当根结点的关键字大于给定关键字时,在根结点的左子树中查找,否则在根结点的右子树查找。
排序二叉树的插入:原二叉树排序树为空,则直接插入结点;
否则,若关键字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(右左)平衡旋转
平衡二叉树的查找
数据结构期末总结_第67张图片
哈夫曼树的定义
在含有N个带权叶子结点的二叉树中,其中带权路径长度(WPL)最小的二叉树称为哈夫曼树,也称为最优二叉树。
哈夫曼树的构造
数据结构期末总结_第68张图片
哈夫曼树的特点
1、权值越大的结点,距离根结点越近。
2、树中没有度为1的结点。
3、树的带权路径长度最短。

树、森林

森林的定义
森林:是m(m>=0)棵互不相交的树的集合。
只要把树的根结点删除就成了森林。
顺序储存结构
数据结构期末总结_第69张图片
链式存储结构
数据结构期末总结_第70张图片
数据结构期末总结_第71张图片
数据结构期末总结_第72张图片

数、二叉树、森林互转
数据结构期末总结_第73张图片
数据结构期末总结_第74张图片
二叉树的遍历
数据结构期末总结_第75张图片

图的基本概念

数据结构期末总结_第76张图片
数据结构期末总结_第77张图片

数据结构期末总结_第78张图片
数据结构期末总结_第79张图片
数据结构期末总结_第80张图片
数据结构期末总结_第81张图片
在这里插入图片描述
数据结构期末总结_第82张图片
数据结构期末总结_第83张图片
数据结构期末总结_第84张图片
数据结构期末总结_第85张图片
数据结构期末总结_第86张图片
数据结构期末总结_第87张图片

图的遍历

深度优先
数据结构期末总结_第88张图片

广度优先
数据结构期末总结_第89张图片
数据结构期末总结_第90张图片

数据结构期末总结_第91张图片
数据结构期末总结_第92张图片

图的基本应用

数据结构期末总结_第93张图片
数据结构期末总结_第94张图片
数据结构期末总结_第95张图片
数据结构期末总结_第96张图片
在这里插入图片描述
数据结构期末总结_第97张图片
数据结构期末总结_第98张图片
数据结构期末总结_第99张图片
数据结构期末总结_第100张图片
数据结构期末总结_第101张图片
数据结构期末总结_第102张图片
数据结构期末总结_第103张图片
数据结构期末总结_第104张图片
数据结构期末总结_第105张图片
数据结构期末总结_第106张图片
数据结构期末总结_第107张图片
数据结构期末总结_第108张图片
数据结构期末总结_第109张图片
数据结构期末总结_第110张图片
数据结构期末总结_第111张图片
数据结构期末总结_第112张图片
数据结构期末总结_第113张图片
数据结构期末总结_第114张图片

你可能感兴趣的:(数据结构)