北京航空航天大学程序设计与数据结构试题
(2002年)
一、 简答题
1. “数据结构”课程是计算机专业的基础课还是专业课,或者专业基础课?(2’)
2. 学习“数据结构”课程需要哪些课程作为它的基础(举例两门课程)?若没有这些知识,对学习“数据结构”课程可能会产生哪些影响?请举例说明(不超过100字)。(4’)
3. “数据结构”课程将为那些课程学习奠定必要的基础?请举例说明哪些课程(举例两门课程)用到了“数据结构”课程的哪些知识(不超过100字)。(4’)
二、 (5’)
请推导出结论:具有n0个叶结点的哈夫曼树(Huffman)的分支总数为2(n0-1)。
三、 单项选择题(2’x15)
1. 线性链表中各链接点之间的地址__________。
A)必须连续 B)部分地址必须连续
C)不一定连续 D)连续与否无所谓
2. 在非空线性链表中由p所指的链接点后面插入一个由q所致的链接点的过程是依次执行动作__________。
A) link(q)p; link(p)q; B) link(q)link(p); link(p)q;
C) link(q)link(p); pq; D) link(p)q; link(q)p;
3. 在非空双向循环链表中由q所指的那个链接点前插入一个p指的链接点的动作对应的语句依次为rlink(p)q, llink(p)llink(q), llink(q)p, __________。(空白处为一条赋值语句)
A) rlink(q)p B) rlink(llink(q))p
C) rlink(llink(p))p D) rlink(rlink(p))p
4. 在初始为空的堆栈中依次插入元素f,e,d,c,b,a以后,连续进行了三次删除操作,此时栈顶元素是__________。
A) c B) d C) b D) e
5. 若某堆栈的输入序列为1,2,3,……,n,输出序列的第1个元素为n,则第i个输出元素为__________。
A) i B) n-i C) n-i+1 D)哪个元素无所谓
6. 求字符串T在字符串S中首次出现的位置的操作称为__________。
A)求串的长度 B)求子串 C)串的模式匹配 D)串的连接
7. 若一棵度为7的树有8个度为1的结点,有7个度为2的结点,有6个度为3的结点,有5个度为4的结点,有4个度为5的结点,有3个度为6的结点,有2个度为7的结点,该树一共有__________个叶结点。
A) 35 B) 28 C) 77 D) 78
8. 若一棵二叉树有1001个结点,且无度为1的结点,则叶结点的个数为__________。
A)498 B)499 C)500 D)501
9. 已知某完全二叉树采用顺序存储结构,结点数据信息的存放顺序依次为A、B、C、D、E、F、G、H,该完全二叉树的后序遍历序列为__________。
A)HDEBFGCA B)HEDBFGCA C)HDEBAFGC D)HDEFGBCA
10.若某带权图为G=(V,E),其中V={v1,v2,v3,v4,v5,v6,v7,v8,v9,v10},E={(v1,v2)5,(v1,v3)6,(v2,v5)3,(v3,v5)6,(v3,v4)3,(v4,v5)3,(v4,v7)1,(v4,v8)4,(v5,v6)4,(v5,v7)2,(v6,v10)4,(v7,v9)5,(v8,v9)2,(v9,v10)2}(注:顶点偶对右下角的数据表示边上的权值),则G的关键路径的长度为__________。
A)19 B)20 C)21 D)22
11.顺序查找法适合于存储结构为__________的线性表。
A)顺序存储结构或链式存储结构 B)散列存储结构
C)索引存储结构 D)压缩存储结构
12.当n足够大时,在按值有序的顺序表中进行折半查找,当查找概率相等的情况下,其查找成功的平均查找长度是__________。
A)(n+1)/2 B)n/2 C)log2(n+1)-1 D)log2(n+1)
13.下述命题中,不成立的应是__________。
A)m阶B树中的每一个分支结点的子树的个数都小于或等于m
B)m阶B树中的每一个分支结点的子树的个数都大于或等于m/2
C)m阶B树中的任何一个结点的子树的高度都相等
D)m阶B树中有k个子树的分支结点包含k-1个关键字
14.已知散列范围为[0..9],散列函数(哈希函数)为H(key)=key MOD 9,处理冲突的方法为线性探测再散列法,依次插入关键字序列8,18,25,44,34,21,19,23后的哈希表为__________。
0 1 2 3 4 5 6 7 8 9
A) 18 44 19 21 23 25 8 34
0 1 2 3 4 5 6 7 8 9
B) 18 34 19 21 23 25 8 44
0 1 2 3 4 5 6 7 8 9
C) 18 19 21 23 34 25 8 44
0 1 2 3 4 5 6 7 8 9
D) 19 21 23 44 25 34 8 18
15.在下述的排序方法中,不属于内排序方法的是__________。
A)插入排序法 B)选择排序法 C)拓扑排序法 D)归并排序法
四、(15’)
请设计一个事件复杂度为O(n),空间复杂度不超过O(2)的算法,该算法将数组A[0:n-1]中所有元素循环右移k个位置。
五、(15’)
已知某二叉树采用广义表形式作为输入,请写一非递归算法,建立该二叉树的二叉链表存储结构。设该链接点构造为 ,根结点地址为T。
关于采用广义表形式表示二叉树的约定如下:
表中的一个字母表示一个结点的数据信息;
每个根结点作为由子树构成的表的构成的表的名字放在表的前面;
每个结点的左子树与右子树之间用逗号分开;若只有右子树而无左子树,则逗号不能省略;
整个广义表的末尾由一个特殊符号@作为表的结束标志。
例如:(A(B(D),C(F(,E),G))@表示某一棵二叉树,该二叉树的根结点数据信息为A。其中,数据信息为F的结点只有右子树,而无左子树。
六、(1’x10)
在下面给出的C函数实现中的__________处填上适当的内容,使其完成正确的功能。
函数说明:函数void ftoa(double f, char s[])将浮点数f转换成相应的字符串,并存放在s中,该函数最多只能转换小数点后四位,如123.45将转换成“123.45”,-123.456789将转换成“-123.4567”。
void ftoa(double f, char s[])
{
int i,j,len,c,n;
double sign;
if((sign=f)<0)
f=-f;
n=(int)f;
i=0;
do{
s[i++]=n%10+__________;
}while(__________);
if(sign<0)
__________;
len=i;
for(i=0,j=len-1;__________;__________){
c=s;
__________;
s[j]=c;
}
f-=(int)f;
s[len++]=__________;
for(i=0;i<4;i++){
f*=10;
s[len++]=__________;
}
while(s[len-1]==’0’)
__________;
s[len]=__________;
}
七、(15’)
命令tail用来打印文件中最后n行。命令格式为:
tail [-n] filename
其中
-n: n表示需要打印的行数,当省略此参数时,n的缺省值为10。
filename: 给定文件名。
例如,命令tail –20 example.txt表示打印文件example.txt的最后20行。
请用C语言实现该程序,该程序应具有一定的错误处理能力,例如能处理非法命令参数和非法文件名。
提示1:使用命令行参数;
提示2:可以使用下面的C库函数:
- int atoi(char *s)将数字串转换为相应整数;
- fopen, fclose, printf, fprintf, exit;
- fgets(char *s, int n, FILE *fp)从文件中读入一行;
- void *malloc(unsigned size), free申请和释放内存;
- strlen计算字符串长度;
- strcpy将一个字符串拷贝到另一个字符串中。
除此之外,不允许使用其它库函数。 |