一. 单选题
1. 在数据结构中,从逻辑上可以把数据结构分为___
A. 动态结构和静态结构
B. 紧凑结构和非紧凑结构
C. 线性结构和非线性结构
D. 内部结构和外部结构
C。 解析:数据的逻辑结构是从逻辑关系上描述数据,可以看做从具体问题抽象出数学模型。根据数据元素之间的关系的不同特性,逻辑结构通常可划分为集合结构、线性结构、树结构和图结构。其中集合结构、树结构和图结构都属于非线性结构,因此数据结构逻辑上可以分为线性结构和非线性结构两大类。
2. 与数据元素本身的形式、内容、相对位置、个数无关的是数据的___
A. 存储结构
B. 存储实现
C. 逻辑结构
D. 运算实现
C。解析:逻辑结构是从数学问题抽象出来的数学模型。从逻辑关系上描述数据,它与数据的存储无关。也就是说与数据本身的形式、内容、位置、个数无关。
3. 通常要求的同一逻辑结构中的所有数据元素具有相同的特性,这意味着___
A. 数据具有同一特点
B. 不仅数据元素包含的数据项个数相同,而且对应数据项的类型要一致
C. 每个数据元素都一样
D. 数据元素所包含的数据项的个数要相等
B。数据项是组成数据元素的,有独立含义的,不可分割的最小单位。同一个逻辑结构中的数据元素所包含的数据项的个数要相同,且要求对应的数据项的类型也要一致。例如:对于学生信息表,这种线性结构,其中数据元素为所有的学生,数据项是学号、姓名、性别等。这里的学号、姓名、性别的数据类型是一致的。
4. 一下说法正确的是:
A. 数据元素是数据最小的单位
B. 数据项是数据的基本单位
C. 数据结构是带有结构的各项数据的集合
D. 一些表面上很不相同的数据可以是相同的数据逻辑结构
D。数据元素是数据的基本单位,数据项是元素的最小单位,数据结构是带有结构的各项数据元素的集合,所以ABC都是错误的。逻辑结构是从逻辑关系上描述数据,它与数据本身的形式无关。例如:学生表和图书表都是线性结构,而学生数据䄦图书数据表面是完全不同的数据。
5.设n是描述问题的非负整数,下面程序段的时间复杂度是___
x = 2;
while (x < n/2 )
x = 2 * x;
A. O(log2n)
B. O(n)
C. O(nlog2n)
D. O(n^2)
A。解析:程序中基本语句
x = 2 * x;执行的次数为k,执行k时:x = 2^k+1。有循环结束条件x < n/2,可得出2^k+1 < n/2,k = log2n + C (C为常数),因此T(n) = O(log2n)。
6. 下面程序段的时间复杂度为___
count = 0;
for (k=1; k<=n; k* = 2)
for (j=1; j<n; j++)
count++;
A. O(log2n)
B. O(n)
C. O(nlog2n)
D. O(n^2)
C。解析:内层循环条件
j<n与外层循环条件无关,每次循环j自增1,每次内循环都执行n次,所以内循环的时间复杂度是O(n)。外层循环条件为k<=n,增量定义为k* = 2,可知循环次数为2^k <= n,即k <= log2n。所以外层循环的时间复杂度是O(log2n)。对于嵌套循环,根据乘法法则则可以知道该段程序的时间复杂度为:O(nlog2n)。
7. 某算法的语句执行频度为:(3n + nlog2n + n^2 + 8),其时间复杂度表示___
A. O(n)
B. O(nlog2n)
C. O(n^2)
D. O(log2n)
C。解析:在计算时间复杂度时,可以忽略所以低次幂项和最高次幂项的系数。
8. 设一位数组中有n个数组元素,则读取第i个元素的平均时间复杂度为___
A. O(n)
B. O(nlog2n)
C. O(1)
D. O(log2n)
C。读取第
i个数据元素可以直接通过数组的下标定位,与n无关,因此平均时间复杂度为O(1)。
9. 下面算法将一维数组a中的n个数逆序存放到原数组中,空间复杂度为___
for (i=0; i<n; i++)
b[i] = a[n-i-1];
for (i=0; i<n; i++)
a[i] = b[i];
A. O(1)
B. O(n)
C. O(log2n)
D. O(n^2)
B。解析:算法的控件复杂度只需分析算法在实现时所需要的辅助空间和问题规模n的函数关系。该算法需要另外借助一个大小为n的辅助数组b,所以其空间复杂度为O(n)。
10. 下面算法将一维数组a中的n个数逆序存放到原数组中,空间复杂度为___
for(i=0;i<n/2;i++) {
t = a[i];
a[i] = a[n-i-1];
a[n-i-1] = t;
}
A. O(1)
B. O(n)
C. O(log2n)
D. O(n^2)
A。解析:该算法仅需要借助一个变量
t,与问题规模n大小无关,所以其空间复杂度为O(1)。
11. 下面叙述中正确的是___
A. 一个算法的空间复杂度大,则其时间复杂度也必定大
B. 一个算法的空间复杂度大,则其时间复杂度必定小
C. 一个算法的时间复杂度大,则其空间复杂度必定小
D. 以上三种说法都不对
D。解析:算法的时间复杂度和空间复杂度没有直接关系
简答题
分析下列各算法的时间复杂度
x=90,y=100;
while(y>0)
if(x>100) {
x=x-10;
y--;
}else{
x++;
}
O(1) 解析:程序中基本语句
y--x++执行次数是由x,y决定的,而x和y都是常数,所以T(n) = O(2)。
for(i=0;i<n;i++)
for(j=0;j<m;j++)
a[i][j] = 0;
O(n*m) 解析:由于程序为嵌套循环,外层循环的执行次数为n,内层循环的次数为m,所以
T(n) = O(n*m)。
s=0;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
s+=B[i][j];
sum = s;
O(n^2) 解析:由于程序为嵌套循环,内外层循环的执行次数又都为n,所以
T(n) = O(n*n) = O(n^2)。
i = 1;
while(i<=n)
i=i*3;
O(log3n) 解析:设基本语句
i=i*3的执行次数为f(n),则3^f(n) <= n。T(n) = O(log3n)。
x=0;
for(i=1;i<n;i++)
for(j=1;j<n-i;j++)
x++;
O(n^2) 解析:基本语句执行的次数为:
n-1 + n-2 + ......+ 1 = n(n-1)/2.,因此T(n) = O(n^2)
x=n;//n>1
y=0;
while(x>= (y+1)*(y+1))
y++;
O(sqrt(n)) 解析:基本语句
y++的执行次数为f(n),则x >= (f(n)+1)^2,又由于x = n,所以f(n) <= sqrt(n) - 1,即T(n) = O(sqrt(n))。sqrt 为平方根函数