1-1 数据结构包括数据的逻辑结构、存储结构和运算集合这三部分。
正确
1-2 算法的五大特性为:有限性、确定性、输入、输出、可行性。
正确
1-3 数据的基本逻辑结构为集合结构、线性结构、树形结构、图状结构
正确
2-1 数据结构可以从逻辑上分成 (C) 两大类。
A.动态结构和静态结构
B.紧凑结构和非紧凑结构
C.线性结构和非线性结构
D.内部结构和外部结构
2.2 数据逻辑结构可以分为( B )。
A.线性结构和图结构
B.集合结构、线性结构、树结构和图结构
C.顺序结构和链式结构
D.集合结构和非线性结构
2-3 算法分析的两个主要方面是( A )。
A.空间复杂度和时间复杂度
B.正确性和简明性
C.可读性和文档性
D.数据复杂性和程序复杂性
2-4 算法设计的要求
设计一个好的算法应该满足正确性、(B)、健壮性和高效性等要求。
A.稳定性 B.可读性 C.可靠性 D.可行性
2-5 算法的特性
一个算法必须满足有穷性、确定性、 ( C ) 、输入和输出等五个重要特性。
A.高效性 B.稳定性 C.可行性 D.可读性
2-6 执行下面程序段时,执行S语句的频度为( D )。
for(int i=0;i
A.n^2 B.n^2/2 C.n(n+1) D.n(n+1)/2
2-7 下列程序段的时间复杂度为( B )。
x = n; /*n > 1*/
y = 0;
while(x >= (y + 1) * (y + 1))
y = y + 1;
A.Θ(n) B.Θ(n½) C.Θ(1) D.Θ(n2)
2-8 时间复杂度分析
下面算法的时间复杂度为( D )。
int foo(int n)
{
int i, s = 0;
for (i = 1; i * i <= n; ++i)
{
s += i;
}
return s;
}
A.O(n2) B.O(n) C.O(n) D.O(log2n)
2-9 时间复杂度分析
下面算法的时间复杂度为 ( D )。
int foo(int n)
{
int i, j, s = 0;
for (i = 1; i <= n; ++i)
{
for (j = 1; j <= i; ++j)
{
s += i * j;
}
}
return s;
}
A.O(n倍根号n) B.O(n) C.O(nlog2n) D.O(n^2)
2-10 时间复杂度分析 下面算法的时间复杂度为( B )。
int foo(int n)
{
int i, m = n / 2, s = 0;
for (i = 1; i <= m; ++i)
{
s += i;
}
return s;
}
A.O(log2n) B.O(n) C.O(根号n) D.O(n^2)
2-11 时间复杂度分析
下面算法的时间复杂度为 ( A )。
int foo(int n)
{
int i, s = 0;
for (i = 1; i <= n; ++i)
{
s += i;
}
return s;
}
A.O(n) B.O(根号n) C.O(log2n) D.O(n^2)
2-12 时间复杂度分析
下面算法的时间复杂度为 ( D )。
int foo(int n)
{
return n * (n + 1) / 2;
}
A.O(n) B.O(n2) C.O(根号n) D.O(1)
2-13 设n为正整数,请估算下列程序段的时间复杂度为( C )
i=1; k=0;
while(i<=n-1)
{ k=k+10*i;
i++;
}
A.O(1) B.O(logn) C.O(n) D.O(n3)
2-14 设n为正整数,请估算下列程序段的时间复杂度为( B )
i=1; j=0;
while(i+j<=n)
{ if(i>j) j++
else i++;
}
A.O(1) B.O(n) C.O(n^2) D.O(n3)
2-15 设n为正整数,请估算下列程序段的时间复杂度为( D )
x=n; y=0; /* n>1 */
while(x>=(y+1)*(y+1))
y++;
A.O(1) B.O(n) C.O(logn) D.O(根号n)
2-16 设n为正整数,请估算下列程序段的时间复杂度为( A )
x=91; y=100;
while(y>0)
{ if(x>100)
{ x=x-10;
y--;
}
else x++;
}
A.O(1) B.O(n) C.O(logn) D.O(n2)
执行次数为常数项,时间复杂度用O(1)表示
在数组A[1..N]中查找值为k的元素,若找到输出其位置i(1<=i<=n),否则输出0作为标志。
Search(int a[],int n,int k);
其中 a
、 n
、k
都是用户传入的参数。a
为数组名,期中存了n
个整数,下标为1到n
;k
为待查数据元素;若找到了,返回其下标;否则,返回0。
#include
int Search(int a[50],int n,int k)
{
int i;
for(i=1;i<=n;i++)
{
if(a[i]==k)
{
return i;
}
}
return 0;
}
找出数组A[1..N]中最大值和次大值。(数组中元素个数大于两个且值各不相同)
void FindMax(int a[],int n,int *pmax1,int *pmax2);
其中 a
和 n
是用户传入的参数。 a
为数组名, n
为数组中元素的个数,在下标从1到n
处存放。利用指针变量 pmax1
和pmax2
带出运算结果。 pmax1
为指向最大值的指针;pmax2
为指向次大值的指针。
void FindMax(int a[],int n,int *pmax1,int *pmax2){
for(int i = 1;i
在数组中有序排序从大到小,存储在数组中,则数组中第一个元素为最大值,第二个元素为最小值