版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C语言程序设计练习题答案第1、2、3章概述、类型、表达式一、选择题1-5ADCBD6-1OBACAA11-15BBDCC16-20BACAD21-25CDDDC26-30CDCCC31-35BDCBA36-40DDCBD41-45BDBCCB第4章顺序结构一、选择题1-5DDCDA6-10BDCBD11-15ABBAD16-20DABBB第5、6章选择与循环结构一、选择题1-5ACBAC6-1ODAABB11-15DDBAA16-20CDADA21-25DCCDB26-30CDBDB第7章数组一、选择题1-5DDDCC6-10DDDCC11-15DDCBD16-20CABBB21-25DBCC
2、C26-30CDBDD第8章函数一、选择题1-5DBCBA6-1OBDCCB11-15BAADA16-20BDBCA21-25BCADC26-30CABBB31-35ADCCD36-40ACDBC第9章编译预处理一、选择题1-5CCCDD6-1ODCCDC11-15BBDBB第10章指针一、选择题1-5ADCBA6-10DBBCB11-15AACCA16-20CBCCA21-25BDBAB26-30BDADD31-35DCDAB36-40DBBDD第11章结构与联合一、单选题1-5DCBCD6-10DDADC11-15CBBDA16B第12章文件一、单选题1A2B3CC4B5D6-10BBAD
3、C11-15ADCDA数据结构答案第一章1.B2 .该程序段的时间复杂度为O(m*n)o3 .其中语句的执行次数是1,设语句的执行次数为f(n),则有:加。得:T(n)=0(*)4 .B第二章1.B2.B3.B4.B5.A6.B7.B8.D9.解:intlength(LinklistL)(inti;listnode*p;|=O;P=L;while(p-next!=L)p=p-next;I+returnI;)10解:voidpur_LinkList(LinkListH)LNode*p,*q,*r;p=H-next;/*p指向第一个结点*/if(p=NULL)return;while(p-next
4、)q=p;while(q-next)/*从*p的后继开始找重复结点*/if(q-next-data=p-data)r=q-next;/*找到重复结点,用r指向,删除*r7q-next=r-next;free(r);/*if7elseq=q-next;/*while(q-next)7p=p-next;/*p指向下一个,继续*/*while(p-next)7)该算法的时间性能为O(n2)o11. 答:voidLinkList_reverse(LinkList&L)(LinkListp,q,s;p=L-next;q=p-next;s=q-next;p-next=NULL;while(s-next)(
5、q-next=p;p=q;q=s;s=s-next;)q-next=p;s-next=q;L-next=s;)12. 答:voiddelinsert(LinkList&L)(p=L-next;/p是链表的工作指针pre=L;/pre指向链表中数据域最小值结点的前驱q=P;q指向数据域最小值结点,初始假定是第一结点while(p-next!=NULL)(if(p-next-datadata)/找到新的最小值结点pre=p;q=p-next;p=p-next;)if(q!=L-next)若最小值是第一元素结点,则不需再操作(pre-next=q-next;将最小值结点从链表上摘卜q-next=L-
6、next;将q结点插到链表最前面L-next=q;)13. 解:假设单链表的表头指针用head表示,其类型为上面定义的LinkList,并且单链表不带头结点。逆置后原来的最后一个结点成为第一个结点,于是从第一个结点开始逐个修改每个结点的指针域进行逆置,且刚被逆置的结点总是新链表的第一个结点,故令head指向它(如图2-1所示)。具体算法描述如下:A(a)单链表初始状态(b)第三个结点逆置图2-1单链表逆置示意图voidcontray(LinkList*head)将head单链表中所有结点按相反次序链接LinkList*p,*q;p=head;/p指向未被逆序的第一个结点,初始时指向原表头结点h
7、ead=NULL;while(p!=NULL)q=P;/q指向将被逆序链接的结点p=p-next;q-next=head;head=q;)14. 解:该可以这样考虑,先取开始结点的值,将它与其后的所有结点值比较,发现相同的就删除掉,然后再取第二结点的值,重复上述过程直到最后一个结点。设单链表(其类型为LinkList)的头指针head指向头结点,则可按下列步骤执行:首先,用一个指针P指向单链表中第一个表结点,然后用另一个指针q查找链表中其余结点元素,由于是单链表,故结束条件为P=NULL,同时让指针s指向q所指结点的前趋结点,当查找到结点具有q-data=p-data时删除q所指的结点,然后再
8、修改q,直到q为空;然后使P指针后移(即p=p-next),重复进行,直到p为空时为止。算法描述如下:del(LinkList*head)删除单链表中值相同的多余结点LinkList*p,*s,*q;p=head-next;while(p!=NULL&p-nextkNULL)s=p;/s指向要删除结点的前趋q=p-next;while(q!=NULL)if(q-data=p-data)查找值相同的结点并删除s-next=q-next;free(q);q=s-next;elses=q;q=q_next;p=p-next;第三、四章、选择1. C2.C3.A4.B5.D6.BA7.C8.B9.C1
9、0.C11.A12.A13.C14.B15. D16.D17.C18.D19.A二、填空1. 线性、任何、栈顶、队尾、队首2.n-i+13.n-i4.n-1第八章1.B2.解:|初始1277216538738531趟1277216538738532趟1221776538738533趟1221657738738534趟1221386577I738535趟7122138657738536趟7122138386577537趟712213838536577(表示有序区)3 .第一趟:1565(4863497126)第二趟:154865(63497126)第三趟:6154865(3497126)第四趟:
10、615344865(97126)第五趟:61534486597(126)第六趟:161534486597(26)第七趟:161526344865974 .第一趟:1537251047833298第二趟:1525103747328398第三趟:1510253732478398第四趟:1015253237478398第五趟:10152532374783985.第一趟:1(4581674276929)第二趟:18(451674276929)第三趟:1816(4574276929)第四趟:181627(74456929)第五趟:18162729(456974)第六趟:1816272945(6974)第
11、七趟:181627294569746.解:初始 1趟|2趟 3趟 4趟 5趟(表示有序区)7.快速排序的第一趟结果为22,19,13,6,24,38,43,12滩排序时所建立的初始大顶堆如所图所示:两种排序方法所需辅助空间:堆是0(1),快速排序是O(logn),可见堆排序所需辅助空间较少;在最坏情况下两种排序方法所需时间:堆是O(nlogn),快速排序是0(中),所以,可见快速排序时间复杂度最差。8.解:(1)初始38 1221 77 6538 53flow第一次交换 从high开始比较,high得到的结果:7 12f2177 653853low从low开始比较,high得到的结果:7 12
12、21f6577f3853lowhigh第一次交换从high开始比较,7 12得到的结果:2165773853注意:快速排序的平均时排序速度最快,但在最坏情况下不一定比其他排序方法快。lowhighlow=high,所以第一趟快速排序的结果为:712213865773853(2)关键字序列(2,2,1)可以作为一个反例。取第一个关键字作为支点,在一趟快排之后的结果是(1,2,2),由于2已在排序后的最终位置,2在2划分出的前一部分子表中,所以2不可能再出现在2之后,即不可能(加框为每次冒出元 素)21 ,32,73,68与原始序列中两者的顺序一致。此反例说明快速排序不是稳定排序。9.解析:(1)
13、采用冒泡排序方法排序的各趟结果如下:初始序列:25,18,60,40,7,第一一趟:口7,25,18,60,40,第二趟:第三趟:第四趟:第五趟:18,18.口,21,21,21,25,口5,25,60,32,32,32,40,40,40,32,40,60,60,68,68,68,68,73737373初始序列: 第一趟: 第二趟: 第三趟: 第四趟: 结束:10 C 11.625, 21 7718,18181860,72140,25252125乙 40 32 3221,60404032,3273,731818212125253232404060606060737368686868687368
14、73(加框为每次选出元第五趟无元素交换,排序结束。(2)采用直接选择排序方法排序的各趟结果如希始序列:25,18,60,40,2律)3273,68第一一趟:78,60,40,25,2I,32,73,68第二趟:7,1860,40,25,32,73,68第三趟:7,18,2140,560,32,73,68第四趟:7,18,21,2540,60,273,68第五趟:7,18,21,25,3260,073,68第八趟:7,18,21,25,32,40073,68第七趟:7,18,21,25,32,40,6073,第八趟:7,18,21,25,32,40,60,6873结束:7,18,21,25,32
15、,40,60,68,73(3)采用快速排序方法排序的各趟结果第七章1 1. B2. B311. D 2.C4.A 13C5. C B 14.6. A 7. DB 15.19. B20. B21. B22. B 23.21.(1) k1(2) k2,k5k7k48. AB 16. D 17.B 24. A 25. C(3)29. C 10. AC 18. C(4)3(5)4(6) k5,k6(7)k12 .树的结点个数至少为1(不同教材规定不同),而二叉树的结点个数可以为树中结点的最大度数没有限制,而二叉树结点的最大度数为树的结点无左、右之分,而二叉树的结点有左、右之分;3 .树可采用孩子一兄弟
16、链表(二叉链表)做存储结构,目的并利用二叉树的已有算法解决树的有关问题。4.5.26.n7.28.如图6.9所不k-1k2-1、2+12+1logn+l-l22logn+12k-2只有一个结点的树;空的二叉树9.5;如图6.10所示dgbaechif、abdgcefhi、gdbeihfca1.5 种,图 6.11图 6.16 Huffman 树2.二叉树如图6.12所示。3.中序线索二叉树如图6.13该二叉树转换后的的森林如图图6.11树形5种小b图6.12(左)所示;后序线索二叉树如图6.13所示;6.14所示。N【瞥1论,言和后序线索忸4.图6.8的树转化为一棵二叉树如下,5.画出构造Hu
17、ffman树如图6.16所示向卜、?icX:A八图6.14对应的森林国6.15:Q图6.15一棵树的孩子兄弟表示计算其带权路径长度为H12,E06.一棵含有N个结点的k叉树,可能达到的最大深度h=N-k+1最小深度各为:iogkN+1。41 .解:方法是:由前序先确定root,由中序可确定root的左、右子树。然后由其左子树的元素集合和右子树的集合对应前序遍历序列中的元素集合,可继续确定root的左右孩子。将他们分别作为新的root,不断递归,则所有元素都将被唯一确定,问题得解。2 .答:算法如下intBtreeHeight(BinTreeNode*BT)inth1,h2,h;if(BT=NU
18、LLh=0;elsehi=BTreeHeight(BTleftChild);h2=BTreeHeight(BTrightChild);if(hlh2)h=h1+1;elseh=h2+1;)returnh;)3 .(1)二叉排序树如下图所示:(2)哈夫曼树如下图所示:4 .先由先序序列的第一个结点确定二叉树的根结点,再由根结点在中序序列中左侧部分为左子树结点,在右侧部分为右子树结点,再由先序序列的第一个结点确定根结点的左右孩子结点,由类似的方法可确定其他结点,如下图所示。5.解:第一步,加线。笫二步,抹线。第三步,旋转。过程如图图5-8(a)第一步加线58所图5-8(b)第二步抹线图5-8(c)
19、第三步旋转6.解:第一步,加线。笫二步,抹线。笫三步,调整。过程如图5-10所示。第一步第二步第三步87.解:步骤略,结果如图5-12所示。第九章1.用链地址法处理冲突的哈希表如下图所示:DA口Ij/y1A1A3ex:4AEAe7ZD&A、ALD*1口1IA111-IMlAI12AASL=1(1*6+2*4+3*1+4*1)=1752 .答:141682755192084792311101214311391139101112线性探测再散列的散列表:012345678查找成功的平均长度为ASL=1/12(1*6+2*1+3*3+4*1+9)=2.5查找不成功的平均长度为ASL=1/13(1+2+
20、3+4.+13)=73 .哈希表如下图所示:4 .哈希表及查找各关键字要比较的次数如下所示:哈希地址01234567s关键字2135I。37B992。25比较次数1211451s1ASL=-(4X1+1X2+1X4+2X5)=2.55 .解:建表如下:012345678910112247921637298分析:47、7、11、16、92均是由哈希函数得到的没有冲突的哈希地址而直接存入的。H(29)=7,哈希地址上冲突,需寻找下一个空的哈希地址:由Hi=(H(29)+1)MOD11=8,哈希地址8为空,将29存入。另外,22、8同样在哈希地址上有冲突,也是由H找到空的哈希地址的。而H(3)=3,
21、哈希地址上冲突,由:Hi=(H(3)+1)MOD11=4,仍然冲突。H2=(H(3)+2)MOD11=5,仍然冲突。H3=(H(3)+3)MOD11=6,找到空的哈希地址,存入。6 .解:建表如下:11牝I22A3八29人A7.解:依题意,m=13,线性探测法的下一个地址计算公式为:di=H(key)di+i=(di+1)%m;i=1,2,其计算函数如下:H(19=19%13=6H(01=01%13=1H(23=23%13=10H(14=14%13=11冲H(14=(1+1)%14=2H(55=55%13=3H、(20=20%13=7H(84=84%13=6(冲(仍冲(仍冲(仍冲H(84=(6
22、+1)%14,、H、(84=(7+1)%14=8H(27=27%13=1(冲H(27=(1+1)%14=2、H(27=(2+1)%14=3H(27=(3+1)%14=4H(68=68%13=3(冲H(68=(3+1)%14=4(仍冲H(68=(4+1)%14=5H(11=11%13=11H(1=10%13=10、H(1=%14H(1=%14x/444、H(77=77%13=12、(冲突)=11 (仍冲=12(冲突)=13H(77=%14哈希地址012345678910111213关键字11455276819208423111077比较次数121431131132哈希表如下:一.、共有12个关键
23、字,等概率查找,则成功查找时8.解析:(1)散列表如图13.14所示。地址森字比软次更01234578910II12Z7532ii 1920BIB3111 1I12E 13.U牛赴列表(2)ASL1632811-)8ASL=(1+2+1+4+3+1+1+3+1+1+3+2)/12=23/121.9第十章1 .I2 .构造二叉排序树的过程如下图所示。(f构造的二叉排序树如下图所示:2313283.如下图所示:14254.解:折半查找的过程描述如下: low=1;high=length; 当lowhigh时,返回查找失败信息 lowhigh,mid=(low+high)/2;a.若kxtbl.el
24、emmid.key,low=mid+1;转c.kx=tbl.elemmid.key,返回数据元素在表中位置查找关键字为14的过程如下:查找在右半区进行若查找成功71418212329313538424649522345678910111213low=1设置初始区间high=13f表空测试,非空;mid=7得到中点,比较测试为a情形ffhigh=6high=mid-1,调整到左半区low=1f表空测试,非空;mid=3得到中点,比较测试为a情形fflow=1high=2high=mid-1调整到左半区mid=1fflow=2high=2表空测试,非空;得到中点,比较测试为b情形low=mid+1
25、,调整到右半区fmid=2表空测试,非空;得到中点,比较测试为C情形查找成功,返回找到的数据元素位置为查找关键字为22的过程如下:0123456789101112137141821232931353842464952flow=1设置初始区间high=13f表空测试,非空;mid=7得到中点,比较测试为a情形flw=1high=6high=mid-1,调整到左半区f表空测试,非空;mid=3得到中点,比较测试为b情形fflow=4high=6low=mid+1,调整到右半区f表空测试,非空;mid=5得到中点,比较测试为a情形fflow=4high=4high=mid-1,调整到左半区f表空测试
26、,非空;mid=4得到中点,比较测试为b情形ffhigh=4low=5low=mid+1,调整到右半区表空测试,为空;查找失败,返回查找失败信息为o查找过程的判定树如图7-1所示图7-1折半查找过程的判定树第十一章.笏芍合茶WPL=7*2+8*2+9*2+4*3+2*4+3*4=80c的编码为110WPL=3*4+7*3+8*3+2*4+6*3+10*2+14*2=1313 .答:构造的哈夫曼树如下:哈夫曼编码如下:c(00)d(01)a(100)b(101)e(11)平均长度=0.09*3+0.17*3+0.2*2+0.23*2+0.31*2=2.265, 25, 4, 7, 9, 12,
27、30, 8),并且 n=8。4.解:根据题意,设这8个字母对应的权值分别为(1)设计哈夫曼树的步骤如图513所示。第-步:第二步:(25)C5(30)第三步:第四步:第五步:第六步:第七步:(2)设计哈夫曼编码利用第八步得到的哈夫曼树,规定左分支用0表示,右分支用1表示,字母A、B、C、D、E、F、G、H的哈夫曼编码如下表示:A:0011B:01C:0010D:1010E:000F:100G:11H:1011解析:根据给定的权值集合构造的哈夫曼树如图10.19所示。其加权路径长度WPL=(9+7+8)X2+4X3十(2+3)X4=80。各字符的哈夫曼编码如下:a0000b0001c001d10e11f0IE10.19一棵哈夫曼树解:图G如图6-4中的所示,图G的邻 (b)和所示。通常情况下.对图的顶点排列顺序(a。(b0(c)注意:此题哈夫曼树形不唯一,因此哈夫曼编码也有多种方案,但WPL是一定的。第十二章2.【解答】(1)该图的图形如下图所示:(2)深度优先遍历序列为:abdce;广度优先遍历序列为:abedc。3 .接矩阵和邻接表表示分别如图对于这类问题,只要掌握了图的概念和存储结构就可以
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030年中国汽车服务行业商业模式创新战略制定与实施研究报告
- 2025-2030年中国车载视频监控行业全国市场开拓战略制定与实施研究报告
- 2025-2030年中国团餐行业开拓第二增长曲线战略制定与实施研究报告
- 新形势下新型烟草行业高速增长战略制定与实施研究报告
- 世卫组织(WHO)结核病综合指南解读课件
- 速冻食品包装调研问卷
- 红外线炉项目可行性研究报告建议书
- 三年级数学计算题专项练习及答案
- 仓库作业知识培训课件
- 春节农业变革创新
- 2025年国务院发展研究中心信息中心招聘应届毕业生1人高频重点提升(共500题)附带答案详解
- 2024年公安机关理论考试题库500道及参考答案
- 特殊情况施工的技术措施
- 大学物理(二)知到智慧树章节测试课后答案2024年秋湖南大学
- 银行运营集中规划
- 《数据分析你懂的》课件
- 液相色谱质谱质谱仪LCMSMSSYSTEM
- 派克与永华互换表
- 宣传广告彩页制作合同
- 【语法】小学英语语法大全
- 除湿机说明书
评论
0/150
提交评论