级数据结构试题A卷.docx
- 文档编号:23066965
- 上传时间:2023-04-30
- 格式:DOCX
- 页数:24
- 大小:200.95KB
级数据结构试题A卷.docx
《级数据结构试题A卷.docx》由会员分享,可在线阅读,更多相关《级数据结构试题A卷.docx(24页珍藏版)》请在冰豆网上搜索。
级数据结构试题A卷
2004级数据结构试题A卷
一、选择题(共15题,每题2分、共30分)
1.若结点的存储地址与其关键字之间存在某种映射关系,则称这种存储结构为()
A.顺序存储结构B.链式存储结构
C.索引存储结构D.哈希表
2.若评价算法的时间复杂性,比较以2为底对数阶量级(下面简称对数量阶)与线性阶量级,通常()
A.对数阶量级复杂性大于线性阶量级
B.对数阶量级复杂性小于线性阶量级
C.对数阶量级复杂性等于线性阶量级
D.两者之间无法比较
3.下列关于线性表的基本操作中,哪些操作不会改变线性表内容()
A.初始化、求表长度、插入操作B.初始化、插入、删除操作
C.求表长度、读元素、定位操作D.定位、插入、删除操作
4.在一个单链表中,若p所指结点不是最后结点,s指向已生成的新结点,则在p之后插入s所指结点的正确操作是()
A.s->next=p->next;p->next=s;B.p->next=s->next;s->next=p;
C.s->next=p;p->next=s;D.s->next=p->next;p=s;
5.ALV树是一种平衡的二叉排序树,树中任一结点的()
A.左、右子树的高度均相同B.左、右子树高度差的绝对值不超过1
C.左子树的高度均大于右子树的高度D.左子树的高度均小于右子树的高度
6.n个顶点的有向完全图中含有向边的数目最多为()
A.n-1B.nC.n(n-1)/2D.n(n-1)
7.根据定义,树的叶子结点其度数()
A.必大于0B.必等于0
C.必等于1D.必等于2
8.在长度为n的顺序表的第i(1≤i≤n+1)个位置上插入一个元素,元素的移动次数为()
A.n-i+1B.n-i
C.iD.i-1
9.在一个无向图中,所有顶点的度数之和等于边数的()
A.1倍B.2倍
C.3倍D.4倍
10.在最好和最坏情况下的时间复杂度均为O(nlogn)且稳定的排序方法是()
A.快速排序B.堆排序C.归并排序D.基数排序
11.以下关于折半查找法的说法中,正确的为()
A.表中元素必须有序存储;
B.表中元素可以无序存储;
C.最大查找次数不超过元素个数;
D.一定是从最后一个个元素开始往前查找关键元素
12.下列陈述中正确的是()
A.二叉树是度为2的有序树
B.二叉树中结点只有一个孩子时无左右之分
C.二叉树中只能有度为2的结点
D.二叉树中每个结点只有两棵子树,并且有左右之分
13.索引文件通常由索引表和主文件两部分构成,其中()
A.索引表和主文件均必须是有序文件
B.索引表和主文件均可以是无序文件
C.索引表必须是有序文件
D.主文件必须是有序文件
14.直接插入排序算法,其时间复杂性为()
A.O
(1)B.O(n)
C.O(nlog2n)D.O(n2)
15.下列排序方法中,属于不稳定的排序方法是()
A.直接插入排序法B.快速排序法
C.冒泡排序法D.希尔排序法
二、计算、简答题(共10个问题,每题3分、共30分)
1、有N个结点的满二叉树,如采用链表方式存储,则左、右孩子指针一定是NULL的结点有多少[1]。
2、若图的邻接矩阵是一个对称矩阵,则该图一定是一个[2]。
3、C语言中,二维数组floatA[10][20]采用按行为主序的存储方式,若A[0][0]的存储地址为300,则[A][10][10]的地址为[3]。
4、有二叉树,先序遍历结果EBADCFHGIKJ,中序遍历结果为ABCDEFGHIJK,则后序遍历结果是什么?
[4]
5、有一通讯电文使用的字母频率分别是:
A
B
C
D
E
F
G
H
0.07
0.19
0.02
0.06
0.32
0.03
0.21
0.10
对每个字母,给出Huffman编码。
[5]
6、将以下关键码{25,12,15,31,7,20,37}依次插入空平衡二叉树,在插入过程中,哪些结点插入树后做了平衡调整?
[6]
构造好树后,再插入数字50,给出该树根结点平衡因子[7](左子树高-右子树高),此时该树是否要做必要的调整?
[8](答否或者调整类型即可)
7、写出有向图G的邻接矩阵,请用Floyd方法求出各点之间最短路[9]。
题7图
8、升序归并排序{49,38,65,97,76,13,27}并画出各个步骤[10]。
三、算法分析、设计与编程(每题10分、共40分)
1、对照下面的程序,分析函数Unknown(),回答以下问题:
(1)它的功能是什么?
(2)执行该程序后,计算出的结果和含义是什么?
#include
structT{
structT*Left;
structT*Right;
intData;
};
intUnknown(structT*pt)
{
structT*p;
p=pt;
while(p->Right!
=NULL)
p=p->Right;
returnp->Data;
}
main()
{
structTMyT[7];
intn;
MyT[0].Data=9;MyT[1].Data=10;
MyT[2].Data=11;MyT[3].Data=12;
MyT[4].Data=14;MyT[5].Data=16;
MyT[6].Data=18;
MyT[3].Left=&MyT[1];MyT[3].Right=&MyT[4];
MyT[1].Left=&MyT[0];MyT[1].Right=&MyT[2];
MyT[4].Left=&MyT[5];MyT[4].Right=&MyT[6];
MyT[0].Left=NULL;MyT[0].Right=NULL;
MyT[2].Left=NULL;MyT[2].Right=NULL;
MyT[5].Left=NULL;MyT[5].Right=NULL;
MyT[6].Left=NULL;MyT[6].Right=NULL;
n=Unknown(&MyT[3]);
printf("%d",n);
}
2、实际编程中对树的处理,其存储方式中多采用双亲表示法。
例如有以下树:
用这个方法表示,则有以下的表:
结点序号结点名称父结点序号
0A-1
1B0
2C0
3D1
4E1
5F1
6G2
7H4
8I4
请在下面程序中补充两个函数,能计算这类存储方式树的度、高度。
#include
#include
structTree{
intNID;//结点序号
intPID;//父结点序号
charData[4];//结点名称
};
//T[]:
树;NodeNum:
结点个数。
函数High返回这个树的高
intHigh(structTreeT[],intNodeNum)
{
(1)从这里开始补充程序,把你的代码写在答题卡上
}
//T[]:
树;NodeNum:
结点个数。
函数Degree返回这个树的度
intDegree(structTreeT[],intNodeNum)
{
(2)从这里开始补充程序,把你的代码写在答题卡上
}
main()
{
structTreeMyT[9];
strcpy(MyT[0].Data,"A");MyT[0].NID=0;MyT[0].PID=-1;
strcpy(MyT[1].Data,"B");MyT[1].NID=1;MyT[1].PID=0;
strcpy(MyT[2].Data,"C");MyT[2].NID=2;MyT[2].PID=0;
strcpy(MyT[3].Data,"D");MyT[3].NID=3;MyT[3].PID=1;
strcpy(MyT[4].Data,"E");MyT[4].NID=4;MyT[4].PID=1;
strcpy(MyT[5].Data,"F");MyT[5].NID=5;MyT[5].PID=1;
strcpy(MyT[6].Data,"G");MyT[6].NID=6;MyT[6].PID=2;
strcpy(MyT[7].Data,"H");MyT[7].NID=7;MyT[7].PID=4;
strcpy(MyT[8].Data,"I");MyT[8].NID=8;MyT[8].PID=4;
printf("该树度=%d\n",Degree(MyT,8));
printf("该树高=%d\n",High(MyT,8));
}
3、如图按邻接矩阵存储,用C语言编写一个函数,能针对有向图、无向图删除指定两个顶点之间的边。
请在以下程序中补充你的代码:
#include
//Edge[][5]:
邻接矩阵
//GType:
图类型,0:
无向图;1:
有向图
//V0、V1:
要删除的边的两个顶点编号
voidDeleteE(intEdge[][5],intGType,intV0,intV1)
{
从这里开始补充程序,把你的代码写在答题卡上
}
main()
{
charV[][6]={"V1","V2","V3","V4","V5"};
intE[][5]={
{0,1,0,1,1},
{1,0,1,0,1},
{0,1,0,0,1},
{1,0,0,0,1},
{1,1,1,1,0},
};
DeleteE(E,0,0,1);//代表删除E中0、1之间的边,E是无向图
}
4、用C语言写一个你喜欢的排序程序,排序方法不限、排序对象不限,并说明这个排序方法的时间复杂度。
2004数据结构试题A卷答题卡
姓名:
学号成绩:
一、选择题(每题2分、共30分)
本大题得分:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
二、计算、简答题(每题3分、共30分)
本大题一共7题10个小问题,请仔细对照题目的问题编号回答,把你的答案写在问题编号中。
本大题得分:
1
2
3
4
5
6
7
8
9
10
三、算法分析、设计与编程(每题10分、共40分)
本大题得分:
1
(1)
(2)
2
(1)
(2)
3
4
2004数据结构试题A卷答案及评分标准
一、选择题(每题2分、共30分)
1
D
2
B
3
C
4
A
5
B
6
D
7
B
8
A
9
B
10
C
11
A
12
D
13
C
14
D
15
D
二、计算、简答题(每题3分、共30分)
1
(n+1)/2
2
无向图
3
300+(10X20+10)X4=1140
4
ACDBGJKIHFE
5
ABCDEFGH
10100010000010011110001011011
该题答案不唯一,但编码长度必须一致
6
加入15后调整
7
2
8
调整RR
9
或者:
10
{49,38,65,97,76,13,27}
{38,49},{65,97},{13,76},27}
{38,49,65,97},{13,27,76}
{13,27,38,49,65,76,97}
三、算法分析、设计与编程
4
分值10分
该问题只要算法正确,语句正确即可得分。
算法正确前提下,如有个别语句错误,扣分不超过3分;
不能回答时间复杂度或答错者扣3分。
如算法错不得分。
三、算法分析、设计与编程(每题10分、共40分)
本大题得分:
1
分值10分。
该题目主要看考生程序理解能力,每个小题5分,无法回答出“二叉排序树“者视具体给分。
(1)找到二叉排序树中最大的结点;
结果是18,就是main()中二叉排序树的最大结点。
2
分值10分。
这两个函数核心算法是一致的,常见的就是给每个结点设计计数器变量D[],然后按父结点连接次数计数,最后给出计数后的最大值和计数的数组元素个数。
D[]是计数器。
算法合理、一般语句错误扣分不超过3分;算法错误不得分。
intHigh(structTreeT[],intNodeNum)
{
(1)
这里是考生答题部分
intD[100],i,m;
for(i=0;i<100;i++)D[i]=0;
for(i=0;i { m=T[i].PID; if(m>=0)D[m]++; } m=0; for(i=0;i if(D[i]! =0) m++; returnm; } //T[]: 树;NodeNum: 结点个数 intDegree(structTreeT[],intNodeNum) { (2) 这里是考生答题部分 intD[100],i,m; for(i=0;i<100;i++)D[i]=0; for(i=0;i { m=T[i].PID; if(m>=0)D[m]++; } m=0; for(i=0;i if(D[i]>m) m=D[i]; returnm; } 3 分值10分 该题目实际是邻接矩阵存储结构图遍历,只不过把邻接矩阵1换成0、0换成1做深度遍历可。 当然广度也正确。 算法错误不得分。 完整程序如下: #include //Edge[][5]: 邻接矩阵 //GType: 图类型,0: 无向图;1: 有向图 //V0、V1: 要删除的边的两个顶点编号 voidDeleteE(intEdge[][5],intGType,intV0,intV1) { //主要看两种类型的图处理是否正确 if(GType==0) { Edge[V0][V1]=0; Edge[V1][V0]=0; } if(GType==1) Edge[V0][V1]=0; } main() { charV[][6]={"V1","V2","V3","V4","V5"}; intE[][5]={ {0,1,0,1,1}, {1,0,1,0,1}, {0,1,0,0,1}, {1,0,0,0,1}, {1,1,1,1,0}, }; DeleteE(E,0,0,1);//代表删除E中0、1之间的边,E是无向图 } 2004级地信专业《数据结构》 试卷说明 1、试题来源以及参考资料 2003级的《数据结构》期末试卷,内容主要来自历年中央电视大学自考《数据结构》、《数据结构题集C语言版》(严蔚敏吴伟民编著),自遍程序设计部分试题。 2范围 考试范围包括线形表、链表、树、图和排序。 3、难度 同中央广播电视大学计算机专业数据结构自考试题相比,选择题难度大致相同。 程序设计试题难度大于国家自考试题。 4、试题类型 试题形式有两种: 选择题和填空题,所以答案基本是唯一的,这类试题参考答案与学生实际答案对比,试题评卷中不存在主观判卷问题。 程序设计试题总分达40分,其中10题目是默写经典算法,其余30分来自实验成熟算法,考生实际答题与标准答案可能有出入,这类试题判分要根据实际情况。 5、试题数量 试题数量为15个选择题,10个填充点,4个算法程序设计题。 6、试题得分点分布 试题各得分点,15个选择题每题2分、10个填充点每题3分,程序设计40分。 试题中大大加强了编写程序的要求。 实际情况表明: 要求写出程序! 对学生总体素质提高很大。 2004级地信专业《数据结构》考试 成绩分析 1、期末总评成绩分析 平时成绩来自学生实验平均成绩、占总分40%; 期末考试成绩来自本次试题考试,占总分60%。 实验平均成绩=实验报告平均成绩*0.5+实验考试成绩*0.5 平均成绩分布如下: 分数段 90-100 80-89 70-79 60-69 60以下 人数 0 1 15 15 5 最高成绩83分,最低25分。 笔试中缺考一人。 该班考试成绩差的同学,本学期选课课时明显多了,对于这种比较困难的课程,思想准备不足,另外,2年级学生由于外语4级考试的压力,导致对本课程投入时间也明显不足。 个别复修本课程的同学,投入时间明显不足,也没有足够重视。 该班成绩分布图如下: 2002级地信专业《数据结构实验》 实验报告说明 1、本实验成绩均来自平时实验的成绩,实验项目有: 实验1: 线性表 实验2: 栈及其应用、递归 实验3: 二叉树 实验4: 树 实验5: 图的结构和图的便历、图的连通性问题 实验6: 最短路分析 实验7: 平衡二叉树的建立和实现 实验8: 六种排序性能分析 两篇读书笔记: (小论文) (1)NET中哈希对象的分析; (2)C#中变量含义分析 2、实验内容及其参考资料 《数据结构题集C语言版》(严蔚敏吴伟民编著)。 《AlgorithmsinCPart1-4: Fundament,DataStructures,Sorting,Searching》(RobertSedgwick) 《ProgrammingMicrosoftWindowswithC#》MicrosoftPress 3各实验成绩 根据实验难度的不同,实验1-8,每个10分; 论文1、论文2每个10分。 实验报告总分100分。 上述实验,为适应目前计算机发展的现状,基本要求同学们除读懂C语言实验程序、完成基于C语言的实验外,全部都要求再移植到VB6、VB.NET或C#,再完成WINDOWS下或WEB下的同等功能的程序,故而远比一般的数据结构实验工作量更大,费时也更长。 这种要求,其他学校类似专业课程中也是不多见的,也算是一种尝试。 实验考试试题: 从目前看,这种尝试也是有问题的,首先是同学们在掌握新的计算机语言、熟悉新的计算机程序开发环境上,能力还差的很远。 针对新计算机语言,大多数同学掌握简单的编程尚有问题,面对数据结构中复杂的算法程序设计,困难更多。 这更需要长时间坐在计算机面前不断尝试,大多数同学也没有这样的条件。 所以完成这些实验的,大多是个人有计算机的同学,而无计算机的同学,完成这些实验就很艰难。 2004级数据结构实验考试试题 注意事项: 1、首先在计算机D盘建立以你的名字命名的新文件夹; 2、再通过网络共享把试题全部复制到你的这个文件夹下; 3、答题目时,请选择适合你的计算机语言程序,除第一题必须使用C语言外,其余各题你可以使用C、VB6、C#中的任何一种计算机语言来完成。 结果直接保存到你的试题目录下即可,同时删除你没使用的其他语言试题。 最后,把答完的题目统一通过共享传递指定计算机目录下。 4、每题20分,共5题。 1、见该题程序,该程序是一个用来插入数字、然后构造平衡二叉树的C语言程序,请给该程序补充一个二叉树遍历函数,以便将该程序构造的平衡二叉树、以遍历结果形式打印出来。 函数要求如下: 函数原型: Trave(structAvlNode*T,intTraveMode) 参数: structAvlNode*T: 指向二叉树根结点的指针; intTraveMode: 遍历模式,0: 先序遍历 1: 中序遍历 2: 后序遍历 在main()补充语句、测试你的函数、对照main()中的数据,遍历main()中构造的平衡二叉树、测试你的函数并打印结果。 注意: 该题只能使用C语言来回答。 2、见该题程序,选择适合你的计算机语言。 该程序是一个链表程序,VB6、C#以类形式提供、C以函数形式提供。 请给补充一个查找函数、找到需要的结点。 各计算机语言要求如下: 链表结点元素结构如下: structElemType { intID; charElem[20]; }; 链表结点结构如下: structLNODE { structElemTypeData; structLNODE*next; }; 链表结构如下: structLinkList { structLNODE*head,*tail; intlen; }; 对C语言: 函数原型: structLNODE*Find(structLNODE*LN,intE) 作用: 找到链表中值为E的结点并返回这个结点指针; 参数: structLNODE*LN: 指向链表首个结点的指针; intE: 希望查找的结点值; 返回结果: 如找到,返回这个链表结点的地址指针,如没有则返回NULL; 前提: 你不得修改程序其他部分,仅能把你的代码写入Find函数部分; 对VB语言: 给LinkTable类补充Find方法: 方法原型: Find(ByValEasInteger)asElemType 作用: 找到链表中值为E的结点并返回这个结点; 参数: E: 希望查找的结点值,见ElemType类; 返回结果: 如找到,返回这个链表结点,如没有则返回Nothing; 前提: 你不得修改程序其他部分,仅能把你的代码写入LinkTable类中的Find函数部分; 对C#语言: 给LinkTable类补充Find方法: 方法原型: ElemTypeFind(intE) 作用: 找到链表中值为E的结点并返回这个结点; 参数: E: 希望查找的结点值; 返回结果: 如找到,返回这个链表结点内容,如没有则返回null; 前提: 你不得修改程序其他部分,仅能把你的代码写入LinkTable类中的Find函数部分; 3、请检查该题目程序,这是一个使用栈来进行10-8进制数字转换的程序,方法如下: M=N%8; Push(M); N=N/8; 循环直到N=0,再逐个Pop(M),就是结果; 例如N=1348,把该数转化成8进制数,过程如下: NN=N/8M=N%8 13481684 16821
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 级数 结构 试题