份考试数据结构第三次作业.docx
- 文档编号:23005381
- 上传时间:2023-04-30
- 格式:DOCX
- 页数:15
- 大小:74.64KB
份考试数据结构第三次作业.docx
《份考试数据结构第三次作业.docx》由会员分享,可在线阅读,更多相关《份考试数据结构第三次作业.docx(15页珍藏版)》请在冰豆网上搜索。
份考试数据结构第三次作业
2013年9月份考试数据结构第三次作业
一、填空题(本大题共30分,共15小题,每小题2分)
1.由3个结点所构成的二叉树有______种形态。
2.对不同的关键字可能得到同一哈希地址,即key1!
=key2,而f(key1)=f(key2),这种现象称为______。
具有相同函数值的关键字对该哈希函数来说称作_____________。
3.在AOE网中,路径长度最长的路径叫做______。
4.在一个循环队列中,队尾指针指向队尾元素的______位置。
5.构造最小生成树的方法主要有:
______和______。
6.带表头结点的空循环双向链表的长度等于______。
7.为了实现逐层访问,算法中使用了一个______,以记忆正在访问的这一层和上一层的顶点,以便于向下一层访问。
8.顺序表中逻辑上相邻的元素的物理位置______相邻。
单链表中逻辑上相邻的元素的物理位置______相邻。
9.二叉树的基本组成部分是:
根(N)、左子树(L)和右子树(R)。
因而二叉树的遍历次序有六种。
最常用的是三种:
前序法(即按NLR次序),后序法(即按______次序)和中序法(也称对称序法,即按LNR次序)。
这三种方法相互之间有关联。
若已知一棵二叉树的前序序列是BEFCGDH,中序序列是FEBGCHD,则它的后序序列必是______。
10.基数排序法、堆排序法与归并排序法中,______排序方法需要的辅助存储单元最少。
11.在串S=“structure”中,以t为首字符的子串有______个
12.邻接多重表是______的另一种链式存储结构。
13.快速排序算法在最坏情况下的时间复杂度为______。
14.线性表具有两种存储方式,即顺序方式和链接方式。
现有一个具有五个元素的线性表L={23,17,47,05,31},若它以链接方式存储在下列100~119号地址空间中,每个结点由数据(占2个字节)和指针(占2个字节)组成,如下所示:
05U17X23V31Y47Z^^100120其中指针X,Y,Z的值X=______Y=______Z=该线性表的首结点起始地址为多少?
末结点的起始地址为首址=______末址=______
15.AOV网络用______表示活动,用______表示活动间的优先关系。
二、程序阅读题(本大题共10分,共2小题,每小题5分)
1.指出下述程序段的功能是什么?
voidDemo1(SeqStack*S)
{ inti;arr[64];n=0;
while(StackEmpty(S))arr[n++]=Pop(S);
for(i=0,i Push(S,arr[i]); }//Demo1 2.指出下述程序段的功能是什么? CirQueueQ1,Q2;//设DataType为int型 intx,i,n=0; ...//设Q1已有内容,Q2已初始化过 while(! QueueEmpty(&Q1)) {x=DeQueue(&Q1);EnQueue(&Q2,x);n++;} for(i=0;i {x=DeQueue(&Q2); EnQueue(&Q1,x);EnQueue(&Q2,x);} 三、简答题(本大题共50分,共10小题,每小题5分) 1.多重链表存储结构的特点。 2.利用Dijkstra算法求下图中从顶点a到其他各顶点间的最短路径 3.简述KRUSKAL算法的思想。 4.给定二叉树的两种遍历序列,分别是: 前序遍历序列: D,A,C,E,B,H,F,G,I;中序遍历序列: D,C,B,E,H,A,G,I,F,试画出二叉树B,并简述由任意二叉树B的前序遍历序列和中序遍历序列求二叉树B的思想方法。 5.二叉排序树的删除可能会有哪三种情况。 6.列出(至少三种)构造散列函数的方法? 7.何时选用顺序表、何时选用链表作为线性表的存储结构为宜? 8.给出下图的广度优先搜索序列。 9.在顺序表中插入和删除一个结点需平均移动多少个结点? 具体的移动次数取决于哪两个因素? 10.空串和空格串有无区别? 四、程序设计题(本大题共10分,共2小题,每小题5分) 1.设以带头结点的双向循环链表表示的线性表L=(a1,a2,...,an),试写一时间复杂度为O(n)的算法,将L改造为L=(a1,a3,...,an...,a4,a2) 2.以二叉链表为存储结构,分别写出在二叉树中查找值为x的结点及求x所在结点在树中层数的算法。 答案: 一、填空题(30分,共15题,每小题2分) 1. 参考答案: 5 解题方案: 评分标准: 每空2分 2. 参考答案: 冲突、同义词 解题方案: 评分标准: 每空2分 3. 参考答案: 关键路径 解题方案: 评分标准: 每空2分 4. 参考答案: 下一个 解题方案: 评分标准: 每空2分 5. 参考答案: 普里姆算法、克鲁斯卡尔 解题方案: 评分标准: 每空2分 6. 参考答案: 0 解题方案: 评分标准: 每空2分 7. 参考答案: 队列 解题方案: 评分标准: 每空2分 8. 参考答案: 必定,不一定 解题方案: 评分标准: 每空2分 9. 参考答案: LRN,FEGHDCB 解题方案: 评分标准: 每空2分 10. 参考答案: 堆排序 解题方案: 评分标准: 每空2分 11. 参考答案: 12 解题方案: 评分标准: 每空2分 12. 参考答案: 无向图 解题方案: 评分标准: 每空2分 13. 参考答案: O(n2) 解题方案: 评分标准: 每空2分 14. 参考答案: 116,0,100,108,112 解题方案: 评分标准: 每空2分 15. 参考答案: 顶点、弧 解题方案: 评分标准: 每空2分 二、程序阅读题(10分,共2题,每小题5分) 1. 参考答案: 程序段的功能是将一栈中的元素按反序重新排列,也就是原来在栈顶的元素放到栈底,栈底的元素放到栈顶。 此栈中元素个数限制在64个以内。 解题方案: 评分标准: 2. 参考答案: 这段程序的功能是将队列1的所有元素复制到队列2中去,但其执行过程是先把队列1的元素全部出队,进入队列2,然后再把队列2的元素复制到队列1中。 解题方案: 评分标准: 三、简答题(50分,共10题,每小题5分) 1. 参考答案: 答: 多重链表表示是一种最简单的链式映象结构,即以一个由一个数据域和多个指针域组成的结点表示图中一个顶点,其中数据域存储该顶点的信息,指针域存储指向其邻接点的指针。 但是,由于图中各个结点的度数各不相同,最大度数和最小度数可能相差很多,因此,若按度数最大的顶点设计结点结构,则会浪费很多存储单元;反之,若按每个顶点自己的度数设计不同的结点结构,又会给操作带来不便。 解题方案: 答: 多重链表表示是一种最简单的链式映象结构,即以一个由一个数据域和多个指针域组成的结点表示图中一个顶点,其中数据域存储该顶点的信息,指针域存储指向其邻接点的指针。 但是,由于图中各个结点的度数各不相同,最大度数和最小度数可能相差很多,因此,若按度数最大的顶点设计结点结构,则会浪费很多存储单元;反之,若按每个顶点自己的度数设计不同的结点结构,又会给操作带来不便。 评分标准: 222 2. 参考答案: Dijkstra算法按路径长度的递增次序,逐步产生最短路径的算法。 首先求出长度最短的一条最短路径,再参照它求出长度次短的一条最短路径,依次类推,直到从顶点v到其它各顶点的最短路径全部求出为止。 解题方案: 评分标准: 最短路径6分 3. 参考答案: 答: 设有一个有n个顶点的连通网N={V,E},最初先构造一个只有n个顶点,没有边的非连通图T={V,E},图中每个顶点自成一个连通分量。 当在E中选到一条具有最小权值的边时,若该边的两个顶点落在不同的连通分量上,则将此边加入到T中;否则将此边舍去,重新选择一条权值最小的边。 如此重复下去,直到所有顶点在同一个连通分量上为止。 解题方案: 答: 设有一个有n个顶点的连通网N={V,E},最初先构造一个只有n个顶点,没有边的非连通图T={V,E},图中每个顶点自成一个连通分量。 当在E中选到一条具有最小权值的边时,若该边的两个顶点落在不同的连通分量上,则将此边加入到T中;否则将此边舍去,重新选择一条权值最小的边。 如此重复下去,直到所有顶点在同一个连通分量上为止。 评分标准: 222 4. 参考答案: 解: 方法是: 由前序先确定root,由中序可确定root的左、右子树。 然后由其左子树的元素集合和右子树的集合对应前序遍历序列中的元素集合,可继续确定root的左右孩子。 将他们分别作为新的root,不断递归,则所有元素都将被唯一确定,问题得解。 DACFEGBHI 解题方案: 解: 方法是: 由前序先确定root,由中序可确定root的左、右子树。 然后由其左子树的元素集合和右子树的集合对应前序遍历序列中的元素集合,可继续确定root的左右孩子。 将他们分别作为新的root,不断递归,则所有元素都将被唯一确定,问题得解。 DACFEGBHI 评分标准: 33 5. 参考答案: 答: 假设在二叉排序树被删结点为*P,其双亲结点为*f,删除可能会出现三种情况: (一)若*p结点为叶子结点,即PL(*P的左子树)和PR(*P的右子树)均为空。 由于删去叶子结点不破坏整棵树的结构,因此只需修改双亲结点的指针即可。 (二)若*P结点只有左子树PL或者只有右子树PR,此时只需令PL或PR直接成为其双亲结点*f的左子树即可。 因为*P结点的左子树或右子树都比*f结点的关键字值要小,所以只能成为*f结点的左孩子。 (三)若*P结点的左子树和右子树均不空。 可以有两种做法: 其一是令*P的左子树为*f的左子树,而*P的右子树为*S的右子树;其二是令*P的直接前驱(或直接后继)替代*P,然后再从二叉排序树中删去它的直接前驱(或直接后继)。 解题方案: 答: 假设在二叉排序树被删结点为*P,其双亲结点为*f,删除可能会出现三种情况: (一)若*p结点为叶子结点,即PL(*P的左子树)和PR(*P的右子树)均为空。 由于删去叶子结点不破坏整棵树的结构,因此只需修改双亲结点的指针即可。 (二)若*P结点只有左子树PL或者只有右子树PR,此时只需令PL或PR直接成为其双亲结点*f的左子树即可。 因为*P结点的左子树或右子树都比*f结点的关键字值要小,所以只能成为*f结点的左孩子。 (三)若*P结点的左子树和右子树均不空。 可以有两种做法: 其一是令*P的左子树为*f的左子树,而*P的右子树为*S的右子树;其二是令*P的直接前驱(或直接后继)替代*P,然后再从二叉排序树中删去它的直接前驱(或直接后继)。 评分标准: 222 6. 参考答案: 答: 直接定址法、数字分析法、平方取中法、折叠法、除留余数法、随机数法。 解题方案: 答: 直接定址法、数字分析法、平方取中法、折叠法、除留余数法、随机数法。 评分标准: 每写对一种给2分 7. 参考答案: 答: 在实际应用中,应根据具体问题的要求和性质来选择顺序表或链表作为线性表的存储结构,通常有以下几方面的考虑: (1)基于空间的考虑: 当要求存储的线性表长度变化不大,易于事先确定其大小时,为了节约存储空间,宜采用顺序表;反之,当线性表长度变化大,难以估计其存储规模时,采用动态链表作为存储结构为好。 (2)基于时间的考虑: 若线性表的操作主要是进行查找,很少做插入和删除操作时,采用顺序表做存储结构为宜;反之,若需要对线性表进行频繁地插入或删除等的操作时,宜采用链表做存储结构。 并且,若链表的插入和删除主要发生在表的首尾两端,则采用尾指针表示的单循环链表为宜。 解题方案: 答: 在实际应用中,应根据具体问题的要求和性质来选择顺序表或链表作为线性表的存储结构,通常有以下几方面的考虑: (1)基于空间的考虑: 当要求存储的线性表长度变化不大,易于事先确定其大小时,为了节约存储空间,宜采用顺序表;反之,当线性表长度变化大,难以估计其存储规模时,采用动态链表作为存储结构为好。 (2)基于时间的考虑: 若线性表的操作主要是进行查找,很少做插入和删除操作时,采用顺序表做存储结构为宜;反之,若需要对线性表进行频繁地插入或删除等的操作时,宜采用链表做存储结构。 并且,若链表的插入和删除主要发生在表的首尾两端,则采用尾指针表示的单循环链表为宜。 评分标准: 33 8. 参考答案: 答: V1、V2、V5、V3、V4、V6广度优先搜索 解题方案: 评分标准: 给对一个节点位置给2分 9. 参考答案: 答: 在等概率情况下,顺序表中插入一个结点需平均移动n/2个结点。 删除一个结点需平均移动(n-1)/2个结点。 具体的移动次数取决于顺序表的长度n以及需插入或删除的位置i。 i越接近n则所需移动的结点数越少。 解题方案: 答: 在等概率情况下,顺序表中插入一个结点需平均移动n/2个结点。 删除一个结点需平均移动(n-1)/2个结点。 具体的移动次数取决于顺序表的长度n以及需插入或删除的位置i。 i越接近n则所需移动的结点数越少。 评分标准: 222 10. 参考答案: 答: 有区别。 空串(NullString)是指长度为零的串;而空格串(BlankString),是指包含一个或多个空格字符‘’(空格键)的字符串. 解题方案: 答: 有区别。 空串(NullString)是指长度为零的串;而空格串(BlankString),是指包含一个或多个空格字符‘’(空格键)的字符串. 评分标准: 33 四、程序设计题(10分,共2题,每小题5分) 1. 参考答案: 答: voidOEReform(DuLinkedList&L)//按1,3,5,...4,2的顺序重排双向循环链表L中的所有结点{ p=L.next;while(p->next! =L&&p->next->next! =L){p->next=p->next->next;p=p->next;}//此时p指向最后一个奇数结点if(p->next==L)p->next=L->pre->pre;elsep->next=l->pre;p=p->next;//此时p指向最后一个偶数结点while(p->pre->pre! =L){p->next=p->pre->pre;p=p->next;}p->next=L;//按题目要求调整了next链的结构,此时pre链仍为原状for(p=L;p->next! =L;p=p->next)p->next->pre=p;L->pre=p;//调整pre链的结构}//OEReform 解题方案: 答: voidOEReform(DuLinkedList&L)//按1,3,5,...4,2的顺序重排双向循环链表L中的所有结点{? p=L.next;while(p->next! =L&&p->next->next! =L){p->next=p->next->next;p=p->next;}//此时p指向最后一个奇数结点if(p->next==L)p->next=L->pre->pre;elsep->next=l->pre;p=p->next;//此时p指向最后一个偶数结点while(p->pre->pre! =L){p->next=p->pre->pre;p=p->next;}p->next=L;//按题目要求调整了next链的结构,此时pre链仍为原状for(p=L;p->next! =L;p=p->next)p->next->pre=p;L->pre=p;//调整pre链的结构}//OEReform 评分标准: 3322 2. 参考答案: #defineM10//假设二叉树最多的层数 BinTreeSearchBTree(BinTree*T,DataTypex) {//以前序遍历算法查找值为x的结点 if(*T) { if((*T)->data==x)return*T; SearchBTree(&(*T)->lchild,x); SearchBTree(&(*T)->rchild,x); } } intInLevel(BinTreeT,DataTypex) { intstaticl=0;//设一静态变量保存层数 if(T) { if(l==0)//若是访问根结点 { l++;//第1层 if(T->data==x)returnl; if(T->lchild||T->rchild) l++;//若根有子树,则层数加1 } else {//访问子树结点 if(T->data==x)returnl; if(T->lchild||T->rchild) l++;//若该结点有子树,则层数加1 elsereturn0; } InLevel(T->lchild,x);//遍历左子树 InLevel(T->rchild,x);//遍历右子树 } } 解题方案: 评分标准:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 考试 数据结构 第三次 作业