ImageVerifierCode 换一换
格式:DOCX , 页数:156 ,大小:391.72KB ,
资源ID:26080291      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/26080291.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(完整版数据结构课后习题答案doc.docx)为本站会员(b****9)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

完整版数据结构课后习题答案doc.docx

1、完整版数据结构课后习题答案doc第 1 章 绪论1 述下列概念:数据、数据元素、数据 、数据 象、数据 构、 构、存 构、抽象数据 型。答案:数据 :是客 事物的符号表示,指所有能 入到 算机中并被 算机程序 理的符号的 称。 如数学 算中用到的整数和 数, 文本 所用到的字符串, 多媒体程序 理的 形、 像、声音、 画等通 特殊 定 后的数据。数据元素 :是数据的基本 位,在 算机中通常作 一个整体 行考 和 理。在有些情况下,数据元素也称 元素、 点、 等。数据元素用于完整地描述一个 象,如一个学生 , 中棋 的一个格局(状 )、 中的一个 点等。数据 :是 成数据元素的、有独立含 的、不

2、可分割的最小 位。例如,学生基本信息表中的学号、姓名、性 等都是数据 。数据 象 :是性 相同的数据元素的集合,是数据的一个子集。例如:整数数据 象是集合 N=0 , 1, 2, ,字母字符数据 象是集合 C=A, B, , Z, a, b, z ,学生基本信息表也可是一个数据 象。数据 构 :是相互之 存在一种或多种特定关系的数据元素的集合。 句 ,数据 构是 “ 构”的数据元素的集合, “ 构”就是指数据元素之 存在的关系。 构 :从 关系上描述数据,它与数据的存 无关,是独立于 算机的。因此,数据的 构可以看作是从具体 抽象出来的数学模型。存 构: 数据 象在 算机中的存 表示,也称 物

3、理 构 。抽象数据 型 :由用 定 的,表示 用 的数学模型,以及定 在 个模型上的一 操作的 称。具体包括三部分:数据 象、数据 象上关系的集合和 数据 象的基本操作的集合。2 一个数据 构的例子,叙述其 构和存 构两方面的含 和相互关系。答案:例如有一 学生基本信息表,包括学生的学号、姓名、性 、籍 、 等。每个学生基本信息 一个数据元素,学生 按 序号排列,形成了学生基本信息 的 性序列。 于整个表来 , 只有一个开始 点 ( 它的前面无 ) 和一个 端 点 ( 它的后面无 ) ,其他的 点 各有一个也只有一个直接前 和直接后 。 学生 之 的 种关系就确定了学生表的 构,即 性 构。

4、些学生 在 算机中的存 表示就是存 构。 如果用 的存 元 ( 如用数 表示) 来存放 些 , 称 序存 构;如果存 元不 ,而是随机存放各个 ,然后用指 行 接, 称 式存 构。即相同的 构,可以 不同的存 构。3 述 构的四种基本关系并画出它 的关系 。1答案:( 1)集合结构数据元素之间除了“属于同一集合”的关系外,别无其他关系。例如,确定一名学生是否为班级成员,只需将班级看做一个集合结构。( 2)线性结构数据元素之间存在一对一的关系。例如,将学生信息数据按照其入学报到的时间先后顺序进行排列,将组成一个线性结构。( 3)树结构数据元素之间存在一对多的关系。例如,在班级的管理体系中,班长管

5、理多个组长,每位组长管理多名组员,从而构成树形结构。( 4)图结构或网状结构数据元素之间存在多对多的关系。例如,多位同学之间的朋友关系,任何两位同学都可以是朋友,从而构成图形结构或网状结构。其中树结构和图结构都属于非线性结构。四类基本逻辑结构关系图4存储结构由哪两种基本的存储方法实现?答案:( 1)顺序存储结构顺序存储结构是借助元素在存储器中的相对位置来表示数据元素之间的逻辑关系,通常借助程序设计语言的数组类型来描述。( 2)链式存储结构顺序存储结构要求所有的元素依次存放在一片连续的存储空间中,而链式存储结构,无需占用一整块存储空间。但为了表示结点之间的关系,需要给每个结点附加指针字段,用于存

