




免费预览已结束,剩余2页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数据结构与算法习题答案习题一P18二 单项选择题1-6 DCCCD D三 填空题1. 元素,元素,系统 2. 集合,线性,树,图 3. 顺序,链4. 完整,一个事实 5. 指针, 6. 算法,数据结构7. 可行性,确定性,有穷性,有输入,有输出四 问答题1. 设计数据的物理结构时,重点解决的问题是什么?答:设计数据的物理结构时,重点解决的问题有两个:一个是有效存储问题,既要考虑有利于程序的处理,又要考虑存储空间的有效利用;另一个问题是逻辑结构的问题,既要考虑数据的有效存储,又要考虑物理结构和逻辑结构之间能否相互无误的转换。2. 顺序存储结构和链存储结构对存储空间的各有什么要求?答:顺序存储结构要求有足够的连续的存储空间;而链存储结构的存储空间可以是离散的不连续的存储空间。4. 算法与程序最显著的区别是什么?答:算法与程序最显著的区别是:第一,算法必须是有穷的,而程序不一定是有穷的;第二,程序是可以直接在计算机上执行的,而算法必须采用程序设计语言转换为程序才能在计算机上执行。习题二P55二 单项选择题1-8 CCBDC CBC三 填空题1. 3510 2. 上溢 3. 元素,系统4. 通过P指向已引用的结点,引用结点P的数据域,引用结点P的指针域 5. 数据项的组合顺序,第一个数据项 6. 排序对象,排序标准,排序方向,排序操作,排序结果7. 结点交换8. 大于 9. 头,尾四 问答题4. 为什么在删除单链表的第i个结点时,却要查找到第i-1个结点?答:因为单链表是通过指针进行连接的。当要删除第i个结点时,必须将第i-1个结点和第i+1个结点连接起来,也就是使第i-1个结点的指针指向第i+1个结点,因此必须查找第i-1个结点,从而得到其指针。6. 在查找表的端点设置“哨兵”结点为什么能提高查找算法的时间效率?答:因为哨兵结点具有监视查找终止的作用,增加哨兵结点后可以一边查找一边移动,不会造成结点丢失。8. 排序关键字和查找关键字有什么关系吗?答:排序关键字和查找关键字都是关键字,都可以由一个或者多个数据项组成。但是排序关键字中,数据项的排序顺序会影响排列结构;而查找关键字中数据项的排序顺序对查找结果没有任何影响。五 算法设计题5. 设有非空带头结点的单链表L,结点数据域为整数key、指针域为next, 结点顺序是关于关键字key有序。试设计一个顺序查找算法,根据给定值k在L中查找与k等值的结点并输出结点数据。用非形式语言写出算法描述,并编写C程序。答:算法描述:算法LES设有单链表L,结点关键字域为整型key,指针为next,且L关于关键字key有序,p为指针变量,给定值为k。算法查找给定值k标识的结点数据。LES1.初始化p=next(L);LES2.结束?若p=NULL,则转LES4继续;LES3.比较若 key(p)k,pnext(p),转LES2继续;LES4. 输出data(p),算法终止。C语言程序:int LES(LINKLIST *L, int key) LINKLIST *p; P=L-next;while(p!=NULL&p-data!=key)p=p-next;return data(p);习题三P85二 单项选择题1-5 CBACB 6-10 BABBA 11-14 BABB三 填空题1. 后进先出 2. 删除 3. 删除,同一端4. NULL,下溢出 5. 312,123 1326.front=mod(rear+1,m), rear=front 7. top+1四 问答题2. 在3.1.4节的第一个应用实例中,若车厢按1、2、3、4的次序进入调度岔道,能编组为按4、3、1、2的次序开出吗?如果不能请说明理由。还有哪些开出次序也是不能的?答:如果按1、2、3、4的次序进入调度岔道,不能编组为按4、3、1、2的次序开出,因为车厢编组调度的过程跟出入栈类似,必须按照后进先出的次序重新编组。不可能的开出次序还有1423,2413,3124,3142,3412,4132,4123,4213,4231。3. 对顺序栈结构,“栈底”一定要设置在数组的低下标端吗?答:顺序栈结构的“栈底”也可以设置在数组的高下标端。因为数组是顺序存储结构,顺序栈也是顺序存储结构。当栈底设置在数组的高下标端时,当有元素入栈时栈顶指针递减,当有元素出栈时栈顶指针递增。五 算法设计题2. 设有两个顺序栈A、B,最大程度分别为m,n,且mn。已知该两栈在运行过程中现行长度之和不超过m。问如何设计这两个栈空间最省?写出两个栈的压入和弹出操作的算法描述和C语言程序。答:因为两栈在运行过程中现行长度之和不超过其中一个栈的长度m,因此当两栈共用一个长度为m的一维数组存储时,空间最省。算法描述:顺序栈A、B共用一个一维数组spacem进行存储,栈A的栈底为space0,栈B的栈底为spacem-1,栈A的栈指针为topA,栈B的栈指针为topB。x为字符型变量。对栈A的压入和弹出操作算法PUSSTACKA:把x压入栈SA。PUSSTACKA1:栈上溢? 若topA+topB=m, output(“overflow”),算法终止。PUSSTACKA2:插入x 若topA+, SAtopA=x,算法终止。C语言程序:SEQSTACK PUSSTACKA(SEQSTACK SA, SEQSTACK SB, char x)if(SB.topB-SA.topA= 1)printf(“overflow!”);elseSA.topA+;SA.dataSA.topA=x;return SA;算法POPSTACKA:删除栈SA的栈顶结点。POPSTACKA1:栈下溢? 若topA=0, output(“empty”),算法终止。POPSTACKA2:删除栈顶 若topA-,算法终止。C语言程序:SEQSTACK POPSTACKA(SEQSTACK SA)if(SA.topA= 0)printf(“empty!”);elseSA.topA-;return SA;对栈B的压入和弹出操作算法PUSSTACKB:把x压入栈SB。PUSSTACKB1:栈上溢? 若topA+topB=m, output(“overflow”),算法终止。PUSSTACKB2:插入x 若topB-, SBtopB=x,算法终止。C语言程序:SEQSTACK PUSSTACKB(SEQSTACK SA, SEQSTACK SB, char x)if(SB.topB-SA.topA= 1)printf(“overflow!”);elseSB.topB-;SB.dataSB.topB=x;return SB;算法POPSTACKB:删除栈SB的栈顶结点。POPSTACKB1:栈下溢? 若topB=m-1, output(“empty”),算法终止。POPSTACKB2:删除栈顶 若topB+,算法终止。C语言程序:SEQSTACK POPSTACKB(SEQSTACK SB)if(SA.topB= m-1)printf(“empty!”);elseSB.topB+;return SB;习题四P107二 单项选择题1-6 CBACB B三 填空题1. 1 2. 0,空格字符的个数 3. data structure.4. ASCII 5. 堆串,空间6. 动态7. 存储位置 8. 2146 9. 上三角,下三角,对角线,对称,稀疏四 问答题3. 设有一个二维数组A5,10(c语言表示)。若=1088, =1132. 试求=? 答:1)每个数组元素占用的存储空间为: (-) / 11 = (1132-1088)/11= 4 2) =+12*4=1132+48=1180 或者=+23*4=1088+92=1180 五 算法设计题3. 设有一个nn阶上三角形矩阵,存储为一维数组。试设计出该矩阵元素的地址计算公式。答:矩阵元素表示为Aij,因为是上上三角形矩阵,即 当ij 时Aij=0;当i=j时,Aij0。设矩阵的首地址为A0,每个元素占用b个存储单元,则 = A0 + k + j - ib其中k = n + (n-1) + (n-2) + + (n- (i-1) = i* (2n-i+1)/2习题五P139二 单项选择题1-4 CDDC三 填空题1. 层次性 分支性 2. 先根遍历,后根遍历,层次遍历 3. 68,16,524. 4 5. 整,指针五 思考题3. 设二叉树的中根遍历序序列是CDBAFEHG,先根遍历序列是ABCDEFGH。试画出该二叉树。 ABECFGDH答: 后根遍历序列为DCBFHGEA六 算法设计题3. 编写一个后根遍历二叉树的算法和C语言程序。算法描述:算法(LDRT):已知二叉树BT存储为二叉链表。设指针变量tp,栈BS为顺序存储结构,top为栈顶指针,初值为0. LDRT1.初始化top=0,tp=BT LDRT2.tp为空若tp=NULL,则转DLRT4继续LDRT3.压栈-左行BS=PUSSTACK(BS,tp),tp=llinktp,则转LDRT2继续LDRT4.弹栈若top=0,则算法结束;否则tp=GETSTACK(BS),BS=POPSTACK(BS) LDRT5.访问-右行output(datatp) ,tp=rlinktp,转LDRT2继续。C语言程序栈结构的定义tpyedef struct BTNODE *pointer100; int top;PSTACK;遍历二叉树的C语言程序void LDRTRAVEL(BTNODE *BT)BTNODE *tp=BT; /p表示当前结点, PSTACK BS; /栈BS用来存储结点int tagMAX;BS=INISTACK();dowhile(tp != NULL)/先处理结点的左孩子结点,把所有左孩子依次入栈 BS=PUSSTACK(BS,tp);tagtop = 0;p = p-lchild; if(top 0) /所有左孩子处理完毕后 if(!tagtop) /如果当前结点的右孩子还没被访问tp = GETSTACK(BS);/输出栈顶结点 ,但不退栈 ,因为要先输出其孩子结点 tp = tp-rchild; /处理其右孩子结点 tagtop = 1; /栈中top结点的右孩子被访问过了,下次轮到它退栈时可直接输出else /如果该结点的左右孩子都被访问过了 BS=POPSTACK(BS);printf(%d, tp-data); /栈顶元素出栈,输出该结点,此时结点p指向NULL while(tp != NULL)|(top 0);习题六P155二 单项选择题1-8 BBCBD ADC习题七P183二 单项选择题1-5 CBACD三 填空题1. 1,0 2. G的极大强联通子图 3. n(n-1)4. Kruskal 5. 递增,相等 6. G中是否有环 7. n (n-1)/2四 问答题2. 无向图采用邻接矩阵表示,如何判断图中有多少边、任意一个顶点的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 计量所考试题库及答案
- 2025年贵州省遵义市继续教育公需课考试题(含答案)
- 2025年新疆籽棉订购合作合同范本
- 2025年贵州大生态公需科目考试题目及答案
- 2025年广西壮族自治区公务员行测(A类)真题及答案
- 2025年镇江市中考英语试题卷(含答案及解析)
- 兽医考试病理学真题及答案
- 煤矿电气焊考试题及答案
- 安全员证考试试题及答案
- 软通硬件笔试题及答案
- DB32-T 5082-2025 建筑工程消防施工质量验收标准
- 老年人骨折病人的护理
- 六年级道德与法治上册《公民的基本权利和义务》
- 自留地永久性转让协议7篇
- 成都理工大学工程技术学院《工程地质B》2023-2024学年第二学期期末试卷
- 企业员工音乐培训计划
- 中学七年级综合实践课件
- 2025年沪教版六年级数学上册月考试卷含答案
- 《无人机飞行操控技术》项目2 多旋翼无人机飞行操控
- 食品食材配送项目投标书范本
- 第五讲铸牢中华民族共同体意识-2024年形势与政策
评论
0/150
提交评论