for(int j=0;j<3;j++)
in>>m.mat[i][j];
return in;
}
ostream& operator<<(ostream &out,Matrix &m)
{
for (int i=0;i<2;i++)
for(int j=0;j<3;j++)
out<
6. 堆的形状是一棵()。
A) 二叉排序树
B) 满二叉树
C) 完全二叉树
D)平衡二叉树
7.在含有 n 个顶点、e 条边的无向图的邻接矩阵中,非零元素的个数为()。
A) e
D) n2-2e
B) 2e
C) n2-e
8. 设有 50 个元素,用折半查找法进行查找时,在查找成功的情况下,最大比较次数是()。
A) 4
B) 5
C)6
D)7
9. 设有一个用开放定址法的线性探测再散列处理冲突的哈希表如下:
0
1
2
3
4
5
6
7
8
9
10
13
25
80
16
17
6
14
哈希函数为 H(key)=key%11,若要查找关键字 14 的记录,所需的比较次数是()。
A) 3
B) 6
C)7
D) 9
10. 对初始状态为递增序列的表按递增顺序排序,最费时间的是()算法。
A)堆排序
B) 归并排序
C)插入排序
D) 快速排序
七、算法分析和阅读题(18 分)
1.(6 分,每空 2 分)设单链表的类型定义如下。list 为带头结点的单链表头指针,下面算
法实现求指定序号为 order(order≥1)的结点的位置并返回,请填空加以完成。
typedef struct Node{
char name[10];
int age,score;
struct Node* next;
}*LinkList;
LinkList
fun1(LinkList& list,int order) {
if(! (order>=1 && order<=Get_length(list)) ){
// 函数 Get_length(list)返回链表的长度
cout<<"Error order found\n";
return NULL;
(1)
;
}
LinkList t=
int num=1;
while( (2) ){
num++;
(3) ;
}
return t
;
}
2.(6 分) 阅读下面算法,指出该算法的功能。
Status
fun2(char
*str){
Queue Q;
Stack T;
char ch1, ch2;
InitStack(T);
int i ;
InitQueue(Q);
for
( i = 0;
Push( T,
EnQueue( Q, str[i] );
str[i] );
str[i] != ‘\0’;
i++) {
}
for ( i =1;
i <= StackLength(T)/2 ;
i++ ){
//StackLength(T)返回栈 T 的长度
Pop(T, ch1) ;
if ( ch1 != ch2 )
return
DeQueue( Q, ch2);
false;
}
return
true;
}
3.(6 分)设二叉树 T 以二叉链表为存储结构,指出下面算法的功能。
int
fun3(BiTree T){
return 0;
if (!T )
if (T->lchild == NULL && T->rchild == NULL )
else
return fun3(T->lchild) + fun3(T->rchild)+1;
return 1;
}
八、简答题(13 分)
1.如何理解链表中的头指针和头结点?(4 分)
2.(6 分)若有如下无向图 G:
(1)试画出 G 的邻接表表示,要求邻接表中的表结点按顶点序号从小到大排列;(2 分)
(2)根据你所给出的邻接表,分别给出从顶点 A 出发的深度优先搜索序列和深度优先搜索
生成树。(4 分)
A
C
B
D
E
无向图 G
F
3.(3 分) 设有一组关键字{25,57,48,37,12,92,6,86,15,33,18,20},请给出快速排序的
第一趟结果。
九、算法设计题(24 分)
1.分别编写非递归与递归算法,输出不带头结点的单向链表 L 的各个元素值 (11 分)
2.设二叉排序树 bt 以二叉链表为存储结构,试设计算法删除二叉排序树 bt 中值最大的结
点。(13 分)