一.术语解释
1 线性表
2 树的结点的层次
3 排序
4 完全图
5 最小生成树
二.单项选择:(25')
1 在数组{1,2,3,4,5,6,7,8,9,10}中折半查找5,需要的比较次数是()
A 1 B 2 C 3 D 4
2 假定问题规模为N时,某递归算法的时间复杂度记为T(N),已知T(1)=1,
T(N)=2T(N/2)+N/2,用O表示的时间复杂度为()
A O(N) B O(NlogN) C O(N²) D O(N²logN)
3 一棵二叉树的先序遍历输出为ABCDEFGH,中序遍历为CBEDAFHG,则其先序遍历输出为()【此题的确问的是先序遍历】
A CBDEAFGH B CBEDAFHG
C BCEDFAHG D 以上都不对
4 栈和队列的共同点是()
A 先进先出 B 后进先出
C 插入删除只能在端点进行 D 没有共同点
5 起泡排序的时间复杂度是(C)【此题原试卷将答案附上了】
A O(N) B O(NlogN) C O(N²) D O(N²logN)
三.简答(60')
1 用一个数组实现两个栈,尽可能利用存储空间,写出两个栈的插入、删除操作算法。
2 已知一组关键字为{27、25、23、37、35、33、77、75、73、97、95、93、103},按哈希函数H(key)=key Mod 11(表长11),用连地址法处理冲突,画出哈希表。
3 一个递归函数具有如下形式
Void func(int n)
{
if(n>0)
{
func(n/2);
printf("d%",n*n);
func(n/2);
}
return;
}
请依次写出fun(1),fun(2),fun(3),fun(5)执行的结果,其时间复杂度为多少?
4 一个通信网络中共有九中字符,其概率分别为0.14、0.23、0.15、0.03、0.18、0.1、0.02、0.11、0.04,画出相应的赫夫曼树来设计其赫夫曼编码。
5 V?→V?→V?→∧; V?→V?→V5→∧ ; V3→V5→V6→∧ ; V4→∧;
V5 →V7 →V8 →∧ ; V6→V8→∧; V7 →∧ ; V8→V9→∧ ; V9→∧,
画出这个逻辑结构的图示,分别写出从V?出发的深度优先和广度优先搜索序列。
四.应用编程题:(40')
1 在一个整形数组a中既有负数又有正数,编写一个算法将a中所有负数移到整数之前, 要求其时间复杂度为O(n),n为数组长度,并且只使用常数个辅助空间。
例如:a[ ]={1,2,3,4,-1,1,-2,-1,-4}执行算法后的输出为a[ ]={-4,-1,-2,-1,1,4,3,2,1}
2 编写一个C函数,输入一个二叉树的根节点,返回这棵树中所有值大于0的节点值之和,如果根为空,返回0。
二叉树的链式存储结构对应的C语言的结点类型定义如下:
typedef struct node{
ElemType data;
struct node *lchild;
struct node *rchild;
}BTree;