当前位置:问答库>考研试题

2018年同济大学电子与信息工程学院408计算机学科专业基础综合之数据结构考研强化五套模拟题

  摘要

一、算法设计题

1. 设整数序列ai ,a2,a3,…,an ,给出求解最大值的递归程序。

【答案】算法如下:

//设整数序列存于数组a 中,共有n 个,本算法求解其最大值

2. 借助于快速排序的算法思想,在一组无序的记录中查找给定关键字值等于key 的记录。设此组记录存放于数组

【答案】算法如下:

本句的有无不影响査找结果

3. 写一算法找出n 个数的最大值和最小值,要求最坏条件下的元素比较次数为

【答案】算法如下:

用最多3n/2-2次比较在n 个元素r 中选出最大值和最小值

n 为偶数时

第 2 页,共 38 页

中。若查找成功,则输出该记录在r 数组中的位置及其值,否则显示“not

find ”信息。请编写出算法并简要说明算法思想。

r 最小值

("最大值

) ;

4. 已知二叉树T ,试写出复制该二叉树的算法(t→T) 。

【答案】算法如下:

复制二叉树t 的非递归算法

是二叉树的结点指针的队列,容量足够大

结束本题

5. 对于任意的无符号的十进制整数m ,写出将其转换为十六进制整数的算法(转换仅要求能够输出正确的十六进制的整数即可) 。

【答案】算法如下:

//本算法将无符号十进制整数m 转换为十六进制整数

本算法的递归描述如下:

//本算法将无符号十进制整数m 转换为十六进制整数

第 3 页,共 38 页

二、应用题

6. 写出下面算法中带标号语句的频度。

TYPE

Ar =ARRAY[l...n]OF datatype;

PROCEDURE penn(a:ar ;k ,n :integer) ; V AR x:datatype ;i :integer ; BEGIN (1)IF k=n THENBEGIN

(2)FOR i:=l TO nDO (3)write(a[i]);

(4)FOR i:=k TO n DO (5)A[i]:=a[i]+i*i; (6)perm(a, k+1, n) ;

设k 的初值等于1。

【答案】(1)这是一个递归调用,因k 初值为1, 由语句(6)知,每次调用k 增1,故第(1)语句执行n 次,所以频度是n 。

(2)这是FOR 循环语句,在满足(1)的条件下执行,该语句进入循环体(3)n次,加上最后一次判断出界,故执行了n +1次,所以频度是n +1。

(3)这是循环体语句,共执行了n 次,所以频度是n 。

(4)这是循环语句,当k =l 时判断n +1次(进入循环体(5)n次) ,k =2时判断n 次,最后一次k =n ﹣l 时判断3次,故执行次数是(n+1) +n +... +3=(n+4)(n﹣1)/2次,所以频度是(n+4)(n﹣1)/2。

(5)语句(5)是(4)的循环体,每次比(4)少一次判断,故执行次数是n +(n﹣1) +... +2=(n+2)(n

第 4 页,共 38 页