6、放后继元素的存储地址。所以链式存储结构通常借助于程序设计语言的指针类型来描述。5选择题( 1)在数据结构中,从逻辑上可以把数据结构分成( )。A动态结构和静态结构 B 紧凑结构和非紧凑结构2C线性结构和非线性结构 D 内部结构和外部结构答案: C( 2)与数据元素本身的形式、内容、相对位置、个数无关的是数据的( )。A存储结构 B 存储实现C逻辑结构 D 运算实现答案: C( 3)通常要求同一逻辑结构中的所有数据元素具有相同的特性,这意味着( )。A数据具有同一特点B不仅数据元素所包含的数据项的个数要相同,而且对应数据项的类型要一致C每个数据元素都一样D数据元素所包含的数据项的个数要相等答案:

7、 B( 4)以下说法正确的是( )。A数据元素是数据的最小单位B数据项是数据的基本单位C数据结构是带有结构的各数据项的集合D一些表面上很不相同的数据可以有相同的逻辑结构答案: D解释:数据元素是数据的基本单位,数据项是数据的最小单位,数据结构是带有结构的各数据元素的集合。( 5)算法的时间复杂度取决于( )。A问题的规模 B待处理数据的初态C计算机的配置 D A 和 B答案: D解释:算法的时间复杂度不仅与问题的规模有关,还与问题的其他因素有关。如某些排序的算法,其执行时间与待排序记录的初始状态有关。为此,有时会对算法有最好、最坏以及平均时间复杂度的评价。( 6)以下数据结构中, ( )是非线

8、性数据结构A树 B 字符串 C 队列 D 栈答案: A6试分析下面各程序段的时间复杂度。(1) x=90; y=100; while(y0)if(x100) x=x-10;y-;else x+;答案: O(1)解释:程序的执行次数为常数阶。3(2) for (i=0; in; i+)for (j=0; jm; j+)aij=0;答案: O(m*n)解 : 句 aij=0; 的 行次数 m*n 。(3) s=0;for i=0; in; i+)for(j=0; jn; j+)s+=Bij;sum=s;2解 : 句 s+=Bij; 的 行次数 n2 。(4) i=1; while(i=n)i=i*

