数据结构复习
- 格式:doc
- 大小:61.00 KB
- 文档页数:4
第一章绪论一、单项选择题1.数据结构是一门研究非数值计算的程序设计问题中计算机的①以及它们之间的②和操作等的学科。
① A.操作对象 B.计算方法 C·逻辑存储 D.数据映象② A.结构 B.关系 C.运算. D.算法2.数据结构被形式地定义为(D,R),其中D是①的有限集合,R是D上的②有限集合。
① A.算法 B.数据元素 C.数据操作 D.逻辑结构② A.操作 B.映象 C、存储 D.关系3.在数据结构中,从逻辑上可以把数据结构分成()。
A.动态结构和静态结构 B.紧凑结构和非紧凑结构C.线性结构和非线性结构 D.内部结构和外部结构4·算法分析的目的是①,算法分析的两个主要方面是②。
① A. 找出数据结构的合理性 B.研究算法中的输入和输出的关系C. 分析算法的效率以求改进D. 分析算法的易懂性和文档性② A. 空间复杂性和时间复杂性 B.正确性和简明性C.可读性和文档性 D.数据复杂性和程序复杂性5.计算机算法指的是①,它必具备输入、输出和②等五个特性。
① A. 计算方法 B.排序方法 C. 解决问题的有限运算序列 D.调度方法② A. 可行性、可移植性和可扩充性 B. 可行性、确定性和有穷性C. 确定性、有穷性和稳定性 D.易读性、稳定性和安全性6. 线性表的逻辑顺序与存储顺序总是一致的,这种说法()。
A. 正确 B.不正确7. 线性表若采用链式存储结构时,要求内存中可用存储单元的地址()。
A. 必须是连续的 B.部分地址必须是连续的C. 一定是不连续的D. 连续或不连续都可以8.数据结构通常是研究数据的()及它们之间的相互联系。
A.存储和逻辑结构 B.存储和抽象C.理想与抽象 D.理想与逻辑9.数据在计算机存储器内表示时,物理地址与逻辑地址相同并且是连续的,称之为()。
A.存储结构 B.逻辑结构 C.顺序存储结构 D.链式存储结构11.非线性结构是数据元素之间存在一种()。
数据结构复习题及答案5篇第一篇:数据结构复习题及答案、数据结构复习题及答案中南大学现代远程教育课程考试(专科)复习题及参考答案数据结构一、判断题:1.数组是一种复杂的数据结构,数组元素之间的关系既不是线性的也不是树形的。
()2.链式存储在插人和删除时需要保持物理存储空间的顺序分配,不需要保持数据元素之间的逻辑顺序。
()3.在只有度为0和度为k的结点的k叉树中,设度为0的结点有n0个,度为k的结点有nk个,则有n0=nk+1。
()4.折半搜索只适用于有序表,包括有序的顺序表和有序的链表。
()5.如果两个串含有相同的字符,则这两个串相等。
()6.数组可以看成线性结构的一种推广,因此可以对它进行插入、删除等运算。
()7.在用循环单链表表示的链式队列中,可以不设队头指针,仅在链尾设置队尾指针。
()8.通常递归的算法简单、易懂、容易编写,而且执行的效率也高。
()9.一个广义表的表尾总是一个广义表。
()10.当从一个小根堆(最小堆)中删除一个元素时,需要把堆尾元素填补到堆顶位置,然后再按条件把它逐层向下调整,直到调整到合适位置为止。
()11.对于一棵具有n个结点,其高度为h的二叉树,进行任一种次序遍历的时间复杂度为O(h)。
()12.存储图的邻接矩阵中,邻接矩阵的大小不但与图的顶点个数有关,而且与图的边数也有关。
()13.直接选择排序是一种稳定的排序方法。
()14.闭散列法通常比开散列法时间效率更高。
()15.有n个结点的不同的二叉树有n!棵。
()16.直接选择排序是一种不稳定的排序方法。
()17.在2048个互不相同的关键码中选择最小的5个关键码,用堆排序比用锦标赛排序更快。
()18.当3阶B_树中有255个关键码时,其最大高度(包括失败结点层)不超过8。
()19.一棵3阶B_树是平衡的3路搜索树,反之,一棵平衡的3路搜索树是3阶非B_树。
()20.在用散列表存储关键码集合时,可以用双散列法寻找下一个空桶。
数据结构复习资料复习提纲知识要点归纳数据结构复习资料:复习提纲知识要点归纳一、数据结构概述1. 数据结构的定义和作用2. 常见的数据结构类型3. 数据结构与算法的关系二、线性结构1. 数组的概念及其特点2. 链表的概念及其分类3. 栈的定义和基本操作4. 队列的定义和基本操作三、树结构1. 树的基本概念及定义2. 二叉树的性质和遍历方式3. 平衡二叉树的概念及应用4. 堆的定义和基本操作四、图结构1. 图的基本概念及表示方法2. 图的遍历算法:深度优先搜索和广度优先搜索3. 最短路径算法及其应用4. 最小生成树算法及其应用五、查找与排序1. 查找算法的分类及其特点2. 顺序查找和二分查找算法3. 哈希查找算法及其应用4. 常见的排序算法:冒泡排序、插入排序、选择排序、归并排序、快速排序六、高级数据结构1. 图的高级算法:拓扑排序和关键路径2. 并查集的定义和操作3. 线段树的概念及其应用4. Trie树的概念及其应用七、应用案例1. 使用数据结构解决实际问题的案例介绍2. 如何选择适合的数据结构和算法八、复杂度分析1. 时间复杂度和空间复杂度的定义2. 如何进行复杂度分析3. 常见算法的复杂度比较九、常见问题及解决方法1. 数据结构相关的常见问题解答2. 如何优化算法的性能十、总结与展望1. 数据结构学习的重要性和难点2. 对未来数据结构的发展趋势的展望以上是数据结构复习资料的复习提纲知识要点归纳。
希望能够帮助你进行复习和回顾,加深对数据结构的理解和掌握。
在学习过程中,要注重理论与实践相结合,多进行编程练习和实际应用,提高数据结构的实际运用能力。
祝你复习顺利,取得好成绩!。
第1章绪论1.数据(Data) :是描述客观事物的数字、字符以及所有能输入到计算机中并能被计算机接受的各种符号集合的统称。
包括数值数据和非数值数据(字符串、图形、图像、音频、视频)。
2.数据元素(Data Element) :表示一个事物的一组数据称为一个数据元素(结点顶点、记录);数据元素是数据的基本单位。
3.数据项(Data Item):是数据元素中有独立含义的、不可分割的最小标识单位(字段、域、属性)。
一个数据元素可由若干个数据项组成。
4.数据对象(Data Object):是性质相同的数据元素的集合,是数据的一个子集。
如字符集合C ={A,B,C,…} 。
数据(Data) :是描述客观事物的数字、字符以及所有能输入到计算机中并能被计算机接受的各种符号集合的统称。
包括数值数据和非数值数据(字符串、图形、图像、音频、视频)。
数据元素(Data Element) :表示一个事物的一组数据称为一个数据元素(结点、顶点、记录);数据元素是数据的基本单位。
数据项(Data Item):是数据元素中有独立含义的、不可分割的最小标识单位(字段、域、属性)。
一个数据元素可由若干个数据项组成。
数据对象(Data Object):是性质相同的数据元素的集合,是数据的一个子集。
如字符集合C ={A,B,C,…} 。
●数据的逻辑结构指数据元素之间的逻辑关系,用一个数据元素的集合和定义在此集合上的若干关系来表示。
●四种逻辑结构:集合、线性结构、树型结构、图状结构。
●数据结构的形式定义是一个二元组:Data-Structure=(D,S)其中:D是数据元素的有限集,S是D上关系的有限集。
例1:设数据逻辑结构B=(K,R)K={k1, k2, …, k9}R={ <k1, k3>,<k1, k8>,<k2, k3>,<k2, k4>,<k2, k5>,<k3, k9>,<k5, k6>,<k8, k9>,<k9, k7>,<k4, k7>,<k4, k6>有时候关系图不唯一(一般是无向图)●数据结构在计算机内存中的存储包括数据元素的存储和元素之间的关系的表示。
第一章概论1.数据:信息的载体,能被计算机识别、存储和加工处理;2.数据元素:数据的基本单位,可由若干个数据项组成,数据项是具有独立含义的最小标识单位;3.数据结构:数据之间的相互关系,即数据的组织形式;它包括:1数据的逻辑结构,从逻辑关系上描述数据,与数据存储无关,独立于计算机;2数据的存储结构,是逻辑结构用计算机语言的实现,依赖于计算机语言;3数据的运算,定义在逻辑结构上,每种逻辑结构都有一个运算集合;常用的运算:检索/插入/删除/更新/排序;4.数据的逻辑结构可以看作是从具体问题抽象出来的数学模型;数据的存储结构是逻辑结构用计算机语言的实现;5.数据类型:一个值的集合及在值上定义的一组操作的总称;分为:原子类型和结构类型;6.抽象数据类型:抽象数据的组织和与之相关的操作;优点:将数据和操作封装在一起实现了信息隐藏;7. 抽象数据类型ADT:是在概念层上描述问题;类:是在实现层上描述问题;在应用层上操作对象类的实例解决问题;8.数据的逻辑结构,简称为数据结构,有:1线性结构,若结构是非空集则仅有一个开始和终端结点,并且所有结点最多只有一个直接前趋和后继;2非线性结构,一个结点可能有多个直接前趋和后继;9.数据的存储结构有:1顺序存储,把逻辑相邻的结点存储在物理上相邻的存储单元内;2链接存储,结点间的逻辑关系由附加指针字段表示;3索引存储,存储结点信息的同时,建立附加索引表,有稠密索引和稀疏索引;4散列存储,按结点的关键字直接计算出存储地址;10.评价算法的好坏是:算法是正确的;执行算法所耗的时间;执行算法的存储空间辅助存储空间;易于理解、编码、调试;11.算法的时间复杂度Tn:是该算法的时间耗费,是求解问题规模n的函数;记为On;时间复杂度按数量级递增排列依次为:常数阶O1、对数阶Olog2n、线性阶On、线性对数阶Onlog2n、平方阶On^2、立方阶On^3、……k次方阶On^k、指数阶O2^n;13.算法的空间复杂度Sn:是该算法的空间耗费,是求解问题规模n的函数;12.算法衡量:是用时间复杂度和空间复杂度来衡量的,它们合称算法的复杂度;13. 算法中语句的频度不仅与问题规模有关,还与输入实例中各元素的取值相关;第二章线性表1.线性表:是由nn≥0个数据元素组成的有限序列;3.顺序表:把线性表的结点按逻辑次序存放在一组地址连续的存储单元里;4.顺序表结点的存储地址计算公式:Locai=Loca1+i-1C;1≤i≤n5.顺序表上的基本运算public interface List {链表:只有一个链域的链表称单链表;在结点中存储结点值和结点的后继结点的地址,data next data是数据域,next是指针域;1建立单链表;时间复杂度为On;加头结点的优点:1链表第一个位置的操作无需特殊处理;2将空表和非空表的处理统一; 2查找运算;时间复杂度为On;public class SLNode implements Node {private Object element;private SLNode next;public SLNodeObject ele, SLNode next{= ele;= next;}public SLNode getNext{return next;}public void setNextSLNode next{= next;}public Object getData {return element;}public void setDataObject obj {element = obj;}}public class ListSLinked implements List {private SLNode head; etData==ereturn p;else p = ;return null;}etData;.getNext;size--;return obj;}etNext;size--;return true;}return false;}环链表:是一种首尾相连的链表;特点是无需增加存储量,仅对表的链接方式修改使表的处理灵活方便;8.空循环链表仅由一个自成循环的头结点表示;9.很多时候表的操作是在表的首尾位置上进行,此时头指针表示的单循环链表就显的不够方便,改用尾指针rear来表示单循环链表;用头指针表示的单循环链表查找开始结点的时间是O1,查找尾结点的时间是On;用尾指针表示的单循环链表查找开始结点和尾结点的时间都是O1;10.在结点中增加一个指针域,prior|data|next;形成的链表中有两条不同方向的链称为双链表;public class DLNode implements Node {private Object element;private DLNode pre;private DLNode next;public DLNodeObject ele, DLNode pre, DLNode next{= ele;= pre;= next;}public DLNode getNext{return next;}public void setNextDLNode next{= next;}public DLNode getPre{return pre;}public void setPreDLNode pre{= pre;}public Object getData {return element;}public void setDataObject obj {element = obj;}}public class LinkedListDLNode implements LinkedList {private int size; etPrenode;node;size++;return node;}etNextnode;node;size++;return node;}etNext;.setPre;size--;return obj;}序表和链表的比较1基于空间的考虑:顺序表的存储空间是静态分配的,链表的存储空间是动态分配的;顺序表的存储密度比链表大;因此,在线性表长度变化不大,易于事先确定时,宜采用顺序表作为存储结构;2基于时间的考虑:顺序表是随机存取结构,若线性表的操作主要是查找,很少有插入、删除操作时,宜用顺序表结构;对频繁进行插入、删除操作的线性表宜采用链表;若操作主要发生在表的首尾时采用尾指针表示的单循环链表;12.存储密度=结点数据本身所占的存储量/整个结点结构所占的存储总量存储密度:顺序表=1,链表<1;第三章栈和队列1.栈是限制仅在表的一端进行插入和删除运算的线性表又称为后进先出表LIFO表;插入、删除端称为栈顶,另一端称栈底;表中无元素称空栈;2.栈的基本运算有:1initstacks,构造一个空栈;2stackemptys,判栈空;3stackfulls,判栈满;4pushs,x,进栈;5pops,退栈;6stacktops,取栈顶元素;3.顺序栈:栈的顺序存储结构称顺序栈;4.当栈满时,做进栈运算必定产生空间溢出,称“上溢”;当栈空时,做退栈运算必定产生空间溢出,称“下溢”;上溢是一种错误应设法避免,下溢常用作程序控制转移的条件;5.在顺序栈上的基本运算:public interface Stack {栈:栈的链式存储结构称链栈;栈顶指针是链表的头指针;7.链栈上的基本运算:public class StackSLinked implements Stack {private SLNode top; 列是一种运算受限的线性表,允许删除的一端称队首,允许插入的一端称队尾;队列又称为先进先出线性表,FIFO表;9.队列的基本运算:1initqueueq,置空队;2queueemptyq,判队空;3queuefullq,判队满;4enqueueq,x,入队;5dequeueq,出队;6queuefrontq,返回队头元素;10.顺序队列:队列的顺序存储结构称顺序队列;设置front和rear指针表示队头和队尾元素在向量空间的位置;11.顺序队列中存在“假上溢”现象,由于入队和出队操作使头尾指针只增不减导致被删元素的空间无法利用,队尾指针超过向量空间的上界而不能入队;12.为克服“假上溢”现象,将向量空间想象为首尾相连的循环向量,存储在其中的队列称循环队列;i=i+1%queuesize13.循环队列的边界条件处理:由于无法用front==rear来判断队列的“空”和“满”;解决的方法有:1另设一个布尔变量以区别队列的空和满;2少用一个元素,在入队前测试rear在循环意义下加1是否等于front;3使用一个记数器记录元素总数;14.循环队列的基本运算:public interface Queue {队列:队列的链式存储结构称链队列,链队列由一个头指针和一个尾指针唯一确定;16.链队列的基本运算:public class QueueSLinked implements Queue {private SLNode front;private SLNode rear;private int size;public QueueSLinked {front = new SLNode;rear = front;size = 0;}etData;}}第四章串1.串:是由零个或多个字符组成的有限序列;包含字符的个数称串的长度;2.空串:长度为零的串称空串;空白串:由一个或多个空格组成的串称空白串;子串:串中任意个连续字符组成的子序列称该串的子串;主串:包含子串的串称主串;子串的首字符在主串中首次出现的位置定义为子串在主串中的位置;3.空串是任意串的子串;任意串是自身的子串;串常量在程序中只能引用但不能改变其值;串变量取值可以改变;4.串的基本运算1intstrlenchars;求串长;2charstrcpycharto,charfrom;串复制;3charstrcatcharto,charfrom;串联接;4intstrcmpchars1,chars2;串比较;5charstrchrchars,charc;字符定位;5.串的存储结构:1串的顺序存储:串的顺序存储结构称顺序串;按存储分配不同分为:1静态存储分配的顺序串:直接用定长的字符数组定义,以“\0”表示串值终结;definemaxstrsize256typedefcharseqstringmaxstrsize;seqstrings;不设终结符,用串长表示;Typedefstruct{Charchmaxstrsize;Intlength;}seqstring;以上方式的缺点是:串值空间大小是静态的,难以适应插入、链接等操作;2动态存储分配的顺序串:简单定义:typedefcharstring;复杂定义:typedefstruct{charch;intlength;}hstring;2串的链式存储:串的链式存储结构称链串;链串由头指针唯一确定;类型定义:typedefstructnode{chardata;structnodenext;}linkstrnode;typedeflinkstrnodelinkstring;linkstrings;将结点数据域存放的字符个数定义为结点的大小;结点大小不为1的链串类型定义:definenodesize80typedefstructnode{chardatanodesize;structnodenext;}linkstrnode;6.串运算的实现1顺序串上的子串定位运算;1子串定位运算又称串的模式匹配或串匹配;主串称目标串;子串称模式串; 2朴素的串匹配算法;时间复杂度为On^2;比较的字符总次数为n-m+1m; Intnaivestrmatchseqstringt,seqstringp{inti,j,k;intm=;intn=;fori=0;i<=n-m;i++{j=0;k=i;whilej<m&&k==j{j++;k++;}ifj==mreturni;}return–1;}2链串上的子串定位运算;时间复杂度为On^2;比较的字符总次数为n-m+1m;LinkstrnodelilnkstrmatchlinkstringT,linkstringP {linkstrnodeshift,t,p;shift=T;t=shift;p=P;whilet&&p{ift->data==p->data{t=t->next;p=p->next;}else{shift=shift->next;t=shift;p=P;}}ifp==NULLreturnshift;elsereturnNULL;}第五章多维数组和广义表1.多维数组:一般用顺序存储的方式表示数组;2.常用方式有:1行优先顺序,将数组元素按行向量排列;2列优先顺序,将数组元素按列向量排列;3.计算地址的函数:LOCAij=LOCAc1c2+i-c1d2-c2+1+j-c2d4.矩阵的压缩存储:为多个非零元素分配一个存储空间;对零元素不分配存储空间;1对称矩阵:在一个n阶的方阵A中,元素满足Aij=Aji0<=i,j<=n-1;称为对称矩阵;元素的总数为:nn+1/2;设:I=i或j中大的一个数;J=i或j中小的一个数;则:k=II+1/2+J;地址计算:LOCAij=LOCsak=LOCsa0+kd=LOCsa0+II+1/2+Jd2三角矩阵:以主对角线划分,三角矩阵有上三角和下三角;上三角的主对角线下元素均为常数c;下三角的主对角线上元素均为常数c;元素总数为:nn+1/2+1;以行优先顺序存放的Aij与SAk的关系:上三角阵:k=i2n-i+1/2+j-i;下三角阵:k=ii+1/2+j;3对角矩阵:所有的非零元素集中在以主对角线为中心的带状区域,相邻两侧元素均为零;|i-j|>k-1/2以行优先顺序存放的Aij与SAk的关系:k=2i+j;5.稀疏矩阵:当矩阵A中有非零元素S个,且S远小于元素总数时,称为稀疏矩阵;对其压缩的方法有顺序存储和链式存储;1三元组表:将表示稀疏矩阵的非零元素的三元组行号、列号、值按行或列优先的顺序排列得到的一个结点均是三元组的线性表,将该表的线性存储结构称为三元组表;其类型定义:definemaxsize10000typedefintdatatype;typedefstruct{inti,j;datatypev;}trituplenode;typedefstruct{trituplenodedatamaxsize;intm,n,t;}tritupletable;2带行表的三元组表:在按行优先存储的三元组表中加入一个行表记录每行的非零元素在三元组表中的起始位置;类型定义:definemaxrow100typedefstruct{tritulpenodedatamaxsize;introwtabmaxrow;intm,n,t;}rtritulpetable;6.广义表:是线性表的推广,广义表是n个元素的有限序列,元素可以是原子或一个广义表,记为LS;7.若元素是广义表称它为LS的子表;若广义表非空,则第一个元素称表头,其余元素称表尾;8.表的深度是指表展开后所含括号的层数;9.把与树对应的广义表称为纯表,它限制了表中成分的共享和递归;10.允许结点共享的表称为再入表;11.允许递归的表称为递归表;12.相互关系:线性表∈纯表∈再入表∈递归表;13.广义表的特殊运算:1取表头headLS;2取表尾tailLS;第六章树1.树:是n个结点的有限集T,T为空时称空树,否则满足:1有且仅有一个特定的称为根的结点;2其余结点可分为m个互不相交的子集,每个子集本身是一棵树,并称为根的子树;2.树的表示方法:1树形表示法;2嵌套集合表示法;3凹入表表示法;4广义表表示法;3.一个结点拥有的子树数称为该结点的度;一棵树的度是指树中结点最大的度数;4.度为零的结点称叶子或终端结点;度不为零的结点称分支结点或非终端结点5.根结点称开始结点,根结点外的分支结点称内部结点;6.树中某结点的子树根称该结点的孩子;该结点称为孩子的双亲;7.树中存在一个结点序列K1,K2,…Kn,使Ki为Ki+1的双亲,则称该结点序列为K1到Kn的路径或道路;8.树中结点K到Ks间存在一条路径,则称K是Ks的祖先,Ks是K的子孙;9.结点的层数从根算起,若根的层数为1,则其余结点层数是其双亲结点层数加1;双亲在同一层的结点互为堂兄弟;树中结点最大层数称为树的高度或深度;10.树中每个结点的各个子树从左到右有次序的称有序树,否则称无序树;11.森林是m棵互不相交的树的集合;12.二叉树:是n个结点的有限集,它或为空集,或由一个根结点及两棵互不相交的、分别称为该根的左子树和右子树的二叉树组成;13.二叉树不是树的特殊情况,这是两种不同的数据结构;它与无序树和度为2的有序树不同;14.二叉树的性质:1二叉树第i层上的结点数最多为2^i-1;2深度为k的二叉树至多有2^k-1个结点;3在任意二叉树中,叶子数为n0,度为2的结点数为n2,则n0=n2+1;15.满二叉树是一棵深度为k的且有2^k-1个结点的二叉树;16.完全二叉树是至多在最下两层上结点的度数可以小于2,并且最下层的结点集中在该层最左的位置的二叉树;17.具有N个结点的完全二叉树的深度为log2N取整加1;18.二叉树的存储结构1顺序存储结构:把一棵有n个结点的完全二叉树,从树根起自上而下、从左到右对所有结点编号,然后依次存储在一个向量b0~n中,b1~n存放结点,b0存放结点总数;各个结点编号间的关系:1i=1是根结点;i>1则双亲结点是i/2取整;2左孩子是2i,右孩子是2i+1;要小于n3i>n/2取整的结点是叶子;4奇数没有右兄弟,左兄弟是i-1;5偶数没有左兄弟,右兄弟是i+1;2链式存储结构结点的结构为:lchild|data|rchild;相应的类型说明:typedefchardata;typedefstructnode{datatypedata;structnodelchild,rchild;}bintnode;typedefbintnodebintree;19.在二叉树中所有类型为bintnode的结点和一个指向开始结点的bintree类型的头指针构成二叉树的链式存储结构称二叉链表;20.二叉链表由根指针唯一确定;在n个结点的二叉链表中有2n个指针域,其中n+1个为空;21.二叉树的遍历方式有:前序遍历、中序遍历、后序遍历;时间复杂度为On;22.线索二叉树:利用二叉链表中的n+1个空指针域存放指向某种遍历次序下的前趋和后继结点的指针,这种指针称线索;加线索的二叉链表称线索链表;相应二叉树称线索二叉树;23.线索链表结点结构:lchild|ltag|data|rtag|rchild;ltag=0,lchild是指向左孩子的指针;ltag=1,lchild是指向前趋的线索;rtag=0,rchild是指向右孩子的指针;rtag=1,rchild是指向后继的线索;24.查找p在指定次序下的前趋和后继结点;算法的时间复杂度为Oh;线索对查找前序前趋和后序后继帮助不大;25.遍历线索二叉树;时间复杂度为On;26.树、森林与二叉树的转换1树、森林与二叉树的转换1树与二叉树的转换:1}所有兄弟间连线;2}保留与长子的连线,去除其它连线;该二叉树的根结点的右子树必为空;2森林与二叉树的转换:1}将所有树转换成二叉树;2}将所有树根连线;2二叉树与树、森林的转换;是以上的逆过程;27.树的存储结构1双亲链表表示法:为每个结点设置一个parent指针,就可唯一表示任何一棵树;Data|parent2孩子链表表示法:为每个结点设置一个firstchild指针,指向孩子链表头指针,链表中存放孩子结点序号;Data|firstchild;3双亲孩子链表表示法:将以上方法结合;Data|parent|firstchild4孩子兄弟链表表示法:附加两个指向左孩子和右兄弟的指针;Leftmostchild|data|rightsibling28.树和森林的遍历:前序遍历一棵树等价于前序遍历对应二叉树;后序遍历等价于中序遍历对应二叉树;29.最优二叉树哈夫曼树:树的路径长度是从树根到每一结点的路径长度之和;将树中的结点赋予实数称为结点的权;30.结点的带权路径是该结点的路径长度与权的乘积;树的带权路径长度又称树的代价,是所有叶子的带权路径长度之和;31.带权路径长度最小的二叉树称最优二叉树哈夫曼树;32.具有2n-1个结点其中有n个叶子,并且没有度为1的分支结点的树称为严格二叉树;33.哈夫曼编码34.对字符集编码时,要求字符集中任一字符的编码都不是其它字符的编码前缀,这种编码称前缀码;35.字符出现频度与码长乘积之和称文件总长;字符出现概率与码长乘积之和称平均码长;36.使文件总长或平均码长最小的前缀码称最优前缀码37.利用哈夫曼树求最优前缀码,左为0,右为1;编码平均码长最小;没有叶子是其它叶子的祖先,不可能出现重复前缀;第七章图1.图:图G是由顶点集V和边集E组成,顶点集是有穷非空集,边集是有穷集;中每条边都有方向称有向图;有向边称弧;边的始点称弧尾;边的终点称弧头;G中每条边都没有方向的称无向图;3.顶点n与边数e的关系:无向图的边数e介于0~nn-1/2之间,有nn-1/2条边的称无向完全图;有向图的边数e介于0~nn-1之间,有nn-1条边的称有向完全图;4.无向图中顶点的度是关联与顶点的边数;有向图中顶点的度是入度与出度的和;所有图均满足:所有顶点的度数和的一半为边数;5.图GV,E,如V’是V的子集,E’是E的子集,且E’中关联的顶点均在V’中,则G’V’,E’是G的子图;6.在有向图中,从顶点出发都有路径到达其它顶点的图称有根图;7.在无向图中,任意两个顶点都有路径连通称连通图;极大连通子图称连通分量;8.在有向图中,任意顺序两个顶点都有路径连通称强连通图;极大连通子图称强连通分量;9.将图中每条边赋上权,则称带权图为网络;10.图的存储结构:1邻接矩阵表示法:邻接矩阵是表示顶点间相邻关系的矩阵;n个顶点就是n阶方阵;无向图是对称矩阵;有向图行是出度,列是入度;2邻接表表示法:对图中所有顶点,把与该顶点相邻接的顶点组成一个单链表,称为邻接表,adjvex|next,如要保存顶点信息加入data;对所有顶点设立头结点,vertex|firstedge,并顺序存储在一个向量中;vertex保存顶点信息,firstedge保存邻接表头指针;11.邻接矩阵表示法与邻接表表示法的比较:1邻接矩阵是唯一的,邻接表不唯一;2存储稀疏图用邻接表,存储稠密图用邻接矩阵;3求无向图顶点的度都容易,求有向图顶点的度邻接矩阵较方便;4判断是否是图中的边,邻接矩阵容易,邻接表最坏时间为On;5求边数e,邻接矩阵耗时为On^2,与e无关,邻接表的耗时为Oe+n;12.图的遍历:1图的深度优先遍历:类似与树的前序遍历;按访问顶点次序得到的序列称DFS序列;对邻接表表示的图深度遍历称DFS,时间复杂度为On+e;对邻接矩阵表示的图深度遍历称DFSM,时间复杂度为On^2;2图的广度优先遍历:类似与树的层次遍历;按访问顶点次序得到的序列称BFS序列;对邻接表表示的图广度遍历称BFS,时间复杂度为On+e;对邻接矩阵表示的图广度遍历称BFSM,时间复杂度为On^2;13.将没有回路的连通图定义为树称自由树;14.生成树:连通图G的一个子图若是一棵包含G中所有顶点的树,该子图称生成树;有DFS生成树和BFS生成树,BFS生成树的高度最小;非连通图生成的是森林;15.最小生成树:将权最小的生成树称最小生成树;是无向图的算法1普里姆算法:1确定顶点S、初始化候选边集T0~n-2;formvex|tovex|lenght2选权值最小的Ti与第1条记录交换;3从T1中将tovex取出替换以下记录的fromvex计算权;若权小则替换,否则不变;4选权值最小的Ti与第2条记录交换;5从T2中将tovex取出替换以下记录的fromvex计算权;若权小则替换,否则不变;6重复n-1次;初始化时间是On,选轻边的循环执行n-1-k次,调整轻边的循环执行n-2-k;算法的时间复杂度为On^2,适合于稠密图;2克鲁斯卡尔算法:1初始化确定顶点集和空边集;对原边集按权值递增顺序排序;2取第1条边,判断边的2个顶点是不同的树,加入空边集,否则删除;3重复e次;对边的排序时间是Oelog2e;初始化时间为On;执行时间是Olog2e;算法的时间复杂度为Oelog2e,适合于稀疏图;16.路径的开始顶点称源点,路径的最后一个顶点称终点;17.单源最短路径问题:已知有向带权图,求从某个源点出发到其余各个顶点的最短路径;18.单目标最短路径问题:将图中每条边反向,转换为单源最短路径问题;19.单顶点对间最短路径问题:以分别对不同顶点转换为单源最短路径问题;20.所有顶点对间最短路径问题:分别对图中不同顶点对转换为单源最短路径问题;21.迪杰斯特拉算法:1初始化顶点集Si,路径权集Di,前趋集Pi;2设置Ss为真,Ds为0;3选取Di最小的顶点加入顶点集;4计算非顶点集中顶点的路径权集;5重复3n-1次;算法的时间复杂度为On^2;22.拓扑排序:对一个有向无环图进行拓扑排序,是将图中所有顶点排成一个线性序列,满足弧尾在弧头之前;这样的线性序列称拓扑序列;1无前趋的顶点优先:总是选择入度为0的结点输出并删除该顶点的所有边;设置各个顶点入度时间是On+e,设置栈或队列的时间是On,算法时间复杂度为On+e;2无后继的顶点优先:总是选择出度为0的结点输出并删除该顶点的所有边;设置各个顶点出度时间是On+e,设置栈或队列的时间是On,算法时间复杂度为On+e;求得的是逆拓扑序列;第八章排序1.文件:由一组记录组成,记录有若干数据项组成,唯一标识记录的数据项称关键字;2.排序是将文件按关键字的递增减顺序排列;3.排序文件中有相同的关键字时,若排序后相对次序保持不变的称稳定排序,否则称不稳定排序;4.在排序过程中,文件放在内存中处理不涉及数据的内、外存交换的称内排序,反之称外排序;5.排序算法的基本操作:1比较关键字的大小;2改变指向记录的指针或移动记录本身;6.评价排序方法的标准:1执行时间;2所需辅助空间,辅助空间为O1称就地排序;另要注意算法的复杂程度;7.若关键字类型没有比较运算符,可事先定义宏或函数表示比较运算;8.插入排序1直接插入排序算法中引入监视哨R0的作用是:1保存Ri的副本;2简化边界条件,防止循环下标越界;关键字比较次数最大为n+2n-1/2;记录移动次数最大为n+4n-1/2;算法的最好时间是On;最坏时间是On^2;平均时间是On^2;是一种就地的稳定的排序;2希尔排序实现过程:是将直接插入排序的间隔变为d;d的取值要注意:1最后一次必为1;2避免d 值互为倍数;关键字比较次数最大为n^;记录移动次数最大为^;算法的平均时间是On^;是一种就地的不稳定的排序;9.交换排序1冒泡排序实现过程:从下到上相邻两个比较,按小在上原则扫描一次,确定最小值,重复n-1次;关键字比较次数最小为n-1、最大为nn-1/2;记录移动次数最小为0,最大为3nn-1/2;算法的最好时间是On;最坏时间是On^2;平均时间是On^2;是一种就地的稳定的排序;2快速排序实现过程:将第一个值作为基准,设置i,j指针交替从两头与基准比较,有交换后,交换j,i;i=j时确定基准,并以其为界限将序列分为两段;重复以上步骤;关键字比较次数最好为nlog2n+nC1、最坏为nn-1/2;算法的最好时间是Onlog2n;最坏时间是On^2;平均时间是Onlog2n;辅助空间为Olog2n;是一种不稳定排序;10.选择排序1直接选择排序实现过程:选择序列中最小的插入第一位,在剩余的序列中重复上一步,共重复n-1次;关键字比较次数为nn-1/2;记录移动次数最小为0,最大为3n-1;算法的最好时间是On^2;最坏时间是On^2;平均时间是On^2;是一种就地的不稳定的排序;2堆排序。
一、算法设计题(每题15分,共60分)答题要求:①用自然语言说明所采用算法的思想;②给出每个算法所需的数据结构定义,并做必要说明;③写出对应的算法程序,并做必要的注释。
1、有一个带头结点的单链表,每个结点包括两个域,一个是整型域info,另一个是指向下一个结点的指针域next。
假设单链表已建立,设计算法删除单链表中所有重复出现的结点,使得info域相等的结点只保留一个。
3、约瑟夫环问题(Josephus问题)是指编号为1、2、…,n的n(n>0)个人按顺时针方向围坐成一圈,现从第s个人开始按顺时针方向报数,数到第m个人出列,然后从出列的下一个人重新开始报数,数到第m的人又出列,…,如此重复直到所有的人全部出列为止。
现要求采用循环链表结构设计一个算法,模拟此过程。
4、编程实现单链表的就地逆置。
23.在数组 A[1..n]中有n个数据,试建立一个带有头结点的循环链表,头指针为h,要求链中数据从小到大排列,重复的数据在链中只保存一个.5、设计一个尽可能的高效算法输出单链表的倒数第K个元素。
3、假设以I和O分别表示入栈和出栈操作。
栈的初态和终态均为空,入栈和出栈的操作序列可表示为仅由I和O组成的序列,称可以操作的序列为合法序列,否则称为非法序列。
(15分)(1)下面所示的序列中哪些是合法的?A. IOIIOIOOB. IOOIOIIOC. IIIOIOIOD. IIIOOIOO(2)通过对(1)的分析,写出一个算法,判定所给的操作序列是否合法。
若合法,返回true,否则返回false(假定被判定的操作序列已存入一维数组中)。
5、设从键盘输入一整数的序列:a1, a2, a3,…,an,试编写算法实现:用栈结构存储输入的整数,当ai≠-1时,将ai进栈;当ai=-1时,输出栈顶整数并出栈。
算法应对异常情况(入栈满等)给出相应的信息。
设有一个背包可以放入的物品重量为S,现有n件物品,重量分别为W1,W2,...,W n。
《数据结构》课程复习资料一、填空题:1.设需要对5个不同的记录关键字进行排序,则至少需要比较________次,至多需要比较__________次。
2.设二叉排序树的高度为h,则在该树中查找关键字key最多需要比较_________次。
3.设在长度为20的有序表中进行二分查找,则比较一次查找成功的结点数有_________个,比较两次查找成功有结点数有_________个。
4.数据结构从逻辑上划分为三种基本类型:___________、__________和___________。
5.在一个具有n个顶点的无向完全图中,包含有________条边,在一个具有n个顶点的有向完全图中,包含有________条边。
6.向一棵B_树插入元素的过程中,若最终引起树根结点的分裂,则新树比原树的高度___________。
7.在堆排序的过程中,对任一分支结点进行筛运算的时间复杂度为________,整个堆排序过程的时间复杂度为________。
8.在快速排序、堆排序、归并排序中,_________排序是稳定的。
9.在有n个叶子结点的哈夫曼树中,总结点数是_______。
10.一棵树T采用二叉链表存储,如果树T中某结点为叶子结点,则在二叉链表BT中所对应的结点一定_______。
11.3.已知数组A[10][10]为对称矩阵,其中每个元素占5个单元。
现将其下三角部分按行优先次序存储在起始地址为1000的连续的内存单元中,则元素A[5,6]对应的地址是_______。
12.在有n个结点的无向图中,其边数最多为_______。
13.取出广义表A=(x,(a,b,c,d))中原子x的函数是_______。
14.对矩阵采用压缩存储是为了___ ____。
15.带头结点的双循环链表L为空表的条件是_______。
16.设线性表中元素的类型是实型,其首地址为1024,则线性表中第6个元素的存储位置是。
17.对于顺序存储的栈,因为栈的空间是有限的,在进行运算时,可能发生栈的上溢,在进行运算时,可能发生栈的下溢。
第一章概论自测题答案一、填空题1. 数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象以及它们之间的关系和运算等的学科。
2. 数据结构被形式地定义为(D, R),其中D是数据元素的有限集合,R是D上的关系有限集合。
3. 数据结构包括数据的逻辑结构、数据的存储结构和数据的运算这三个方面的内容。
4. 数据结构按逻辑结构可分为两大类,它们分别是线性结构和非线性结构。
5. 线性结构中元素之间存在一对一关系,树形结构中元素之间存在一对多关系,图形结构中元素之间存在多对多关系。
6.在线性结构中,第一个结点没有前驱结点,其余每个结点有且只有 1个前驱结点;最后一个结点没有后续结点,其余每个结点有且只有1个后续结点。
7. 在树形结构中,树根结点没有前驱结点,其余每个结点有且只有1个前驱结点;叶子结点没有后续结点,其余每个结点的后续结点数可以任意多个。
8. 在图形结构中,每个结点的前驱结点数和后续结点数可以任意多个。
9.数据的存储结构可用四种基本的存储方法表示,它们分别是顺序、链式、索引和散列。
10. 数据的运算最常用的有5种,它们分别是插入、删除、修改、查找、排序。
11. 一个算法的效率可分为时间效率和空间效率。
二、单项选择题(B)1. 非线性结构是数据元素之间存在一种:A)一对多关系 B)多对多关系C)多对一关系 D)一对一关系( C )2. 数据结构中,与所使用的计算机无关的是数据的结构;A) 存储 B) 物理C) 逻辑 D) 物理和存储(C)3. 算法分析的目的是:A) 找出数据结构的合理性B) 研究算法中的输入和输出的关系C) 分析算法的效率以求改进D) 分析算法的易懂性和文档性(A)4. 算法分析的两个主要方面是:A) 空间复杂性和时间复杂性B) 正确性和简明性C) 可读性和文档性D) 数据复杂性和程序复杂性(C )5. 计算机算法指的是:A) 计算方法B) 排序方法C) 解决问题的有限运算序列D) 调度方法(B)6. 计算机算法必须具备输入、输出和等5个特性。
一、选择题1.数据结构中,与所使用的计算机无关的是数据的 ______结构;A)存储 B)物理 C)逻辑 D)物理和存储2.算法分析的目的是:A)找出数据结构的合理性 B)研究算法中的输入和输出的关系C)分析算法的效率以求改进 D)分析算法的易懂性和文档性3.计算机算法必须具备输入.输出和_______等5个特性.A)可行性、可移植性和可扩充性 B)可行性、确定性和有穷性C)确定性、有穷性和稳定性D)易懂性、稳定性和安全性4.一个向量第一个元素的存储地址是100 ,每个元素的长度为 2 ,则第5个元素的地址是_______A)110 B)108 C)100 D)1205设有两个串p和q ,求q在p中首次出现的位置的运算称作:A) 连接 B)模式匹配 C)求子串 D) 求串长6 .向一个有127个元素的顺序表中插入一个新元素并保持原来顺序不变 ,平均要移动_______ 个元素A)8 B)63.5 C)63 D) 77设矩阵A 是一个对称矩阵,为了节省存储,将其下三角部分按行序存放在一维数组B[1,n(n+1)/2]中,对下三角部分中任一元素ai,j(i≤j),在一维数组B中下标K的值是:A)i(i-1)/2+j-1 B)i(i-1)/2+j C)i(i+1)/2+j-1 D) i(i+1)/2+j8. 二叉树是非线性数据结构,所以_______A) 它不能用顺序存储结构存储 B)它不能用链式存储结构存储C)顺序存储结构和链式存储结构都能存储 D)顺序存储结构和链式存储结构都不能使用9. 有8个结点的无向连通图最少有 _______ 条边A) 5 B) 6 C) 7 D) 810. 所有排序方法中, 关键字比较的次数与记录的初始排列次数无关的是 _______A)希尔 B) 冒泡 C) 插入 D) 选择11、算法分析的目的是_________________.A.找出数据结构的合理性 B.研究算法中的输入和输出的关系C.分析算法的效率以求改进 D.分析算法的易懂性和文档性12、下面程序段的时间复杂度是____________。
i=1:while(i<=n)i=i*3;A.n B.log2n C log3n D.n13.一个栈的入栈序列是a、b、c、d、e,则栈的不可能的输出序列是________________.A.edcbaB.decbaC.dceabD.abcde14、深度为5的二叉树至多有_______个结点。
A.16 B. 32 C.31 D.1015、设n,m为一棵二叉树上的两个结点,在中序遍历时,n在m前的条件是______________. A.n在m右方 B.n是m祖先 C.n在m左方 D.n是m子孙16、一个具有n个顶点的无向图最多有__________边。
A.n B.n(n-1) C.2n D.n(n-1)/217、采用邻接表存储的图的深度优先遍历算法类似于二又树的____________.A.先序遍历 B.中序遍历 c.后序遍历 D.按层遍历18、有一个长度为12的有序表,按二分查找法对该表进行查找,在表内各元素等概率情况下查找成功所需的平均比较次数为________。
A.35/12 B.37/12 C.39/12 D.43/1219、顺序查找法适合于存储结构为________的线性表.A.散列存储 B.压缩存储 c.索引存储 D.顺序存储或链接存储20、在n较小时,待排序的元素序列又基本有序的前提下,效率最高的排序方法是_________。
A.插入排序 B.选择排序 C.快速排序 D.归并排序二、填空题1. 数据的存储结构可用四种基本的存储方法表示,它们分别是___顺序____、___链接____、__索引_____ 和__散列_____。
2. 在一个循环队列中,队首指针指向队首元素的__前一个_____位置。
3. 向一个长度为n的向量的第i个元素( 1≤i≤n=1)之前插入一个元素时,需向后移动___n-i+1 ____个元素,删除第i个元素(1≤i≤n)时,需向前移动_ n-i-1 ______个元素。
4. 向量、栈和队列都是__线性_____结构,可以在向量的___端节点____位置插入和删除元素;对于栈只能在__栈顶_____插入和删除元素;对于队列只能在__队尾_____插入和__队头_____删除元素。
5. 在动态存储管理中的三种分配策略是_______、_______和_______。
6. 广义表(((a)))的表头是_______, 表尾是_______。
7. 已知主串s=’ADBADABBAABADABBADADA’,模式串pat=’ADABBAD’。
写出模式串的nextval 函数值_______。
8.一棵具有257个结点的完全二叉树,它的深度为 _______。
9.n 个顶点e 条边的图采用邻接矩阵存储,深度优先遍历算法的时间复杂度为_______;若采用邻接表存储时,该算法的时间复杂度为_______。
10.已知序列{32,17,18,60,40,7,73,65,85},给出快速排序第一趟的结果(升序),并给出该序列的初始小根堆_______。
11、根据数据元素之间关系的不同特性,通常有四类基本结构:______、____、______和_______.12、在具有n个单元的循环队列中,队满时共有________个元素。
13、线性结构的数据有:____、_____、____和____等四种存储方式。
14、已知二叉树T的中根序列是CBEDAGJIFH,后根序列是CEDBJIGHFA,二叉树根结点的右子女是_______。
15、连通的无向图G有n个顶点,则图的最小生成树的边数为______.16、有一个有序表为(1,3,9,12,32,41,45,62,75,82,95,100),当二分查找值为82的结点时,查找成功需比较________次。
17、有一个散列表,H为对应的散列函数,对两个不同的关键码值k1和k2互为同义词的概念是指_________.18、为了提高外排序的效率,可通过减少归并的趟数s来减少读/写次数d,为了减少s,通常可用_______的方法来提高归并路数k,或用_____的方法来降低初始归并段m。
19、在对一组记录{54,38,96,23,15,72,60.45,83}进行直接插入排序时,当把第7个记录60插入到有序表时,为寻找插入位置需比较_______次.20、利用平衡二叉树的插入算法,向下列平衡二又树插入15后,经调整得到新的平衡二叉树,其结果是_______.23/ \18 26/ \10 21三.判断题1、线性表的每个结点只能是一个简单类型,而链表的每个结点可以是一个复杂类型。
2、顺序表结构适宜于进行顺序存取,而链表适宜于进行随机存取。
3、链表的每个结点中都恰好包含一个指针。
4、用二叉链表法(llink-rlink )存储包含n 个结点的二叉树,结点的2n 个指针区域中有n +1个为空指针。
5、二分查找同顺序查找一样,对数据表没有什么要求。
四、 应用题1、已知一单向链表L,写出在指定的P结点前成功插入一个新结点的有关语句(包括产生一个新结点的有关语句,并画出链表结构图)。
2、已知二叉树的先序、中序遍历序列分别为ABDFJGKCEHILM 和BFJDGKACHELIM ,试写出后序遍历时得到的结点序列。
3、设给定权集W={2,3,4,7,8,9},试构造关于W的一棵哈夫曼树和哈夫曼编码,并求其加权路径长度WPL。
4、给出入如图G所示的无向图的邻接表,从1点出发的DFS 序列和BFS 序列以及使用Prim 和Kruskal 算法构造的最小生成树。
5、设关键字集合为:{10,20,30,50,40},依次输入各结点,画出平衡二叉树的构造过程。
6、已知一组关键字为{25,36,41,38,44,15,68,12,6,51,26}的数据,H(key)=key%13,α=0.75,用线性探查法解决冲突,构造这关键字的散列表,并计算成功查找的平均找长度ASL 。
7、 已知一单向链表L ,写出在指定的P 结点后成功插入一个新结点的有关语句(包括产生一个新结点的有关语句,井画出链表结构图)。
8、画出图G 的邻接链表,根据此邻接链表写出从1结点出发的DFS序列和BFS 序列,并用Prim 和Kruskal 算法求下列图G 的最小生成树.在算法执行到某一时刻,已选取的顶点集U={1,2,3),边集TE={(1,2),(2,3)},要选取下一条权值最小的边,应从哪一边集中选取?并画出最小生成树。
9、有一份电文中共使用5个字符:它们的出现频率依次为4、7、5、2、9,试画出对应的Huffman 树,写出每个字符的Huffman 编码,并计算它的WPL 。
10、已知序列<50,87,51,6l ,90,17,89,27,65,46},请给山采用快速排序法对该序列作升序排序时的每一趟的结果。
11、设有一组关键字(1,23,14,55,20,84,27,68,11,10),采取哈希函数H(key)=key mod 11,采用开放地址法的随机探测解决冲突(随机序列为:3,54,11,36,19,…),试在0~15的散列地址空间中对该关键字序列构造哈希表,并求它的成功查找的ASL.五、编程题1、编写一个使用栈stack实现对二叉树进行非递归先根遍历的函数.2、编写一个采用直接选择排序方法进行升序排序的函数。
3、编写一个采用双冒泡进行升序排序的算法(即:上下交替进行)。
4、编写一个计算二叉树中叶子结点的数目递归算法。
一选择题(每小题2分,共20分)二.填空题(每小题2分,共20分)三.判断题(每小题2分,共10分)四.应用题(每小题5分,共30分)五.编程题(每小题10分,共20分)。