一、单项选择题在每小题列出的四个备选项中只有一个是符合题目要求的。
6. 串的操作函数str定义为:
int str(char*s){
char*p=s;
while(*p!=’\0')p++;
return p=s;
}
则str("abcde")的返回值是
A B C D
C
[解析] 由此操作函数可知,循环执行前,P和S均指向字符串的首字符,循环执行结束后,S仍指向首字符,而P指向字符串之后的结束符(\0),故P—S返回的是整个字符串的长度。
10. 已知森林F={T
1,T
2,T
3,T
4,T
5),各棵树T
i(i=1,2,3,4,5)中所含结点的个数分别为7,3,5,1,2,则与F对应二叉树的右子树中的结点个数为
A B C D
12. 如图所示的有向图的拓扑序列是
- A.c,d,b,a,e
- B.c,a,d,b,e
- C.c,d,e,a,b
- D.c,a,b,d,e
A B C D
13. 对关键字序列(6,1,4,3,7,2,8,5)进行快速排序时,以第1个元素为基准的一次划分的结果为
- A.(5,1,4,3,6,2,8,7)
- B.(5,1,4,3,2,6,7,8)
- C.(5,1,4,3,2,6,8,7)
- D.(8,7,6,5,4,3,2,1)
A B C D
二、填空题1. 数据的链式存储结构的特点是借助______表示数据元素之间的逻辑关系。
2. 如果需要对线性表频繁进行______或______操作,则不宜采用顺序存储结构。
3. 如图所示,可以利用一个向量空间同时实现两个类型相同的栈。其中栈1为空的条件是top1=0,栈2为空的条件是top2=n-1,则“栈满”的判定条件是______。

top1>>top2(或top2=top1-1或top1-top2+1)
4. 静态存储分配的顺序串在进行插入、置换和______等操作时可能发生越界。
5. 广义表L=(a,(b,()))的深度为______。
6. 任意一棵完全二叉树中,度为1的结点数最多为______。
7. 求最小生成树的克鲁斯卡尔(Kruskal)算法耗用的时间与图中______的数目正相关。
8. 在5阶B-树中,每个结点至多含4个关键字,除根结点之外,其他结点至少含______个关键字。
9. 若序列中关键字相同的记录在排序前后的相对次序不变,则称该排序算法是______的。
10. 常用的索引顺序文件是______文件和______文件。
三、解答题如图所示,在n×n矩阵A中,所有下标值满足关系式i+j<n+1的元素ai,j的值均为0,现将A中其它元素按行优先顺序依次存储到长度为n(n+1)/2的一维数组sa中,其中元素a1,π存储在sa[0]。
(1)设n=10,元素a4,9存储在sa[p],写出下标p的值;
(2)设元素ai,j存储在sa[k]中,写出由i,j和n计算k的一般公式。

3. 由字符集{s,t,a,e,i)及其在电文中出现的频度构建的哈夫曼树如图所示。已知某段电文的哈夫曼编码为111000010100,请根据该哈夫曼树进行译码,写出原来的电文。

已知无向图G的邻接表如图所示,
(1)画出该无向图;
(2)画出该图的广度优先生成森林。

6. 对序列(48,37,63,96,22,31,50,55,11)进行升序的堆排序,写出构建的初始(大根)堆及前两趟重建堆之后的序列状态。
初始堆:
第1趟:
第2趟:
初始堆:(96,55,63,48,22,31,50,37,11)
第1趟:(63,55,50,48,22,3l,11,37,96)
第2趟:(55,48,50,37,22,31,11,63,96)
五、算法设计题1. 假设线性表采用顺序存储结构,其类型定义如下:
#define ListSize 100
typedef struct{
int data[ListSize];
int length;
}SeqList,*Table;
编写算法,将顺序表L中所有值为奇数的元素调整到表的前端。
参考答案一:
void f34(Table L)
{ int i,j,t;
i=0;
j=L—>length-1;
while(i<j)
{ while(i<j&&L—>data[i]%2)
i++;
while(i<j&&L—>data[j]%2==0)
j--;
if(i<j)
{ t=L—>data[i];
L—>data[i]=L—>data[j];
L—>data[j]=t;
i++;
j--;
}
}
}
参考答案二:
void f34(SeqList*L)
{ int i,j=0.t;
for(i=0;i<L—>length;i++)
if(L—>data[i]%2)/*奇数*/
{ if(i!=j)
{ t=L—>data[i];
L—>data[i]=L—>data[j];
L—>data[j]=t;
}
j++;
}
}