数据结构总结.docx
- 文档编号:4552251
- 上传时间:2022-12-06
- 格式:DOCX
- 页数:13
- 大小:45.02KB
数据结构总结.docx
《数据结构总结.docx》由会员分享,可在线阅读,更多相关《数据结构总结.docx(13页珍藏版)》请在冰豆网上搜索。
数据结构总结
数据结构总结
「考查目标」
1.理解数据结构的基本概念;掌握数据的逻辑结构、存储结构及其差异,以及各种基本操作的实现。
2.掌握基本的数据处理原理和方法的基础上,能够对算法进行设计与分析。
3.能够选择合适的数据结构和方法进行问题求解。
第一章绪论
(一)基本概念
1数据结构(DataStructure):
是相互之间存在一种或多种特定关系的数据元素的集合。
2数据结构的三个方面的含义:
1)数据的逻辑结构,只抽象反映数据元素的逻辑关系,与数据存储无关,独立于计算机;
2)数据的存储结构,数据的逻辑结构在计算机存储器中的实现,是逻辑结构用计算机语言的实现,它依赖于计算机语言。
分为顺序存储结构和链式存储结构。
3)数据的运算,定义在逻辑结构上,每种逻辑结构都有一个运算集合。
常用的运算:
检索/插入/删除/更新/排序。
3根据数据元素间关系的基本特性,有四种基本数据结构:
集合——数据元素间除“同属于一个集合”外,无其它关系
线性结构:
一个对一个,如线性表、栈、队列
树形结构:
一个对多个,如树
图状结构:
多个对多个,如图
4数据类型:
一个值的集合及在值上定义的一组操作的总称。
分为:
原子类型和结构类型。
5抽象数据类型:
抽象数据的组织和与之相关的操作。
优点:
将数据和操作封装在一起实现了信息隐藏。
6抽象数据类型ADT:
是在概念层上描述问题;类:
是在实现层上描述问题;在应用层上操作对象(类的实例)解决问题。
(二)算法的概念
所谓算法(Algorithm)是描述计算机解决给定问题的操作过程(解题方法),即为解决某一特定问题而由若干条指令组成的有穷序列。
一个算法必须满足以下五个准则:
(1)有穷性---执行了有限条指令后一定要终止。
(2)确定性(无二义)---算法的每一步操作都必须有确切定义,不得有任何歧义性。
(3)可行性---算法的每一步操作都必须是可行的,即每步操作均能在有限时间内完成。
(4)输入数据---一个算法有n(n>=0)个初始数据的输入。
(5)输出数据---一个算法有一个或多个与输入有某种关系的有效信息的输出。
(三)对算法进行简单分析的评价准则
算法的评价准则
首先,算法必须是“正确”的,其次:
(1)执行算法所耗费的时间(效率要高)。
(2)执行算法所耗费的存储空间(主要考虑辅存空间;低存储要求)。
(3)算法的可读性、易维护性要好(易于理解,易于编码,易于调试)。
(四)什么是问题的规模?
时间复杂度?
渐近时间复杂度?
(1)问题的规模(size)---算法求解问题的输入量(或初始数据量)。
不考虑机器软硬件环境时算法的时间耗费:
设:
执行每条语句所需时间为单位时间,则:
一个算法耗费的时间=所有语句的频度之和。
(2)时间复杂度T(n)---时间耗费,它是算法求解问题n的函数。
(3)渐近时间复杂度---即当问题的规模n→∞时的时间复杂度T(n)的数量级(阶),记作:
T(n)=O(f(n))
****评价一个算法的时间性能,主要标准是算法的渐近时间复杂度
第二章线性表
(一)线性表的定义和基本操作P18-P19
线性表:
是由n(n>=0)个数据元素(结点)a1,a2,a3,……an组成的有限序列。
基本操作:
(1)存取;
(2)插入;(3)删除;(4)查找;(5)合并;(6)分解
(7)排序;(8)求线性表的长度
(二)线性表的实现
1.顺序存储结构
顺序表的描述:
Fig2-1
//…线性表的动态分配顺序存储结构…//
#defineList_INIT_SIZE100//线性表存储空间的初始分配量。
#defineLISTINCREMENT10//线性表存储空间的分配增量
typedefstruct{
ElemType*elem;//分配空间基址
intLenth;//当前长度
intListsize;//当前分配的存储容量(以sizeof(ElemType)为单位)
}Sqlist;
1)在顺序表中实现插入算法的思想、算法和求T(n)的方法。
算法思想:
Fig2-2
若i=n+1,则将x插入到表尾;
若表长度n<0或插入位置不适当,则输出错误信息,并返回-1;
当1<=I<=n时,则从表尾开始到I个依次向后移动一个位置(共需移动n-I+1个数据元素)。
最后将x存入v[I]中,表长n增1插入成功,函数返回值为0。
算法和求T(n)的方法:
P24
2)在顺序表中实现删除算法的思想、算法和求T(n)的方法。
算法思想:
若i=n,只需删除终端结点,不用移动结点;
若表长度n<=0或删除位置不适当,则输出错误信息,并返回-1;
当1<=I 最后将表长n减1,删除成功,函数返回值为0。 算法和求T(n)的方法: P24 2.链式存储结构 1)单链表: 只有一个链域的链表称单链表。 链式存储结构定义 typedefstructLNode{//Fig2-3 ElemTypedata; structLNode*next; }LNode,*LinkList; 单链表的基本运算: PPT33-53 建立单链表(头插法建表、尾插建表法); 查找运算(按序号查找、按值查找); 插入运算(后插操作、前插操作Fig2-4); 删除运算 注意: 带头结点的单链表 对链表设置头结点的作用: (1)对带头结点的链表,在表的任何结点之前插入结点或删除表中任何结点,所要做的都是修改前一结点的指针域,因为任何元素结点都有前驱结点。 若链表没有头结点,则首元素结点没有前驱结点,在其前插入结点或删除该结点时操作会复杂些。 (2)对带头结点的链表,表头指针是指向头结点的非空指针,因此空表与非空表的处理是一样的。 2)循环链表、双向链表PPT54-57 3.线性表的应用--一元多项式的表示及相加(了解) 第三章栈、队列 (一)栈 1.栈的基本概念 栈是限制仅在表的一端进行插入和删除运算的线性表又称为后进先出表(LIFO表)。 插入、删除端称为栈顶,另一端称栈底。 表中无元素称空栈。 2.栈的存储结构 顺序栈Fig3-1 链栈Fig3-2 3.栈的基本运算: 1)initstack(s),构造一个空栈; 2)stackempty(s),判栈空; 3)stackfull(s),判栈满; 4)push(s,x),进栈; 5)pop(s),退栈; 6)GetTop(s),取栈顶元素。 (二)队列 1队列的基本概念 队列是一种运算受限的线性表,允许删除的一端称队首,允许插入的一端称队尾。 队列又称为先进先出线性表,FIFO表。 2队列的存储结构 链式存储Fig3-3 顺序存储结构-循环队列Fig3-4 3.队列的基本运算: 1)initqueue(q),置空队; 2)queueempty(q),判队空; 3)queuefull(q),判队满; 4)enqueue(q,x),入队/插入; 5)dequeue(q),出队/删除; 6)queuefront(q),返回队头元素。 (三)了解栈和队列的应用 第四章串 (一)基本概念 1.串: 是由零个或多个字符组成的有限序列;包含字符的个数称串的长度; 2.空串: 长度为零的串称空串; 3.空格串: 仅由空格组成的的串; 4.串的长度: 串中字符的数目n (二)串的3种机内表示方式: 1定长顺序存储表示(静态存储)-用一组地址连续的存储单元存储串值的字符序列。 2堆分配存储表示(动态存储)-以一组地址连续的存储单元存放串值字符序列,但它们的存储空间是在程序执行过程中动态分配的。 3串的块链存储表示(动态存储)-串的链式存储结构中每个结点包含字符域和结点链接指针域,字符域用于存放字符,指针域用于存放指向下一个结点的指针,因此,串可用单链表表示。 (三)串的基本运算 Index(StringS,StringT,intpos)//定位 Concat(&T,S1,S2)//串连接 SubString(&Sub,S,pos,len)//求子串 strassign(hstringt,char*chars)//生成一个值等于串常量chars的串T Replace(Stringtype&S,StringtypeT,StringtypeV)//替换 第六章树与二叉树 (一)树的概念 树(tree)是n(n>0)个结点的有限集T,其中: (1)有且仅有一个特定的结点,称为树的根(root) (2)当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1,T2,……Tm,其中每一个集合本身又是一棵树,称为根的子树(subtree) 基本术语 结点、结点的度、 叶子、孩子、双亲、兄弟、 树的度、结点的层次、深度、森林 (二)二叉树 1.二叉树的定义及其主要二叉树性质 定义: 二叉树是n(n0)个结点的有限集,它或为空树(n=0),或由一个根结点和两棵分别称为左子树和右子树的互不相交的二叉树构成 二叉树性质及其证明: 1) 2)深度为k的二叉树至多有 个结点(k1) 3)对任何一棵二叉树T,如果其终端结点/叶子数为n0,度为2的结点数为n2,则n0=n2+1 4)具有n个结点的完全二叉树的深度为 5)如果对一棵有n个结点的完全二叉树的结点按层序编号,则对任一结点i(1in),有: (1)如果i=1,则结点i是二叉树的根,无双亲;如果i>1,则其双亲是i/2 (2)如果2i>n,则结点i无左孩子;如果2in,则其左孩子是2i (3)如果2i+1>n,则结点i无右孩子;如果2i+1n,则其右孩子是2i+1 2.二叉树的顺序存储结构和链式存储结构 顺序存储结构: 按满二叉树的结点层次编号,依次存放二叉树中的数据元素 链式存储结构: Fig6-1 在二叉树中所有类型为BiTNode的结点和一个指向开始结点的*BiTree类型的头指针构成二叉树的链式存储结构称二叉链表。 二叉链表由根指针唯一确定。 在n个结点的二叉链表中有2n个指针域,其中n+1个为空。 3.二叉树的遍历以及应用PPT26-47 前序遍历、中序遍历、后序遍历。 时间复杂度为O(n) 4.线索二叉树的基本概念和构造 线索二叉树: 利用二叉链表中的n+1个空指针域存放指向某种遍历次序下的前趋和后继结点的指针,这种指针称线索。 加线索的二叉链表称线索链表。 相应二叉树称线索二叉树。 构造: Fig6-2 了解遍历中序线索二叉树 (三)树、森林 1.树的存储结构 (1)双亲链表表示法: 为每个结点设置一个parent指针,就可唯一表示任何一棵树。 Data|parent (2)孩子链表表示法: 为每个结点设置一个firstchild指针,指向孩子链表头指针,链表中存放孩子结点序号。 Data|firstchild。 (3)双亲孩子链表表示法: 将以上方法结合。 Data|parent|firstchild (4)孩子兄弟链表表示法: 附加两个指向左孩子和右兄弟的指针。 Leftmostchild|data|rightsibling 2.森林与二叉树的转换(了解) (1)树、森林与二叉树的转换 1)树与二叉树的转换: 1}所有兄弟间连线;2}保留与长子的连线,去除其它连线。 该二叉树的根结点的右子树必为空。 2)森林与二叉树的转换: 1}将所有树转换成二叉树;2}将所有树根连线。 (2)二叉树与树、森林的转换。 是以上的逆过程。 3.树和森林的遍历 前序遍历一棵树等价于前序遍历对应二叉树; 后序遍历等价于中序遍历对应二叉树。 (四)树的应用 哈夫曼(Huffman)树和哈夫曼编码PPT73-88 第七章图 (一)图的概念 1.图: 图G是由顶点集V和边集E组成,顶点集是有穷非空集,边集是有穷集; 2.G中每条边都有方向称有向图;有向边称弧;边的始点称弧尾;边的终点称弧头;G中每条边都没有方向的称无向图。 3.顶点n与边数e的关系: 无向图的边数e介于0~n(n-1)/2之间,有n(n-1)/2条边的称无向完全图;有向图的边数e介于0~n(n-1)之间,有n(n-1)条边的称有向完全图; 4.无向图中顶点的度是关联与顶点的边数;有向图中顶点的度是入度与出度的和。 所有图均满足: 所有顶点的度数和的一半为边数。 5.图G(V,E),如V’是V的子集,E’是E的子集,且E’中关联的顶点均在V’中,则G’(V’,E’)是G的子图。 6.在无向图中,任意两个顶点都有路径连通称连通图;极大连通子图称连通分量; 7.在有向图中,任意顺序两个顶点都有路径连通称强连通图;极大连通子图称强连通分量; 8.将图中每条边赋上权,则称带权图为网络。 (二)图的存储及基本操作 1.邻接矩阵法--邻接矩阵是表示顶点间相邻关系的矩阵。 n个顶点就是n阶方阵。 无向图是对称矩阵;有向图行是出度,列是入度。 定义: 设G=(V,E)是有n1个顶点的图,G的邻接矩阵A是具有以下性质的n阶方阵: 数据结构: Fig7-1 2.邻接表法--为图中每个顶点建立一个单链表,第i个单链表中的结点表示依附于顶点Vi的边(有向图中指以Vi为尾的弧)。 数据结构: Fig7-2 3.邻接矩阵表示法与邻接表表示法的比较: 1)邻接矩阵是唯一的,邻接表不唯一; 2)存储稀疏图用邻接表,存储稠密图用邻接矩阵; 3)求无向图顶点的度都容易,求有向图顶点的度邻接矩阵较方便; 4)判断是否是图中的边,邻接矩阵容易,邻接表最坏时间为O(n); 5)求边数e,邻接矩阵耗时为O(n^2),与e无关,邻接表的耗时为O(e+n); 4.基本操作 InsertVex(G,v),InsertARC(G,v,w),DeleteVex(G,v),DeleteARC(G,v,w) (三)图的遍历PPT55-64 1.深度优先搜索(DFS)/遍历方法与算法(了解算法) 2.广度优先搜索(BFS)/遍历方法与算法(了解算法) (四)图的基本应用及其复杂度分析 1.生成树--所有顶点均由边连接在一起,但不存在回路的图。 有深度优先生成树与广度优先生成树。 构造连通网的最小代价生成树(最小生成树)问题,常用算法: PPT69-78 (1)普里姆(Prim)算法 (2)克鲁斯卡尔(Kruskal)算法 2.拓扑排序--把AOV网络中各顶点按照它们相互之间的优先关系排列成一个线性序列的过程。 拓扑排序的方法: 1)在有向图中选一个没有前驱的顶点且输出之 2)从图中删除该顶点和所有以它为尾的弧 3)重复上述两步,直至全部顶点均已输出;或者当图中不存在无前驱的顶点为止 3.关键路径--路径长度最长的路径。 求关键路径步骤。 4.最短路径--从某个源点到其余各顶点的最短路径 迪杰斯特拉(Dijkstra)算法实现: (1)S: 表示已找到从v出发的最短路径的终点的集合;S={v}(初值) D[i]: 表示当前所找到的从v到终点vi的最短路径的长度.vi∈V (2)选择vj,使得D[j]=min{D[i]|vi∈V-S}, vj为当前求得的从v出发的最短路径的终点,令S=S∪{j} (3)修改从v出发到集合V-S上任一顶点Vk可达的最短路径长度. ifD[j]+arcs[j,k] (4)重复 (2)、(3)共n-1次; 即可求得从v到图上其余各顶点的最短路径 第九章查找 (一)查找的基本概念 1.查找的同时对表做修改操作(如插入或删除)则相应的表称之为动态查找表,否则称之为静态查找表。 2.衡量一个查找算法次序优劣的标准是在查找过程中对关键字需要执行的平均比较次数(即平均查找长度ASL). (二)线性表上进行查找的方法主要有三种: (静态查找表) 顺序查找、折半查找/二分查找和分块查找/索引顺序表查找。 各种查找包括: 1)查找过程 2)数据结构与算法 3)查找方法的ASL (三)二叉排序树(动态查找表) 1.二叉排序树定义: 它或者是一棵空树,或者是一棵具有如下特征的非空二叉树: 1)若它的左子树非空,则左子树上所有结点的关键字均小于根结点的关键字; 2)若它的右子树非空,则右子树上所有结点的关键字均大于等于根结点的关键字; 3)左、右子树本身又都是一棵二叉排序树。 2.基本操作 二叉排序树的查找Fig9-1 若二叉排序树为空,则查找不成功; 否则 1)若给定值等于根结点的关键字,则查找成功; 2)若给定值小于根结点的关键字,则继续在左子树上进行查找; 3)若给定值大于根结点的关键字,则继续在右子树上进行查找。 二叉排序树的插入和删除 二叉排序树查找分析Fig9-2 (四)平衡二叉树(了解) (五)哈希表/散列(Hash)表及其查找 基本思想: 在记录的存储地址和它的关键字之间建立一个确定的对应关系;这样,不经过比较,一次存取就能得到所查元素的查找方法 哈希函数——在记录的关键字与记录的存储地址之间建立的一种对应关系 哈希函数的构造方法: 直接定址法、数字分析法、平方取中法、折叠法、除留余数法、随机数法等。 处理冲突的方法: 开放定址法、再哈希法、链地址法。 哈希查找过程、哈希表的插入 哈希表查找分析 第十章内部排序 (一)排序的基本概念 排序定义——将一个数据元素(或记录)的任意序列,重新排列成一个按关键字有序的序列叫~ (二)排序分类 按待排序记录所在位置 内部排序: 待排序记录存放在内存 外部排序: 排序过程中需对外存进行访问的排序 按排序依据原则 插入排序: 直接插入排序、折半插入排序、希尔排序 交换排序: 冒泡排序、快速排序 选择排序: 简单选择排序、堆排序 归并排序: 2-路归并排序 基数排序 1.排序算法的基本操作: 1)比较关键字的大小;2)改变指向记录的指针或移动记录本身。 2.评价排序方法的标准: 1)执行时间;2)所需辅助空间,辅助空间为O (1)称就地排序;另要注意算法的复杂程度。 (三)各种内部排序算法的比较 排序方法 平均时间 最坏情况 最好情况 辅助空间 稳定性 插入排序 O(n2) O(n2) O(n) O (1) √ 选择排序 O(n2) O(n2) O(n2) O (1) √ 冒泡排序 O(n2) O(n2) O(n) O (1) √ 快速排序 O(nlogn) O(n2) O(nlogn) O(nlogn) × 归并排序 O(nlogn) O(nlogn) O(nlogn) O(n) √ 堆排序 O(nlogn) O(nlogn) O(nlogn) O (1) × 基数排序 O(d*n) O(d*n) O(d*n) O(n) √ 考试题型 1选择题10 2填空题16 3简答题54 4算法20
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 总结
![提示](https://static.bdocx.com/images/bang_tan.gif)