9、3;答案: O(log 3n)解 : 句 i=i*3; 的 行次数 log 3n 。(5) x=0;for(i=1; in; i+)for (j=1; j1 y=0;while(x (y+1)* (y+1) y + ;答案: O( n )解 : 句 y+; 的 行次数 n 。4第 2 章 线性表1选择题( 1)顺 序表中 第一个 元 素的存储 地址 是 100 ,每 个元素的 长度 为2 ,则 第 5 个 元 素 的地 址 是()。A 110B 108C 100D 120答案: B解释:顺序表中的数据连续存储,所以第5 个元素的地址为:100+2*4=108。( 2)在 n 个结点的顺序表中,

10、算法的时间复杂度是O(1) 的操作是()。A 访问第i 个结点(1 i n)和求第i 个结点的直接前驱(2 i n)B 在第 i 个结点后插入一个新结点(1 i n)C 删除第i 个结点(1 i n)D 将 n 个结点从小到大排序答案: A解释: 在顺序表中插入一个结点的时间复杂度都是O(n 2) ,排序的时间复杂度为O(n 2 )或 O(nlog 2n)。顺序表是一种随机存取结构,访问第i 个结点和求第i 个结点的直接前驱都可以直接通过数组的下标直接定位,时间复杂度是O(1) 。( 3) 向一个有 127 个元素的顺序表中插入一个新元素并保持原来顺序不变,平均要移动的元素个数为()。A 8B

11、 63.5C 63D 7答案: B解释:平均要移动的元素个数为: n/2 。( 4)链接存储的存储结构所占存储空间( )。A分两部分,一部分存放结点值,另一部分存放表示结点间关系的指针B只有一部分,存放结点值C只有一部分,存储表示结点间关系的指针D分两部分,一部分存放结点值,另一部分存放结点所占单元数答案: A( 5)线性表若采用链式存储结构时,要求内存中可用存储单元的地址( )。A 必须是连续的 B 部分地址必须是连续的C 一定是不连续的 D 连续或不连续都可以答案: D( 6)线性表在( )情况下适用于使用链式结构实现。A 需经常修改中的结点值 需不断对进行删除插入C 中含有大量的结点 中

12、结点结构复杂答案: B5解释:链表最大的优点在于插入和删除时不需要移动数据,直接修改指针即可。( 7) 表的存 密度( )。A 大于 1 B 等于 1 C 小于 1 D 不能确定答案: C解释:存储密度是指一个结点数据本身所占的存储空间和整个结点所占的存储空间之比,假设单链表一个结点本身所占的空间为 D ,指针域所占的空间为 N ,则存储密度为: D/(D+N) ,一定小于 1。( 8)将两个各有n 个元素的有序表 并成一个有序表,其最少的比 次数是()。A nB 2n - 1C 2nD n-1答案: A解释:当第一个有序表中所有的元素都小于(或大于)第二个表中的元素,只需要用第二个表中的第一

13、个元素依次与第一个表的元素比较,总计比较n 次。( 9)在一个 度 n 的 序表中,在第i 个元素(1 i n+1 )之前插入一个新元素 向后移 ()个元素。A n- iB n-i+1C n-i -1D I答案: B(10) 性表 L=(a1, a , a) ,下列 法正确的是()。2nA每个元素都有一个直接前 和一个直接后 B 性表中至少有一个元素C表中 元素的排列必 是由小到大或由大到小D除第一个和最后一个元素外,其余每个元素都有一个且 有一个直接前 和直接后 。答案: D(11) 建一个包括 n 个 点的有序 表的 复 度是( )。A O(1) B O(n) C O(n 2 ) D O(

14、nlog 2 n)答案: C解释:单链表创建的时间复杂度是 O(n) ,而要建立一个有序的单链表,则每生成一个新结点时需要和已有的结点进行比较,确定合适的插入位置 ,所以时间复杂度是O(n2) 。(12) 以下 法 的是( )。A求表 、定位 两种运算在采用 序存 构 的效率不比采用 式存 构 的效率低B 序存 的 性表可以随机存取C由于 序存 要求 的存 区域,所以在存 管理上不 灵活D 性表的 式存 构 于 序存 构答案: D解释: 式存 构和 序存 构各有 缺点,有不同的适用 合。(13) 在 表中,要将 s 所指 点插入到 p 所指 点之后,其 句 ( )。6A s-next=p+1;

15、 p -next=s;B (*p).next=s; (*s).next=(*p).next;C s-next=p -next; p -next=s -next;D s-next=p -next; p -next=s;答案: D(14) 在双向链表存储结构中,删除 p 所指的结点时须修改指针( )。A p- next -prior=p -prior; p -prior -next=p -next;B p-next=p - next - next; p -next -prior=p;C p-prior -next=p; p -prior=p -prior - prior;D p- prior=p

16、-next -next; p - next=p -prior -prior;答案: A(15) 在双向循环链表中,在 p 指针所指的结点后插入 q 所指向的新结点,其修改指针的操作是( )。A p- next=q; q -prior=p; p -next -prior=q; q -next=q;B p-next=q; p -next -prior=q; q -prior=p; q -next=p -next;C q-prior=p; q -next=p -next; p -next -prior=q; p -next=q;D q- prior=p; q -next=p - next; p -n

17、ext=q; p -next - prior=q;答案: C2算法设计题( 1)将两个递增的有序链表合并为一个递增的有序链表。 要求结果链表仍使用原来两个链表的存储空间 , 不另外占用其它的存储空间。表中不允许有重复的数据。 题目分析 合并后的新表使用头指针 Lc 指向, pa 和 pb 分别是链表 La 和 Lb 的工作指针 , 初始化为相应链表的第一个结点,从第一个结点开始进行比较,当两个链表 La 和 Lb 均为到达表尾结点时,依次摘取其中较小者重新链接在 Lc 表的最后。如果两个表中的元素相等,只摘取 La表中的元素,删除 Lb 表中的元素,这样确保合并后表中无重复的元素。当一个表到达

18、表尾结点,为空时,将非空表的剩余元素直接链接在 Lc 表的最后。 算法描述 void MergeList(LinkList &La,LinkList &Lb,LinkList &Lc)/ 合并链表 La 和 Lb ,合并后的新表使用头指针 Lc 指向pa=La-next; pb=Lb-next;/pa 和 pb 分别是链表 La 和 Lb 的工作指针 , 初始化为相应链表的第一个结点Lc=pc=La; / 用 La 的头结点作为 Lc 的头结点while(pa & pb)if(pa-datadata)pc-next=pa;pc=pa;pa=pa-next;/ 取较小者 La 中的元素,将 pa

19、 链接在 pc 的后面, pa 指针后移 else if(pa-datapb-data) pc-next=pb; pc=pb; pb=pb-next;/ 取较小者 Lb 中的元素,将 pb 链接在 pc 的后面, pb 指针后移7else / 相等时取 La 中的元素,删除 Lb 中的元素pc-next=pa;pc=pa;pa=pa-next;q=pb-next;delete pb ;pb =q;pc-next=pa?pa:pb; / 插入剩余段delete Lb; / 释放 Lb 的头结点( 2)将两个非递减的有序链表合并为一个非递增的有序链表。 要求结果链表仍使用原来两个链表的存储空间 ,

20、 不另外占用其它的存储空间。表中允许有重复的数据。 题目分析 合并后的新表使用头指针 Lc 指向, pa 和 pb 分别是链表 La 和 Lb 的工作指针 , 初始化为相应链表的第一个结点,从第一个结点开始进行比较,当两个链表 La 和 Lb 均为到达表尾结点时,依次摘取其中较小者重新链接在 Lc 表的表头结点之后,如果两个表中的元素相等,只摘取 La 表中的元素,保留 Lb 表中的元素。当一个表到达表尾结点,为空时,将非空表的剩余元素依次摘取,链接在 Lc 表的表头结点之后。 算法描述 void MergeList(LinkList& La, LinkList& Lb, LinkList&

21、Lc, )/ 合并链表 La 和 Lb ,合并后的新表使用头指针 Lc 指向pa=La-next; pb=Lb-next;/pa 和 pb 分别是链表 La 和 Lb 的工作指针 , 初始化为相应链表的第一个结点Lc=pc=La; / 用 La 的头结点作为 Lc 的头结点Lc-next=NULL;while(pa|pb )/只要存在一个非空表,用q 指向待摘取的元素if(!pa) q=pb; pb=pb-next;/La 表为空,用q 指向 pb , pb 指针后移else if(!pb) q=pa; pa=pa-next;/Lb 表为空,用q 指向 pa , pa 指针后移else if(

22、pa-datadata) q=pa; pa=pa-next;/取较小者(包括相等)La 中的元素,用q 指向 pa , pa 指针后移else q=pb; pb=pb-next;/取较小者 Lb 中的元素,用q 指向 pb , pb 指针后移q-next = Lc-next; Lc-next = q;/将 q 指向的结点插在Lc表的表头结点之后delete Lb;/释放 Lb 的头结点8( 3)已知两个链表 A 和 B 分别表示两个集合,其元素递增排列。请设计算法求出 A 与 B的交集,并存放于 A 链表中。 题目分析 只有同时出现在两集合中的元素才出现在结果表中 , 合并后的新表使用头指针

23、Lc 指向。pa 和 pb 分别是链表 La 和 Lb 的工作指针 , 初始化为相应链表的第一个结点, 从第一个结点开始进行比较,当两个链表 La 和 Lb 均为到达表尾结点时,如果两个表中相等的元素时,摘取La 表中的元素,删除 Lb 表中的元素;如果其中一个表中的元素较小时,删除此表中较小的元素,此表的工作指针后移。当链表 La 和 Lb 有一个到达表尾结点,为空时,依次删除另一个非空表中的所有元素。 算法描述 void Mix(LinkList& La, LinkList& Lb, LinkList& Lc) pa=La-next;pb=Lb-next;pa 和 pb 分别是链表 La

24、和 Lb 的工作指针 , 初始化为相应链表的第一个结点Lc=pc=La; / 用 La 的头结点作为 Lc 的头结点while(pa&pb) if(pa-data=pb- data) 交集并入结果表中。 pc-next=pa;pc=pa;pa=pa-next;u=pb;pb=pb-next; delete u;else if(pa-datadata) u=pa;pa=pa-next; delete u; else u=pb; pb=pb-next; delete u;while(pa) u=pa; pa=pa-next; delete u; 释放结点空间while(pb) u=pb; pb=p

25、b-next; delete u ; 释放结点空间pc- next=null; 置链表尾标记。delete Lb; / 释放 Lb 的头结点( 4)已知两个链表 A 和 B 分别表示两个集合,其元素递增排列。请设计算法求出两个集合 A 和 B 的差集(即仅由在 A 中出现而不在 B 中出现的元素所构成的集合) ,并以同样的形式存储,同时返回该集合的元素个数。 题目分析 求两个集合 A 和 B 的差集是指在 A 中删除 A 和 B 中共有的元素,即删除链表中的相应结点 , 所以要保存待删除结点的前驱,使用指针 pre 指向前驱结点。 pa 和 pb 分别是链表 La 和Lb 的工作指针 , 初始

26、化为相应链表的第一个结点,从第一个结点开始进行比较,当两个链表La 和 Lb 均为到达表尾结点时,如果 La 表中的元素小于 Lb 表中的元素, pre 置为 La 表的工作指针 pa 删除 Lb 表中的元素;如果其中一个表中的元素较小时,删除此表中较小的元素,此表的工作指针后移。 当链表 La 和 Lb 有一个为空时, 依次删除另一个非空表中的所有元素。 算法描述 9void Difference ( LinkList& La, LinkList& Lb,int *n ) 差集的结果存储于单链表 La 中, *n 是结果集合中元素个数,调用时为 0pa=La-next; pb=Lb-next

27、; pa 和 pb 分别是链表 La 和 Lb 的工作指针 , 初始化为相应链表的第一个结点pre=La; pre 为 La 中 pa 所指结点的前驱结点的指针while ( pa&pb )if ( pa-datadata ) pre=pa;pa=pa-next;*n+; A 链表中当前结点指针后移else if ( pa-dataq-data ) q=q-next; B 链表中当前结点指针后移else pre-next=pa-next; 处理 A, B 中元素值相同的结点,应删除u=pa; pa=pa-next; delete u; 删除结点( 5)设计算法将一个带头结点的单链表 A 分解为两个具有相同结构的链表 B、C,其中 B表的结点为 A 表中值小于零的结点,而 C 表的结点为 A 表中值大于零的结点(链表 A 中的元素为非零整数,要求 B、 C 表利用 A 表的结点) 。 题目分析 B 表的头结点使用原来 A 表的头结点,为 C 表新申请一个头结点。从 A 表的第一个结点开始,依次取其每个结点 p,判断结点 p 的值是否小于 0,利用前插法,将小于 0 的结点插入B 表 , 大于等于 0 的

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1