scanf("%d",&a[i][j]);
max=findmax(a);
printf("%d",max);
}
36、下面程序找出100-200之间的全部素数。
#include
#include
voidmain()
{
intm,k,i;
for(m=101;m<=200;m=m+2)
{
k=sqrt(m);
for(i=2;i<=k;__________)
if(m%i==0)__________;
if(i>k)printf("%d",m);
}
}
第二部分数据结构(共100分)
一、单项选择题(本大题共12小题,每小题2分,共24分)
在每小题列出的四个备选项中只有一个是符合题目要求的,请将正确答案代码填写在答题纸相应位置上。
1、要表示高校的校、系、班级的有关数据及其关系,选择()比较合适。
(A)线性结构
(B)树结构
(C)图结构
(D)集合结构
2、下列函数中渐进时间复杂度最小的是()。
(A)T(n)=nlogn+5000n
(B)T(n)=n*n-8000n
(C)T(n)=n的(log(2n))次方-6000n
(D)T(n)=2n的(log(2n))次方-7000n
3、已知一个栈s以及一个输入序列(A,B,C,D,E),每个元素按照A、B、C、D、E顺序进栈一次,进栈后可立即出栈,也可在栈中停留一段时间后再出栈,则不能得到()序列。
(A)A,B,C,D,E
(B)B,A,E,D,C
(C)C,B,A,D,E
(D)D,C,A,B,E
4、平均排序效率最好的排序方法是()。
(A)直接插入排序
(B)快速排序
(C)简单选择排序
(D)冒泡排序
5、某链表中最常用的操作是在已知的一个结点之前插入一个新结点和删除其之前一个结点,则采用()存储方式最节省运算时间。
(A)双向链表
(B)带头结点的单向链表
(C)带尾指针的单向链表
(D)单向循环链表
6、在逻辑结构不变的情况下,不是导致一个图的遍历序列不唯一的因素是()。
//?
(A)出发点不同
(B)存储(物理)结构不同
(C)遍历方法不同
(D)画法不同
7、散列函数有一个共同的要求,即函数值应当尽量以()取其值域的每个值。
(A)最大概率
(B)最小概率
(C)正态分布概率
(D)均等概率
8、下面()方法可以判断出一个图中是否存在环(回路)。
//?
(A)排序
(B)深度和广度遍历
(C)求最短路径
(D)求关键路径
9、最佳二叉搜索(排序)树是()。
(A)关键码个数最小的二叉搜索树
(B)退化为线性的二叉搜索树
(C)搜索中平均比较次数最小的二叉搜索树
(D)任何结点的度数为0或2的二叉搜索树
10、()是数据的基本单位,即数据集合(对象)中的个体
(A)数据结构
(B)数据项
(C)数据元素
(D)数据对象
11、(线性)表是一个()。
(A)有限序列,可以为空
(B)有限序列,不能为空
(C)无限序列,可以为空
(D)无限序列,不能为空
12、树是结点的集合,它()根结点。
(A)有0个或1个
(B)有0个或多个
(C)有且只有1个
(D)有1个或1个以上
二、填空题(本大题共7小题,每空2分,共16分)
请将答案写在答题纸相应的位置上。
13、在有n个顶点的有向图中,每个顶点的度最大可达__________。
14、以下程序段的时间复杂度是__________。
i=0;j=0;
while(i+j<=n)
{
if(i>j)j++;
elsei++;
}
15、下图所示的二叉树后序遍历的结果是__________。
A
/\
BF
/\\
ECG
//\
DHJ
/
I
16、在一个双向链表中p所指结点之前插入一个由指针s所指的新结点,写出可执行的操作序列:
__________。
(前指和后指的指针预分别为prior和next)
17、(线性)表有两种存储结构:
顺序存储结构和链式存储结构,请就这两种存储结构完成下列填充:
__________存储密度较大,可以随机存取;__________不可以随机存取,插入和删除操作比较方便。
18、递归的程序执行时使用__________来保存各层递归调用时的现场信息,以保证可以正确返回。
19、设数组a[M](M为最大空间个数)作为循环队列Q的存储空间,front为队头指针(指向第一个存放数据的位置),rear为队尾指针(指向最后一个存放数据位置的下一个),则判定Q队列的队满条件是__________。
三、应用题(本大题共4小题,每小题10分,共40分)
请将答案写在答题纸相应的位置上。
20、设字符集D={A,B,C,D,E},各字符使用频率W={10,2,5,6,4}。
画出对字符进行哈夫曼编码时所对应的哈夫曼树,并给出各字符的编码。
21、用普里姆(Prim)算法从右图中的顶点1开始逐步构造最小支撑(代价生成)树,要求画出构造的每一步。
16
①───────②
│╲╱│╲5
│╲21╱│╲
│╲╱19│╲
14│⑥│9③
│26╱╲│╱
│╱11╲│╱
│╱╲│╱6
⑤───────④
18
22、给定待排序关键字集合为{23,14,48,25,5,19},按关键字非递归递减(从小到大)排序,写出采用冒泡排序的每一趟(最外层循环的每一次)排序结果。
23、
(1)图示表示右边有向图的邻接表。
(4分)
(2)写出从顶点1开始分别进行深度优先和广度优先遍历的顶点序列各一种。
(6分)
②────→④
↗↑╲╲
╱│╲↘
①│╲⑥
╲│╲↗
↘│↘╱
③────→⑤
四、算法设计题(本大题共2小题,每小题10分,共20分)
请将答案写在答题纸相应的位置上。
24、假定用一个有头结点循环链表来存储一个有序的线性表,线性表从头到尾为非递减(从小到大)有序(如下图)。
用指针current从head开始搜索数据域等于key的元素在线性表中位置,如果搜索成功则current指向搜索到的结点,函数返回该指针;如果搜索不成功,函数返回空指针NULL。
请在函数SortedlistLocate(head,ky)内填空,完成下列算法以实现这种搜索,并使得搜索不成功的平均比较次数小于链表长度。
┌───────────────────────────────────────────────────────────────┐
│┌──┬──┐┌──┬──┐┌──┬──┐┌──┬──┐┌──┬──┐┌──┬──┐┌──┬──┐│
head→└→│^│─┼─→│10│─┼─→│20│─┼─→│30│─┼─→│40│─┼─→│50│─┼─→│60│─┼─┘
└──┴──┘└──┴──┘└──┴──┘└──┴──┘└──┴──┘└──┴──┘└──┴──┘
↑
current
typedefstructnode
{
elemtypedata;//数据域
structnode*next;//指针域
}lnode,*linklist;
linklistSortedlistLocate(linklisthead,elemtypekey)
{
linklistcurrent;
if(__________)returnERROR;//错误提示
current=__________;
whil