数据结构课后习题答案合集.pdf
《数据结构课后习题答案合集.pdf》由会员分享,可在线阅读,更多相关《数据结构课后习题答案合集.pdf(15页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第一章绪论1.数据结构课程研究的内容是什么?其中哪个方面和计算机无关?答:非数值计算,包括数据的 逻辑结构、存储结构,操作的实现2.数据结构按逻辑结构可分为哪几类?(不要简单答线性和非线性)3.为什么要进行算法分析?(分析算法的效率以求改进),算法分析主要研究哪几个方面?(时间效率和空间效率,即:空间复杂性和时间复杂性)4 .分 析 下 面 各 程 序 段 的 时 间 复 杂 度。1.for(i=0;in;i+)for(j=0;jm;j+)Aij=0;3.x=0;for(i=1;in;i+)for(j=1;j=n-i;j+)x+;解:因为x+共执行了 nl+n2+1=n(n-l)/2,所以执行
2、时间为O(I?)/三 少 仙-正 也721=1 J=3+l 1=1 L2.s=0;for i=0;in;i+)for(j=0;jn;j+)s+=Bifj;sum=s:4.i=l;while(i=n)i=i*3;答:0 (losn)5、数据结构被形式地定义为(D,R),其 中 D 是 数据元素 的有限集合,R 是 D 上的 关系 有限集合。设 有 数 据 逻 辑 结 构 S=(D,R),试按各小题所给条件画出这 些 逻 辑 结 构 的 图 示,并 确 定 相 对 于 关 系 R,哪 些 结 点 是 开 始 结 点,哪些结点是终 端 结 点?1.【严蔚敏习题集P7 1.3】D=dl,d2,d3,d
3、4 R=(dl,d2),(d2,d3),(d3,d4)答:d l-d 2 f d 3 fd 4 dl一无直接前驱,是首结点 d4一无直接后继是尾结点1.D=d l,d 2,d 9 R=(d l,d 2),(d l,d 3),(d 3,d 4),(d 3,d 6),(d 6,d 8),(d 4,d 5),(d 6,d 7),(d 8,d 9)答:此图为树形结构 d l一无直接前驱,是根结点 d 2,d 5,d 7,d 9一无直接后继是叶子结点2.D=d l,d 2,d 9 R=(d l,d 3),(d l,d 8),(d 2,d 3),(d 2,d 4),(d 2,d 5),(d 3,d 9),
4、(d 5,d 6),(d 8,d 9),(d 9,d 7),(d 4,d 7),(d 4,d 6)答:此图为图形结构 d l,d 2一无直接前驱,是开始结点 d 6,d 7一无直接后继是终端结点(2)(3)学习方法提示:同学们一定要把教材阅读,理解以后再做题,暂时不要做那些针对考试的“茴香豆的茴有几种写法的题”,以后要参加那些考试的时候再说。平时一定要以理解为核心,没有必要把一些细枝末节,甲乙丙丁的条款记住,甚至有些说法,这样说也有理,那样说也有理,没有必要钻牛角尖。比如上面习题中,数据结构分几类,有的教材上写“线性和非线性二类”,有的写“线性,树,图三类”,还有的写“线性,树,图,集合四类”
5、,作者是从不同的角度去看待的。作为学习,这个问题所谓的“标准答案”是次要的。不要强记公式,公式应该是自己理解,自己能推导出来。比如评价顺序表的删除操作的复杂度,你应该记得思路,而不是公式(完全忘记了也没关系)。我本人就不记得很多公式,但是要用的时候知道怎么自己推导出来,知道去哪里找到这个公式,那就行了,有些公式,在自己的工作中老用老用的,自然就记住了。人的大脑是有限的,要把这有限的“存储容量”用来记住你要用的东西。至于将来要参加程序员的考试的时候,需要“标准答案”和考试速度的时候才需要多看那些试题及所谓的“标准答案”。那些考试,总是把一个简单的说法用很复杂的方式转弯抹角地说出来,但在学习的过程
6、中应该抓住实质与核心,而不是把精力放在牛角尖上。在你不熟悉教材内容的时候,你发现那些说法都是晦涩难懂的,而当你渐渐地熟悉问题的实质以后,大多数问题对你来说都是自然而然的,是你自己能解决的。欢迎大家共同讨论学习的方法。以后同学们和我的心得将整理以后继续发出。杨华谨识第二章线性表1、填空1、向一一个长度为n 的向量的第i 个元素(lWiWn+1)之前插入一个元素时,需向后移动 k jil个元素。向一个长度为n 的向量中删除第i 个元素(l iWn)时,需向前移动n-i 个元素。.2、顺序表中插入或删除个元素,需要平均移动表中一半元素,具体移动的元素个数与一衣长和该元素在表中的位置 有关。在顺序表中
7、访问任意一-结点的时间复杂度均为0(1),因此,顺序表也称为随机存取 的数据结构。.一个向量第一个元素的存储地址是1 0 0,每个元素的长度为2,则第5 个 元 素 的 地 址 是 108;向一个有127个元素的顺序表中插入一个新元素并保持原来顺序不变,平均要移动63.5个元素:3、在 n 个结点的单链表中要删除已知结点*p,需找到它的前驱结点的地址,其时间复杂度为 O(n)。现有一个具有五个元素的线性表L=23,17,47,05,31,若它以链接方式存储在下列100119号地址空间中,每个结点由数据(占2 个字节)和指针(占2 个字节)组成,如下所示:05U17X23V31Y47Z100 1
8、20其中指针X,Y,Z 的值分别为多少?该线性表的首结点起始地址为多少?末结点的起始地址为多少?(10分)答:X=116 Y=0 Z=100 首址=108 末址二112(小心)二、简答题1.试比较顺序存储结构和链式存储结构的优缺点。在什么情况下用顺序表比链表好?答:顺序存储时,相邻数据元素的存放地址也相邻(逻辑与物理统一);要求内存中可用存储单元的地址必须是连续的。优点:存储密度大(用动态分配的方法,一般都情况下都接近I),存储空间利用率高。缺点:插入或删除元素时不方便。顺序表才适合随机存取;链式存储时,相邻数据元素可随意存放,但所占存储空间分两部分,一部分存放结点值,另一部分存放表示结点间关
9、系的指针;优点:插入或删除元素时很方便,使用灵活。缺点:存 储 密 度 小 存 储空间利用率低。顺序表适宜于做查找这样的静态操作;链表宜于做插入、删除这样的动态操作。若线性表的长度变化不大,且其主要操作是查找,则采用顺序表;若线性表的长度变化较大,且其主要操作是插入、删除操作(尤其是这些操作主要发生在线性表的靠表头),则采用链表。2.描述以下三个概念的区别:头指针、头结点、首元结点(第一个元素结点)。在单链表中设置头结点的作用是什么?答:首元结点是指链表中存储线件衣中第个数据兀索a i 的结点.Ir操作方便.辿常仁链我的苜兀结点之前附设一个结点,称为头结点,该结点的数据域中不存储线性表的数据元
10、素,其作用是为了对链表进行操作时,可以对空表、非空表的情况以及对首元结点进行统一处理。头指针是指向链我中第 个结 点(域为头结点或为首兀结点)的指针。若链收中附设头结点,则不管线性衣足否为%表,头指针均不为空。算法中首元节点统一操作。杳则表示空表的链表的头指针为空。这三个概念对单链表、双向链表和循环链表均适用。头结点头指针 首元结点Head今datalink简而言之,头指针是指向链表中第 个结点(或为头结点或为首元结点)的指针;头结点是在链表的首元结点之前附设的一个结点:数据域内只放空表标志和表长等信息(内放头指针?那还得另配一个头指针!)首元素结点是指链表中存储线性表中第一个数据元素a,的结
11、点。数据结构学习讨论:要注重实践上次课结束的时候,有个同学找到我,说上课的时候总是在强调结构与算法,但是没有用C 语言真正地写出来,总觉得心里“不舒服”。有这种感觉就好了。数据结构是一门强调动手的课程,希望同学们能把自己感兴趣的算法改写成能正确执行的C 语言算法。很多同学刚开始写程序的时候很困难,这是正常的。因为这时候你既要考虑算法的思路,又要复习自己不怎么熟练的c 语言,编译器也不太熟悉。其实,只要坚持段时间,就能突破这个关口了。第三章堆栈与队列一、填空:向量、栈和队列都是 线性 结构,可以在向量的 任何 位置插入和删除元素;栈是种特殊的线性表,允许插入和删除运算的一 端称为 栈顶。不允许插
12、入和删除运算的一端称为 栈底。所以又称为 后进先 出型表。对于队列是只能在 队尾 插入和 队首 删除元素的特殊线性表达。先进先出型结构二、问答1、把教材第54页的例3-1重新做一遍。要求在自己阅读懂的基础上重复填写该表。不要抄书上的答案。2、.设有编号为1,2,3,4 的四辆列车,顺序进入一个栈式结构的车站,具体写出这四辆列车开出车站的所有可能的顺序。答:至少有14种。全进之后再出情况,只 有1种:4,3,2,1 进3个之后再出的情况,有3种,3,4,2/3,2,4,1 3,2,1,4 进 2 个之后再出的情况,有 5 种,2,4,3,1 2,3,4,1 2,1,3,4 2,1,43 2,1,
13、3,4 进 1 个之后再出的情况,有 5 种,1,4,32 1.3,2,4 1,3,4,2 1,2,3,4 1,2,4,33.画图说明:顺序队的“假溢出”是怎样产生的?(答案见修改后的讲义)画图说明如何用循环队列解决?使用循环队列之后,队列的初始化,判断队列满,判断队列空,寻找入队时的位置,寻找出队列元素的位置的C语言语句以及表达式都怎么写?算循环队列中目前有多少个元素?注意变量名称按照教材卜一的约定。4.述以下算法的功能(栈和队列的元素类型均为int)。void algo3(Queue&Q)(Stack S;int d;InitStack(S);while(!QueueEmpty(Q)DeQ
14、ueue(Q,d);Push(S,d);while(!StackEmpty(S)Pop(S,d);EnQueue(Q,d);)答:该算法的功能是:利用堆栈做辅助,将队列中的数据元素进行逆置。第四章串注:本章习题很少,也很简单。,但是本章内容是比较多,比较复杂的。所以习题的目的仅仅是主要是督促同学们阅读教材和电子讲义,而不是查着书把下面的题目做出来就算掌握了。所以要尽力阅读完教材和电子讲义内容后再回答。看看在不回头再翻教材的前提下,能不能都做对。1.串有什么特殊性?串的操作有什么特殊性?2.简述空串和空格串的区别。答:数据元素是一个字符;常常以一串元素为操作对象,而不是一个。3.对求子串操作:S
15、ubString(&Sub,S,pos,len),推 导pos和le n的合法范围。答:串 S 存在,iWposWStrLength(S)且 OWlenWStrLength(S)-pos+l。4.什 么 是 存 储 密 度?答:数据元素所占存储位/实际分配的存储位5.讨论题:打 开windows的记事本,和同学讨论如何实现一个类似的文本编辑器。主要讨论以下问题:(1)如何在内存存储文本?即:你将使用什么样的结构。(4)键盘输入字符的时候,你的存储结构如何变化?(3)如何实现“文件菜单”中的新建,打开,和保存。(3)如 何 实 现“编辑菜弹”中的撤消,剪切,复制,粘贴,删除,查找和替换功能?觉得
16、思考比较完整的同学可以到讲台上来给大家讲解自己的思路,非常欢迎。学习方法讨论:在学习数据结构的时候,没有必要把所有的算法背诵下来,有一些算法是非常烦琐的,如果暂时不开发相关软件,没有必要把细节记得,而是要记得思路。会推导当中的一些限制。另外一定要注意应用,学习的时候,一定要常常想,这个结构可以拿来干什么?比如:学习栈和队列的时候,就要想想平时使用的软件什么时候会用到这两个工具;学习串的时候要思考怎样利用串来实现文本编辑。从某个角度上来说,软件开发就是围绕几个数据结构展开开发工作的,面对一个实际的问题,要对其编程,首先就要思考“如何抽象问题”,“如何存储”,“在这个存储结构上如何实现操作功能”,
17、“怎样才能提高效率”。总之在编码之前首先要有一个全面的思考,而不是想想写写,写写想想,发现结构不好,效率不高又改来改去。一一这恰恰是很多软件公司亏本的原因,这样导致了结构混乱,编码混乱,难以维护,完全推倒从来又浪费了人力。有兴趣的同学可以浏览 软件工程的教材,看看应该如何对软件开发的过程进行控制和管理。不过大部分 软件工程教材上写的东西大多是“学院派”的,实际的开发中根本没有那样做。浏 览 软件工程的目的是了解基本的概念和软件开发中的注意事项。总的来说,是“想好了再写”。一个小型软件如果需要三个月来开发,往往编码本身只需 要 15天左右,前面的时间主要用在分析用户的需求(了解用户心目中软件成品
18、是怎样的),可行性的调查和结构设计。可见结构的设计在软件开发中的重要性。杨华谨识第五章数组1.假设有二维数组A6*8,每个元素用相邻的6 个字节存储,存储器按字节编址。已知A 的起始存储位置(基地址)为1000,则数组A 的体积(存储量)为 288 B;末尾元素的第一个字节地址为 1282;若按行存储时,元素A u 的第一个字节地址为1000+(1*8+4)X6=1072。(注:数组是从0 行 0 列还是从1行 1 列计算起呢?由末单元为A57(5 7!)可知,是从0行 0 列开始!)2 若将一个n 阶对称方阵压缩存储到一维数组san(n+l)/2+l中,将一维数组的0 号单元用来存储矩阵中下
19、三角元素的个数,推导sak和矩阵元素a”的对应关系。3 思考题:如何将对角矩阵压缩存储到一维数组中?也就是推导矩阵中元素的下标和数组中元素的下标的对应关系。(不要求详细推导过程和结果,此题不交,自己画草稿叙述清楚)4 自己用C 语言定义稀疏矩阵的三元组顺序表,如果定义与书上不同,你看看你丢失的是矩阵的什么信息,没有一次写对的同学一定要因为这次错误而牢记你犯了什么错误。(不要抄书。此题不交)5、对三元组顺序表存储的矩阵进行转置操作时,是怎样确定原三元组顺序表的元素在转置后的矩阵的位置的?(此题不交,自己画草稿叙述清楚)6、在行逻辑连接的顺序表存储结构下,自己画图演示plO l的(5-5式)中两个
20、矩阵的乘法的实现过程。(此题不交,自己画草稿叙述清楚)7、用十字链表存储稀疏矩阵的时候,如果两个矩阵A,B 相加,实现A=A+B,则最终在A上实现的是那些操作?8.求下列广义表操作的结果:(1)GetHead (a,b),(c,d)=(a,b);头兀索不必加括号(2)GetHead GetTail(a,b),(c,d)=(c,d);(3)GetHead GetTail GetHead(a,b),(c,d)=b;(4)GetTail GetHead GetTail(a,b),(c,d)=(d);注:广义表的操作主要使用递归来实现。课堂上暂时没有详细讲。对感兴趣的同学,建议学完树和图以后再学习,因
21、为在那里会对递归有更深刻的理解。第六章树注:习题不能覆盖所有的知识点,先阅读完电子讲义和教材再开始做练习。一、填空先记忆关于二叉树和完全二叉树的5 个重要性质的结论,做 1,2,3 题。1.一棵深度为6 的满二叉树有9+112=0+4=理-1=3 1 个分支结点和2 =3 2 个叶子。注:满二叉树没有度为1 的结点,所以分支结点数就是二度结点数。2.一棵具有2 5 7 个结点的完全二叉树,它的深度为 9。(注:用 L log2(n)+1=|_ 8.xx+l=93.设一棵完全二叉树具有1000个结点,则此完全二叉树有5 0 0 个叶子结点,有499 个度为2 的结点,有 1 个结点只有非空左子树
22、,有 Q 个结点只有非空右子树。答:最后一层叶子为:1000-(29-1)=489这些接点共245双亲,而倒数第二层是256接点,叶子是 256-245=11.289+11=500;或者有个公式叶子数=卬2=500;n2=n()-1=499。nl=1000-500-499=l0:完全二叉树没有这种接点。答:最快方法:用叶子数=同=500,n2=n(rl=4 9 9 o 另外,最后一结点为2 i属于左叶子,右叶子是空的,所以有1 个非空左子树。完全二叉树的特点决定不可能有左空右不空的情况,所以非空右子树数=0.4.把一棵树转换为二叉树后,这棵二叉树的形态是 唯一的(唯一的/有多种)二、简答题1.
23、一棵度为2 的树与一棵二叉树有何区别?答:度为2 的树从形式上看与二叉树很相似,但它的子树是无序的,而二叉树是有序的。即,在一般树中若某结点只有一个孩子,就无需区分其左右次序,而在二叉树中即使是个孩子也有左右之分。2.给定二叉树的两种遍历序列,分别是:前序遍历序列:D,A,C,E,B,H,F,G,I:中序遍历序列:D,C,B,E,H,A,G,I,F,试画出二叉树B,写出后序遍历的序列。并简述由任意二叉树B 的前序遍历序列和中序遍历序列求二叉树B 的思想方法。解:方法是:由前序先确定ro o t,由中序可确定root的左、右子树。然后由其左子树的元素集合和右子树的集合对应前序遍历序列中的元素集合
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课后 习题 答案
限制150内