2017年军事医学科学院卫生装备研究所836计算机应用之数据结构考研导师圈点必考题汇编
● 摘要
一、填空题
1. 无用单元是指_____,例_____
【答案】用户不再使用而系统没有回收的结构和变量;
2. 在双向循环链表中,向P 所指的结点之后插入指针f 所指的结点,其操作是_____、_____、_____、_____。
【答案】
3. 从用户的观点看,文件的逻辑结构通常可以区分为两类:一类是如NdBASE 中数据库文件那样的文件组织结构,称为_____文件:另一种是诸如用各种文字处理软件编辑成的文本文件,称为_____文件。从文件在存储器上的存放方式来看,文件的物理结构往往可区分为三类,即_____,_____和_____。B+树适用于组织_____的索引结构,m
阶个关键码。
【答案】数据库;文本;顺序组织;随机组织;链组织;随机组织;
4. 应用prim 算法求解连通网络的最小生成树问题。
(1)针对如图所示的连通网络,试按如下格式给出在构造最小生成树过程中顺序选出的各条边。
〔始顶点号,终顶点号,权值)
树每个结点至多有_____个儿子,除
根结点外每个结点至少有_____个儿子,根结点至少有_____个儿子,有k 个儿子的结点必有_____
(2)下面是Prim 算法的实现,中间有5个地方缺失,请阅读程序后将它们补上。
的值在〈limits •h>中
//图的顶点数,应由用户定义
//用二维数组作为邻接矩阵表示
//生成树的边结点
//边的起点与终点
//边上的权值
//最小生成树定义
//从顶点rt 出发构造图G 的最小生成树T ,rt 成为树的根结点
//初始化最小生成树
T
//依次求MST 的候选边
//遍历当前候选边集合
//选具有最小权值的候选边
//图不连通,出错处理
//修改候选边集合
【答案】(1)(0,3,1); (3,5, 4); (5,2,2); (3,1, 5); (1,4,3) (2)①T[k]; tovex=i②min=Maxint③mispos=i④exit (O )⑤T[i]; fromvex=v
【解析】Prim 算法的执行类似于寻找图的最短路径的Dijkstra 算法。假设N={V,E}是连通图
,是N
上最小生成树边的集合。算法从属于
为止。
5. 若不考虑基数排序,则在排序过程中,主要进行的两种基本操作是关键字的_____和记录的_____,
【答案】比较;移动
6. 设数组数组中任一元素均占内存48个二进制位,从首地址2000开始连续存放在主内存里,主内存字长为16位,那么
(1)存放该数组至少需要的单元数是_____;
(2)存放数组的第8列的所有元素至少需要的单元数_____; (3)数组按列存储时,元素【答案】270; 27; 2204 【解析】数组的元素个数为
因为每个元素占内存48个二进制位,即6个字节。故总
E T 开始,重复执行下述操作:在所有u
属于
加入集合
同时将
并入
v
直到
的边(u ,v )属于E
中找一条代价最小的边
的起始地址是_____。
需要个字节,因为主内存字长为16位,即2个字节,所以至少需要
个字节,因此至少需要
个单元数。
第8列有9个元素,共占个单元数。由题知,每个元素占3
个单元。按列存储时,的起始地址为
7. 设用希尔排序对数组{98,36,-9,0,47,23,1,8,10,7}进行排序,给出的步长(也称 增量序列)依次是4,2,1则排序需_____趟,写出第一趟结束后,数组中数据的排列次序_____。
【答案】3; (10,7,-9,0,47,23,1,8,98,36)
8. 对于一个具有n 个结点的单链表,在已知的结点半p 后插入一个新结点的时间. 复杂度为_____,在给定值为x 的结点后插入一个新结点的时间复杂度为_____。
【答案】
【解析】第一种情况只需直接修改指针的指向。第二种情况必须从头结点遍历找到x 的结点。
9. 按LSD 进行关键字排序,除最次位关键字之外,对每个关键字进行排序时,只能用_____的排序方法。
【答案】稳定
10.以下是用类C 语言写山的算法,该算法将以二叉链表存储的二叉树中的叶结点按从左到右的顺序链成一个带头结点的双向循环链表,链接时,结点的Lchild 域作为前链域,指向结点的直接前驱,结点的Rchild 域作为后链域,指向结点的直接后继。算法中,使用一个顺序栈stack , 栈顶head 为双向循坏链表的头指针。 指针为top , P , t 为辅助指针,试填充算法中的空格,使算法完整。
void leafchain(BiTree Abt)
{p={BiTree)malloc (sizeof (BiTNode )); If (!p ){print£(“OVERFLOW\n”; exit (1); }
head=p; top=0; if (bt )
{top++; stack[top]=bt; while (top )
{t=stack[top]; top--;
if (it->Lchild && !t->Rchild){ (1) ; (2) ; (3) ; } else {if( (4) ){top++; stack[top]= (5) ; } if ( (6) ){top++; stack[top]= (5) ; } } }
(8) ; (9) ; } } 【答案】
p->Rchild=t:t->Lchild=p:p=t: p->Rchild=head:head->Lchild=p
t->Rchild!=null:t->Rchild:
t->Lchild!=null: t->Lchild: