数据结构重难点_第1页
数据结构重难点_第2页
数据结构重难点_第3页
数据结构重难点_第4页
数据结构重难点_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

【数据结构】清华版严蔚敏《数据结构》重点要点第二章线性表1线性表的特点及逻辑结构2.线性表的顺序存储结构及基本操作(插入、删除、定位)本章难点线性表的顺序存储结构,基本操作在顺序表上的实现及时间复杂度的计算。内容和要求线性结构特点:在数据元素的非空有限集中存在唯一的一个被称作“第一个”的数据元素,存在唯一的一个被称作“最后一个”的数据元素,除第一个外,集合中的每个数据元素均只有一个前驱,除最后一个外,集合中的每个数据元素均只有一个后继。§2.1线性表的定义和逻辑结构定义:一个线性表是n个数据元素的有限序列。§2.2线性表的顺序存储结构一、顺序表:1、定义:用一组地址连续的存储单元存放一个线性表叫顺序表。2、元素地址计算方法:LOC(ai)=LOC(a1)+(i-1)*LLOC(ai+1)=LOC(ai)+L其中:L-一个元素占用的存储单元个数LOC(ai)—线性表第i个元素的地址3、特点:实现逻辑上相邻一物理地址相邻;实现随机存取4、实现:可用C语言的一维数组实现1)插入定义:线性表的插入是指在第1(1£i£n+1)个元素之前插入一个新的数据元素x,使长度为n的线性表。算法时间复杂度T(n)2)删除定义:线性表的删除是指将第i(1£i£n)个元素删除,使长度为n的线性表。算法评价5、顺序存储结构的优缺点优点:逻辑相邻,物理相邻;可随机存取任一元素;存储空间使用紧凑缺点:插入、删除操作需要移动大量的元素;预先分配空间需按最大空间分配,利用不充分;表容量难以扩充。习题第19页1,4第三章链式存储结构本章重点线性表的链式存储结构的特点2.单链表的基本运算及实现,循环链表,双向链表单链表的基本运算(建立、查找、插入、删除)实现及算法内容和要求§3.1线性表的链式存储结构特点:用一组任意的存储单元存储线性表的数据元素利用指针实现了用不相邻的存储单元存放逻辑上相邻的元素每个数据元素ai,除存储本身信息外,还需存储其直接后继的信息结点数据域:元素本身信息指针域:指示直接后继的存储位置实现单链表的基本运算:单链表特点它是一种动态结构,整个存储空间为多个链表共用不需预先分配空间指针占用额外存储空间不能随机存取,查找速度慢循环链表(circularlinkedlist)循环链表是表中最后一个结点的指针指向头结点,使链表构成环状特点:从表中任一结点出发均可找到表中其他结点,提高查找效率操作与单链表基本一致,循环条件不同单链表p或p->link=NULL循环链表p或p->link=H双向链表(doublelinkedlist)单链表具有单向性的缺点结点定义习题第34页3,4,5,8第四章栈和队列本章重点栈的七种基本操作,两种存储结构(顺序、链式)队列的七种基本操作,两种存储结构(顺序、链式)本章难点顺序栈上实现栈的几个基本操作所对应的算法链栈上元素进栈和出栈的算法队列的表现和操作实现内容和要求栈和队列是两种特殊的线性表,是操作受限的线性表,称限定性DS§4.1栈(stack)栈的定义和特点定义:限定仅在表尾进行插入或删除操作的线性表,表尾一栈顶,表头一栈底,不含元素的空表称空栈特点:先进后出(FILO)或后进先出(LIFO)栈的存储结构顺序栈的实现和入栈、出栈算法链栈的入栈和出栈算法§4.2队列队列的定义及特点定义:队列是限定只能在表的一端进行插入,在表的另一端进行删除的线性表队尾(rear)——允许插入的一端队头(front)允许删除的一端队列特点:先进先出(FIFO)链队列:结点定义队列的顺序存储结构实现:用一维数组实现sq[M]存在问题设数组维数为M,则:当front=-1,rear=M-1时,再有元素入队发生溢出——真溢出当front1-1,rear=M-1时,再有元素入队发生溢出——假溢出解决方案队首固定,每次出队剩余元素向下移动一一浪费时间循环队列基本思想:把队列设想成环形,让sq[0]接在sq[M-1]之后,若rear+1==M,则令rear=0;习题第51页1,2,5,第五章其他线性数据结构本章重点串的存储结构及基本操作实现二维数组基本操作,向量存储结构稀疏矩阵的压缩存储、转置算法本章难点串的堆分配存储结构二维数组向量存储结构、地址的计算方法、稀疏矩阵的压缩存储、转置算法自学内容和要求§5.1串定义※定栈的定义:串是由零个或多个字符组成的有限序列。一般记为:S='a1a2....an'(n20)淤基本操作有九种«定义串的存储结构淤串的顺序定长存储结构※堆分配存储结构淤串的基本操作的实现在串的顺序定长相信结构上实现CONCAT(S,T1,T2)操作在串的堆分配存储结构上实现CONCAT(S,T1,丁2)操作在串的顺序定长存储结构上实现子串的定位操作INDEX(S,T)§5.2多维数组定义二维数组※定义及基本操作定义:数组是由下标和值组成的序对的集,数组可以看成是一种特殊的线性表,即线性表中数据元素本身也是一个线性表※基本运算:给定一组下标,存取对应的数据元给定一组下标,修改相应数据元素的值。数组的顺序存储结构次序约定以行序为主序以列序为主序数组元素地址计算方法矩阵的压缩存储对称矩阵三角矩阵稀疏矩阵的压缩存储方法顺序存储结构三元组表带辅助行向量的二元组表求转置矩阵问题描述:已知一个稀疏矩阵的三元组表,求该矩阵转置矩阵的三元组表问题分析一般矩阵转置算法:十字链表设行指针数组和列指针数组,分别指向每行、列第一个非零元结点定义习题第65页2,3,5,6,7kk\-k-)4第六早树本章重点二叉树的存储结构及其各种操作,遍历二叉树树和森林与二叉树的转换关系,树的遍历本章难点遍历二叉树的算法树和森林与二叉树的转换关系,哈夫曼树及编码内容和要求§3.1树的定义定义定义:树(tree^n(n>0)个结点的有限集T,其中:有且仅有一个特定的结点,称为树的根(root)当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1,T2,……Tm,其中每一个集合本身又是一棵树,称为根的子树(subtree)特点:树中至少有一个结点一一根树中各子树是互不相交的集合基本术语§3.2二叉树定义定义:二叉树是n(n0)个结点的有限集,它或为空树(n=0),或由一个根结点和两棵分别称为左子树和右子树的互不相交的二叉树构成特点每个结点至多有二棵子树(即不存在度大于2的结点)二叉树的子树有左、右之分,且其次序不能任意颠倒基本形态二叉树性质性质1:几种特殊形式的二叉树满二叉树定义:U性质5:如果对一棵有n个结点的完全二叉树的结点按层序编号,则对任一结点i(1in),有:如果i=1,则结点馄二叉树的根,无双亲;如果i>1,则其双亲是i/2如果2i>n,则结点i无左孩子;如果2in,则其左孩子是2i如果2i+1>n,则结点i无右孩子;如果2i+1n,则其右孩子是2i+1§3.3树的存储结构树的存储结构双亲表示法实现:定义结构数组存放树的结点,每个结点含两个域:数据域:存放结点本身信息双亲域:指示本结点的双亲结点在数组中位置特点:找双亲容易,找孩子难孩子表示法多重链表:每个结点有多个指针域,分别指向其子树的根结点同构:结点的指针个数相等,为树的度D结点不同构:结点指针个数不等,为该结点的度d孩子兄弟表示法(二叉树表示法)实现:用二叉链表作树的存储结构,链表中每个结点的两个指针域分别指向其第一个孩子结点和下一个兄弟结点特点操作容易破坏了树的层次二叉树的存储结构顺序存储结构实现:按满二叉树的结点层次编号,依次存放二叉树中的数据元素特点:结点间关系蕴含在其存储位置中浪费空间,适于存满二叉树和完全二叉树链式存储结构二叉链表树与二叉树转换森林转换成二叉树将各棵树分别转换成二叉树将每棵树的根结点用线相连以第一棵树根结点为二叉树的根,再以根结点为轴心,顺时针旋转,构成二叉树型结构§6.4树和二叉树的遍历树的遍历遍历一一按一定规律走遍树的各个顶点,且使每一顶点仅被访问一次,即找一个完整而有规律的走法,以得到树中所有结点的一个线性排列常用方法先根(序)遍历:先访问树的根结点,然后依次先根遍历根的每棵子树后根(序)遍历:先依次后根遍历每棵子树,然后访问根结点按层次遍历:先访问第一层上的结点,然后依次遍历第二层,......第n层的结点二叉树的遍历方法先序遍历:先访问根结点,然后分别先序遍历左子树、右子树中序遍历:先中序遍历左子树,然后访问根结点,最后中序遍历右子树后序遍历:先后序遍历左、右子树,然后访问根结点l按层次遍历:从上到下、从左到右访问各结点算法递归算法§6.5二叉树的应用哈夫曼树(Huffman)——带权路径长度最短的树定义路径:从树中一个结点到另一个结点之间的分支构成这两个结点间的~路径长度:路径上的分支数树的路径长度:从树根到每一个结点的路径长度之和树的带权路径长度:树中所有带权结点的路径长度之和构造Huffman树的方法Huffman算法构造Huffman树步骤根据给定的n个权值{w1,w2,……wn},构造n棵只有根结点的二叉树,令起权值为wj在森林中选取两棵根结点权值最小的树作左右子树,构造一棵新的二叉树,置新二叉树根结点权值为其左右子树根结点权值之和在森林中删除这两棵树,同时将新得到的二叉树加入森林中重复上述两步,直到只含一棵树为止,这棵树即哈夫曼树算法按中序线索化二叉树二叉排序树定义:二叉排序树或是一棵空树,或是具有下列性质的二叉树:若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值若它的右子树不空,则右子树上所有结点的值均大于或等于它的根结点的值它的左、右子树也分别为二叉排序树二叉排序树的插入二叉排序树的删除习题第96页1,4,7,15,16,21,22第七章图本章重点图的存储结构,遍历图的生成树和最小生成树,拓扑排序、最短路径本章难点图的遍历:深度优先搜索遍历和广度优先搜索遍历最小生成树及最短路径的计算树和森林与二叉树的转换关系,哈夫曼树及编码内容和要求§7.1图的定义和术语§7.2图的存储结构多重链表邻接矩阵一表示顶点间相联关系的矩阵定义:设G=(V,E)是有31个顶点的图,G的邻接矩阵A是具有以下性质的n阶方阵特点邻接表实现:为图中每个顶点建立一个单链表,第i个单链表中的结点表示依附于顶点Vi的边(有向图中指以Vi为尾的弧)特点无向图中顶点Vi的度为第i个单链表中的结点数有向图中顶点Vi的出度为第i个单链表中的结点个数顶点Vi的入度为整个单链表中邻接点域值是i的结点个数逆邻接表:有向图中对每个结点建立以Vi为头的弧的单链表有向图的十字链表表示法§7.3图的遍历深度优先遍历(DFS)方法:从图的某一顶点V0出发,访问此顶点;然后依次从V0的未被访问的邻接点出发,深度优先遍历图,直至图中所有和V0相通的顶点都被访问到;若此时图中尚有顶点未被访问,则另选图中一个未被访问的顶点作起点,重复上述过程,直至图中所有顶点都被访问为止深度优先遍历算法递归算法§7.4生成树生成树定义:所有顶点均由边连接在一起,但不存在回路的图叫~深度优先生成树与广度优先生成树生成森林:非连通图每个连通分量的生成树一起组成非连通图的~说明一个图可以有许多棵不同的生成树所有生成树具有以下共同特点:生成树的顶点个数与图的顶点个数相同生成树是图的极小连通子图一个有n个顶点的连通图的生成树有n-1条边生成树中任意两个顶点间的路径是唯一的在生成树中再加一条边必然形成回路含n个顶点n-1条边的图不一定是生成树最小生成树构造最小生成树方法方法一:普里姆(Prim)算法算法思想:设N=(V,{E})是连通网,TE是N上最小生成树中边的集合初始令U={u0},(u0IV),TE=F在所有ulU,vlV-U的边(u,v)fE中,找一条代价最小的边(u0,v0)将(u0,v0)并入集合TE,同时v0并入U重复上述操作直至U=V为止,则T=(V,{TE})为N的最小生成树算法实现:图用邻接矩阵表示算法描述算法评价:T(n)=O(n2)方法二:克鲁斯卡尔(Kruskal)算法算法思想:设连通网N=(V,{E}),令最小生成树初始状态为只有n个顶点而无边的非连通图T=(V,{F}),每个顶点自成一个连通分量在E中选取代价最小的边,若该边依附的顶点落在T中不同的连通分量上,则将此边加入到T中;否则,舍去此边,选取下一条代价最小的边依此类推,直至T中所有顶点都在同一连通分量上为止§7.5拓扑排序问题提出:学生选修课程问题顶点——表示课程有向弧——表示先决条件,若课程i是课程j的先决条件,则图中有弧<i,j>学生应按怎样的顺序学习这些课程,才能无矛盾、顺利地完成学业一一拓扑排序定义AOV网——用顶点表示活动,用弧表示活动间优先关系的有向图称为顶点表示活动的网(ActivityOnVertexnetwork),简称AOV网若<vi,vj>是图中有向边,则vi是vj的直接前驱;vj是vi的直接后继AOV网中不允许有回路,这意味着某项活动以自己为先决条件拓扑排序——把AOV网络中各顶点按照它们相互之间的优先关系排列成一个线性序列的过程叫~检测AOV网中是否存在环方法:对有向图构造其顶点的拓扑有序序列,若网中所有顶点都在它的拓扑有序序列中,则该AOV网必定不存在环拓扑排序的方法在有向图中选一个没有前驱的顶点且输出之从图中删除该顶点和所有以它为尾的弧重复上述两步,直至全部顶点均已输出;或者当图中不存在无前驱的顶点为止算法实现以邻接表作存储结构把邻接表中所有入度为0的顶点进栈栈非空时,输出栈顶元素Vj并退栈;在邻接表中查找Vj的直接后继Vk,把Vk的入度减1;若Vk的入度为0则进栈重复上述操作直至栈空为止。若栈空时输出的顶点个数不是门,则有向图有环;否则,拓扑排序完毕§7.6关键路径定义AOE网(ActivityOnEdge)——也叫边表示活动的网。AOE网是一个带权的有向无环图,其中顶点表示事件,弧表示活动,权表示活动持续时间路径长度一一路径上各活动持续时间之和关键路径一一路径长度最长的路径叫~Ve(j)——表示事件Vj的最早发生时间Vl(j)——表示事件Vj的最迟发生时间e(i)——表示活动ai的最早开始时间l(i)——表示活动ai的最迟开始时间l(i)-e(i)——表示完成活动ai的时间余量关键活动一一关键路径上的活动叫~,即l(i)=e(i)的活动求关键路径步骤求Ve(i)求Vl(j)求e(i)求l(i)计算l(i)-e(i)§7.7最短路径求最短路径步骤初使时令S={V0},T={其余顶点},T中顶点对应的距离值若存在<V0,Vi>,为<V0,Vi>弧上的权值若不存在<V0,Vi>,为^从T中选取一个其距离值为最小的顶点可,加入S对T中顶点的距离值进行修改:若加进W作中间顶点,从V0到Vi的距离值比不加W的路径要短,则修改此距离值重复上述步骤,直到S中包含所有顶点,即S=V为止算法实现图用带权邻接矩阵存储ad[][]数组dist[]存放当前找到的从源点V0到每个终点的最短路径长度,其初态为图中直接路径权值数组pre[]表示从V0到各终点的最短路径上,此顶点的前一顶点的序号;若从V0到某终点无路径,则用0作为其前一顶点的序号算法描述每一对顶点之间的最短路径方法一:每次以一个顶点为源点,重复执行Dijkstra算法n次一一T(n)=O(n3)方法二弗洛伊德(Floyd)算法算法思想:逐个顶点试探法求最短路径步骤初始时设置一个n阶方阵,令其对角线元素为0,若存在<<Vi,Vj>,则对应元素为权值;否则为^逐步试着在原直接路径中增加中间顶点,若加入中间点后路径变短,则修改之;否则,维持原值所有顶点试探完毕,算法结束算法实现图用邻接矩阵存储length[][]存放最短路径长度path[i][j]是从Vi到Vj的最短路径上Vj前一顶点序号算法描述习题第122页1,2,3,4,5,6,11,13,14,16第八章查找本章重点1•静态查找表:顺序表上顺序查找、有序表查找动态查找表:二叉排序树解决冲突的主要方法本章难点二叉排序树的生成,插入,删除及查找散列函数的构造方法,散列表的查找及分析内容和要求查找一一也叫检索,是根据给定的某个值,在表中确定一个关键字等于给定值的记录或数据元素关键字一一是数据元素中某个数据项的值,它可以标识一个数据元素查找方法评价查找速度占用存储空间多少算法本身复杂程度平均查找长度ASL(AverageSearchLength):为确定记录在表中的位置,需和给定值进行比较的关键字的个数的期望值叫查找算法的~§9.1顺序查找查找过程:从表的一端开始逐个进行记录的关键字和给定值的比较算法描述§9.2折半查找查找过程:每次将待查记录所在区间缩小一半适用条件:采用顺序存储结构的有序表算法描述§9.3分块查找查找过程:将表分成几块,块内无序,块间有序;先确定待查记录所在块,再在块内查找适用条件:分块有序表算法描述分块查找方法评价§9.4哈希查找基本思想:在记录的存储地址和它的关键字之间建立一个确定的对应关系;这样,不经过比较,一次存取就能得到所查元素的查找方法定义哈希函数——在记录的关键字与记录的存储地址之间建立的一种对应关系叫~哈希函数是一种映象,是从关键字空间到存储地址空间的一种映象哈希函数可写成:addr(ai)=H(ki)ai是表中的一个元素addr(ai)是ai的存储地址uki是ai的关键字哈希表——应用哈希函数,由记录的关键字确定记录在表中的地址,并将记录放入此地址,这样构成的表叫~哈希查找一一又叫散列查找,利用哈希函数进行查找的过程叫~哈希函数的构造方法直接定址法构造:取关键字或关键字的某个线性函数作哈希地址,即H(key)=key或H(key)=a-key+b特点直接定址法所得地址集合与关键字集合大小相等,不会发生冲突实际中能用这种哈希函数的情况很少数字分析法构造:对关键字进行分析,取关键字的若干位或其组合作哈希地址适于关键字位数比哈希地址位数大,且可能出现的关键字事先知道的情况平方取中法构造:取关键字平方后中间几位作哈希地址适于不知道全部关键字情况折叠法构造:将关键字分割成位数相同的几部分,然后取这几部分的叠加和(舍去进位)做哈希地址种类移位叠加:将分割后的几部分低位对齐相加间界叠加:从一端沿分割界来回折送,然后对齐相加适于关键字位数很多,且每一位上数字分布大致均匀情况除留余数法构造:取关键字被某个不大于哈希表表长m的数p除后所得余数作哈希地址,即H(key)=keyMODp,£m特点简单、常用,可与上述几种方法结合使用p的选取很重要;p选的不好,容易产生同义词随机数法构造:取关键字的随机函数值作哈希地址,即H(key)=random(key)适于关键字长度不等的情况选取哈希函数,考虑以下因素:计算哈希函数所需时间关键字长度哈希表长度(哈希地址范围)关键字分布情况记录的查找频率处理冲突的方法开放定址法方法:当冲突发生时,形成一个探查序列;沿此序列逐个地址探查,直到找到一个空位置(开放的地址),将发生冲突的记录放到该地址中,即Hi=(H(key)+di)MODm,i=1,2,......k(k£m-1)其中:H(key)——哈希函数m——哈希表表长di增量序列分类线性探测再散列:di=1,2,3,......m-1二次探测再散列:di=12,-12,22,-22,32,......±k2(k£m/2)伪随机探测再散列:di=伪随机数序列再哈希法方法:构造若十个哈希函数,当发生冲突时,计算下一个哈希地址,即:Hi=Rhi(key)i=1,2,......k其中:Rhi一不同的哈希函数特点:计算时间增加链地址法方法:将所有关键字为同义词的记录存储在一个单链表中,并用一维数组存放头指针哈希查找过程及分析哈希查找过程哈希查找分析哈希查找过程仍是一个给定值与关键字进行比较的过程评价哈希查找效率仍要用ASL哈希查找过程与给定值进行比较的关键字的个数取决于:哈希函数处理冲突的方法哈希表的填满因子a=表中填入的记录数/哈希表长度习题第150页2,4,5,6第九章排序本章重点三种简单排序方法,快速排序、堆排序、并归排序的实现本章难点堆排序、并归排序、基数排序内容和要求排序定义一一将一个数据元素(或记录)的任意序列,重新排列成一个按关键字有序的序列排序分类按待排序记录所在位置内部排序:待排序记录存放在内存外部排序:排序过程中需对外存进行访问的排序按排序依据原则插入排序:直接插入排序、折半插入排序、希尔排序交换排序:冒泡排序、快速排序选择排序:简单选择排序、堆排序归并排序:2-路归并排序基数排序哈希查找算法实现用线性探测再散列法处理冲突实现查找过程:同前删除:只能作标记,不能真正删除插入:遇到空位置或有删除标记的位置就可以插入算法描述:用外链表处理冲突算法按排序所需工作量简单的排序方法:T(n)=O(n2)先进的排序方法:T(n)=O(logn)基数排序:T(n)=O(d.n)排序基本操作比较两个关键字大小将记录从一个位置移动到另一个位置第九章内部排序§9.1插入排序直接插入排序排序过程:整个排序过程为n-1趟插入,即先将序列中第1个记录看成是一个有序子序列,然后从第2个记录开始,逐个进行插入,直至整个序列有序折半插入排序排序过程:用折半查找方法确定插入位置的排序叫~算法描述希尔排序(缩小增量法)排序过程:先取一个正整数d1<n,把所有相隔d1的记录放一组,组内进行直接插入排序;然后取d2<d1,重复上述分组和排序操作;直至di=1,即所有记录放进一个组中排序为止算法描述§9.2交换排序冒泡排序排序过程将第一个记录的关键字与第二个记录的关键字进行比较,若为逆序r[1].key>r[2].key,则交换;然后比较第二个记录与第三个记录;依次类推,直至第n-1个记录和第n个记录比较为止第一趟冒泡排序,结果关键字最大的记录被安置在最后一个记录上对前n-1个记录进行第二趟冒泡排序,结果使关键字次大的记录被安置在第n-1个记录位置重复上述过程,直到“在一趟排序过程中没有进行过交换记录的操作”为止算法描述快速排序基本思想:通过一趟排序,将待排序记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录进行排序,以达到整个序列有序排序过程:对r[s......t]中记录进行一趟快速排序,附设两个指针i和j,设枢轴记录rp=r[s],x=rp.key初始时令『s,j=t首先从j所指位置向前搜索第一个关键字小于X的记录,并和rp交换再从i所指位置起向后搜索,找到第一个关键字大于x的记录,和rp交换重复上述两步,直至『=|为止再分别对两个子序列进行快速排序,直到每个子序列只含有一个记录为止算法描述§

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论