算法与数据结构C语言版课后习题参考答案(机械工业出版社)1绪论习题详细答案.doc
《算法与数据结构C语言版课后习题参考答案(机械工业出版社)1绪论习题详细答案.doc》由会员分享,可在线阅读,更多相关《算法与数据结构C语言版课后习题参考答案(机械工业出版社)1绪论习题详细答案.doc(11页珍藏版)》请在咨信网上搜索。
1、第1章 概论 习题参考答案一、基础知识题1. 简述下列概念数据,数据元素,数据类型,数据结构,逻辑结构,存储结构,算法。【解答】数据是信息的载体,是描述客观事物的数、字符,以及所有能输入到计算机中并被计算机程序识别和处理的符号的集合。数据元素是数据的基本单位。在不同的条件下,数据元素又可称为元素、结点、顶点、记录等。数据类型是对数据的取值范围、数据元素之间的结构以及允许施加操作的一种总体描述。每一种计算机程序设计语言都定义有自己的数据类型。“数据结构”这一术语有两种含义,一是作为一门课程的名称;二是作为一个科学的概念。作为科学概念,目前尚无公认定义,一般认为,讨论数据结构要包括三个方面,一是数
2、据的逻辑结构,二是数据的存储结构,三是对数据进行的操作(运算)。而数据类型是值的集合和操作的集合,可以看作是已实现了的数据结构,后者是前者的一种简化情况。数据的逻辑结构反映数据元素之间的逻辑关系(即数据元素之间的关联方式或“邻接关系”),数据的存储结构是数据结构在计算机中的表示,包括数据元素的表示及其关系的表示。数据的运算是对数据定义的一组操作,运算是定义在逻辑结构上的,和存储结构无关,而运算的实现则依赖于存储结构。数据结构在计算机中的表示称为物理结构,又称存储结构。是逻辑结构在存储器中的映像,包括数据元素的表示和关系的表示。逻辑结构与计算机无关。算法是对特定问题求解步骤的一种描述,是指令的有
3、限序列。其中每一条指令表示一个或多个操作。一个算法应该具有下列特性:有穷性、确定性、可行性、输入和输出。2. 数据的逻辑结构分哪几种,为什么说逻辑结构是数据组织的主要方面?【解答】数据的逻辑结构分为线性结构和非线性结构。(也可以分为集合、线性结构、树形结构和图形即网状结构)。逻辑结构是数据组织的某种“本质性”的东西:(1)逻辑结构与数据元素本身的形式、内容无关。(2)逻辑结构与数据元素的相对位置无关。(3)逻辑结构与所含数据元素的个数无关。3. 试举一个数据结构的例子,叙述其逻辑结构、存储结构、运算三方面的内容。【解答】如学生成绩表,逻辑结构是线性结构,可以顺序存储(也可以链式存储),运算可以
4、有插入、删除、查询、等等。4. 简述算法的五个特性,对算法设计的要求。【解答】算法的五个特性是:有穷性、确定性、可行性、零至多个输入和一至多个输出。对算法设计的要求:正确性,易读性,健壮性,和高的时空间效率(运算速度快,存储空间小)。5. 设n是正整数,求下列程序段中带记号的语句的执行次数。(1)i=1;k=0; (2) i=1;j=0; while(in) while(i+jj)j+; else i+; (3)x=y=0; (4)x=91;y=100; for(i=0;i0) for(j=0;j100) x+; x=x-10; y-; for(k=0;kn;k+) y+; else x+;
5、【解答】(1)n-1 (2)n为偶数时,均为n div 2;你为奇数时,分别为:(n div 2)+1 和n div 2(3)n+1, n(n+1), n2,(n+1)n2, n3 (4)100, 10006. 有实现同一功能的两个算法A1和A2,其中A1的时间复杂度为Tl=O(2n),A2的时间复杂度为T2=O(n2),仅就时间复杂度而言,请具体分析这两个算法哪一个好?【解答】对算法A1和A2的时间复杂度T1和T2取对数,得nlog2和2logn。显然,当n4时,算法A2好于A1。7. 选择题:算法分析的目的是( )A、找出数据结构的合理性 B、研究算法中的输入和输出的关系C、分析算法的效率
6、以求改进 D、分析算法的易懂性和文档特点【解答】C二、算法设计题8. 已知输入x,y,z三个不相等的整数,设计一个“高效”算法,使得这三个数按从小到大输出。“高效”的含义是用最少的元素比较次数、元素移动次数和输出次数。void Best() /按序输出三个整数的优化算法int a,b,c,t;scanf(“%d%d%d”,&a,&b,&c);if(ab)t=a; a=b; b=t: /a和b已正序if(bc)t=c; c=b; /c已到位if(at) b=a; a=t; /a和b已正序else b=t;/ifprintf(“%d,%d,%dn”,a,b,c);/最佳2次比较,无移动;最差3次比
7、较,7个赋值9 在数组An中查找值为k的元素,若找到则输出其位置i(1in),否则输出0作为标志。设计算法求解此问题,并分析在最坏情况下的时间复杂度【题目分析】 从后向前查找,若找到与k值相同的元素则返回其位置,否则返回0。int Search(ElemType An+1, ElemType k)i=n;wile(i=1)&(Ai!=k) i-;if(i=1) return i;else return 0;当查找不成功时,总的比较次数为n+1次,所以最坏情况下时间复杂度为O(n)。第2章 线性表 习题参考答案一、基础知识题2.1 试述头指针、头结点、元素结点、首元结点的区别,说明头指针和头结点
8、的作【解答】指向链表第一个结点(或为头结点或为首元结点)的指针称为头指针。“头指针”具有标识一个链表的作用,所以经常用头指针代表链表的名字,如链表L既是指链表的名字是L,也是指链表的第一个结点的地址存储在指针变量L中,头指针为“NULL”则表示一个空表。有时,我们在整个线性链表的第一个元素结点之前加入一个结点,称为头结点,它的数据域可以不存储任何信息(也可以做监视哨或存放线性表的长度等附加信息),指针域中存放的是第一个数据结点的地址,空表时为空。 “头结点”的加入,使插入和删除等操作方便统一。元素结点即是数据结点,至少包括元素自身信息和其后继元素的地址两个域。首元结点是指链表中第一个数据元素的
9、结点;为了操作方便,通常在链表的首元结点之前附设一个结点,称为头结点。2.2分析顺序存储结构和链式存储结构的优缺点,说明何时应该利用何种结构。【解答】从空间上来看,当线性表的长度变化较大,难以估计其规模时,选用动态的链表作为存储结构比较合适,但链表除了需要设置数据域外,还要额外设置指针域,因此当线性表长度变化不大,易于事先确定规模时,为了节约存储空间,宜采用顺序存储结构。从时间上看,顺序表具有按元素序号随机访问的特点,在顺序表中按序号访问数据元素的时间复杂度为O(1);而链表中按序号访问的时间复杂度为O(n)。所以如果经常按序号访问数据元素,使用顺序表优于链表。在顺序表中做插入删除操作时,平均
10、移动大约表中一半的元素,因此n较大时顺序表的插入和删除效率低。在链表中作插入、删除,虽然也要找插入位置,但操作主要是比较操作。从这个角度考虑显然链表优于顺序表。总之,两种存储结构各有长短,选择那一种存储结构,由实际问题中的主要因素决定。2.3 分析在顺序存储结构下插入和删除结点时平均需要移动多少个结点。【解答】平均移动表中大约一半的结点,插入操作平均移动 个结点,删除操作平均移动 个结点。具体移动的次数取决于表长和插入、删除的结点的位置。2.4 为什么在单循环链表中常使用尾指针,若只设头指针,插入元素的时间复杂度如何?【解答】单循环链表中无论设置尾指针还是头指针都可以遍历表中任一个结点。设置尾
11、指针时,若在表尾进行插入元素或删除第一元素,操作可在O(1)时间内完成;若只设置头指针,表尾进行插入或删除操作,需要遍历整个链表,时间复杂度为O(n)。2.5 在单链表、双链表、单循环链表中,若知道指针p指向某结点,能否删除该结点,时间复杂度如何?【解答:】以上三种链表中,若知道指针p指向某结点,都能删除该结点。双链表删除p所指向的结点的时间复杂度为O(1),而单链表和单循环链表上删除p所指向的结点的时间复杂度均为O(n)。2.6 下面算法的功能是什么?LinkedList Unknown(LinkedList la) LNode *q,*p; if(la & la-next) q=la; l
12、a=la-next; p=la; while(p-next) p=p-next; p-next=q; q-next=null; return la; 【解答】将首元结点删除并插入到表尾(设链表长度大于1)。2.7 选择题:在循环双链表的*p结点之后插入*s结点的操作是( )la、p-next=s; s-prior=p; p-next-prior=s; s-next=p-next;B、p-next=s; p-next-prior=s; s-prior=p; s-next=p-next;lc、s-prior=p; s-next=p-next; p-next:=s; p-next-prior=s;
13、D、s-prior=p; snext=pnext; pnext-prior =s; p-next=s; 【解答】D2.8 选择题:若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则利用( )存储方式最节省时间。la顺序表 B双链表 lc带头结点的双循环链表 D单循环链表【解答】la二、算法设计题2.9 设ha和hb分别是两个带头结点的非递减有序单链表的头指针,试设计算法, 将这两个有序链表合并成一个非递增有序的单链表。要求使用原链表空间,表中无重复数据。【题目分析】因为两链表已按元素值非递减次序排列,将其合并时,均从第一个结点起进行比较,将小的链入链表中,同时后移链表
14、工作指针,若遇值相同的元素,则删除之。该问题要求结果链表按元素值非递增次序排列,故在合并的同时,将链表结点逆置。LinkedList Union(LinkedList ha,hb) ha,hb分别是带头结点的两个单链表的头指针,链表中的元素值按递增序排列本算法将两链表合并成一个按元素值递减次序排列的单链表,并删除重复元素 pa=ha-next; pa是链表ha的工作指针pb=hb-next; pb是链表hb的工作指针 ha-next=null; ha作结果链表的头指针,先将结果链表初始化为空 while(pa!=null & pb!=null) 当两链表均不为空时作 while(pa-next
15、 & pa-data=pa-next-data) u=pa-next; pa-next=u-next; free(u)删除pa链表中的重复元素while(pb-next & pb-data=pb-next-data) u=pb-next; pb-next=u-next; free(u)删除pb链表中的重复元素 if(pa-datadata) r=pa-next; 将pa 的后继结点暂存于r pa-next=ha-next; 将pa结点链于结果表中,同时逆置ha-next=pa;pa=r; 恢复pa为当前待比较结点 else if(pb-datadata)r=pb-next; 将pb 的后继结点
16、暂存于rpb-next=ha-next; 将pb结点链于结果表中,同时逆置ha-next=pb;pb=r; 恢复pb为当前待比较结点 elseu=pb;pb=pb-next;free(u)删除链表pb和pa中的重复元素 / while(pa!=null & pb!=null) if(pa) pb=pa; 避免再对pa写下面的while语句 while(pb!=null) 将尚未到尾的表逆置到结果表中 r=pb-next; pb-next=ha-next; ha-next=pb; pb=r; return ha 算法Union结束2.10 设la是一个双向循环链表,其表中元素递增有序。试写一算法
17、插入元素x,使表中元素依然递增有序。【问题分析】双向链表的插入与单链表类似,但需修改双向指针。 DLinkedList DInsert(DLinkedList la, ElemType x) 在递增有序的双向循环链表la中插入元素x,使表中元素依然递增有序 p=la-next; p指向第一元素 la-data=MaxElemType;MaxElemType是和x同类型的机器最大值,用做监视哨 while(p-datanext; s=(DLNode *)malloc(sizeof(DLNode);申请结点空间 s-data=x; s-prior=p-prior; s-next=p; 将插入结点链
18、入链表p-prior-next=s; p-prior=s; 2.11 设p指向头指针为la的单链表中某结点,试编写算法,删除结点*p的直接前驱结点。【题目分析】设*p是单链表中某结点,删除结点*p的直接前驱结点,要找到*p的前驱结点的前驱*pre。进行如下操作:u=pre-next; pre-next=u-next;free(u);LinkedList LinkedListDel(LinkedList la,LNode *p)删除单链表la上的结点*p的直接前驱结点,假定*p存在pre=la; if(pre-next=p) printf(“*p是链表第一结点,无前驱n”); exit(0);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 算法 数据结构 语言版 课后 习题 参考答案 机械工业 出版社 绪论 详细 答案
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【w****g】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【w****g】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。