一、选择题(15个题,每题2分,共计30分)
1、数据结构DS可以被定义成DS=(D,R),其中D表示( B )的集合,R表示( C )的集合。
A 数据对象 B数据元素 C 关系 D 映像
2、计算机的算法指的是( B ),它必须具备输入、输出和( CD )等五大特性。
A 计算方法 B 解决问题的有限序列
C 可行性、确定性和有穷性 D 可行性、确定性和有穷性
3、顺序表中第一个元素的存储地址是100,每个元素的长度为4,则第5个元素的地址是( C )。
A.110 B.108 C.116 D.120
4、抽象数据类型的三个组成部分分别是( A)
A 数据对象、数据关系和基本操作 B 数据元素、逻辑结构和存储结构
C 数据项、数据元素和数据类型 D 数据元素、数据结构和数据类型
5、算法分析的两个主要方面( A )
A 空间复杂度和时间复杂度 B正确性和简单性
C 可读性和文档性 D 数据复杂性和程序复杂性
6、顺序存储结构中的数据元素之间的逻辑关系由( C )来表示的。
A 线性结构 B非线性结构 C 存储位置 D指针
7、下面程序的时间复杂为( )
for(i=1,s=0; i<=n; i++) {t=1;for(j=1;j<=i;j++) t=t*j;s=s+t;}
(A) O(n) (B) O(n2) (C) O(n3) (D) O(n4)
8、设指针变量p指向单链表中结点A,若删除单链表中结点A,则需要修改指针的操作序列为( )。
(A) q=p->next;p->data=q->data;p->next=q->next;free(q);
(B) q=p->next;q->data=p->data;p->next=q->next;free(q);
(C) q=p->next;p->next=q->next;free(q);
(D) q=p->next;p->data=q->data;free(q);
9、有链表L,在结点p和结点q之间插入一个结点s的语句是( )
A s->next=q; p=s; B p->next=s ; s=q; C s->next=q; p->next=s; D s=q; p->next=s;
10、带有头结点的链表L,则判断链表为空的条件是( 没答案,L->next==NULL )
A L==NULL B L->next=NULL C l->next==NULL D L->next==null
11、用首插法和尾插法创建的链表,同样的输入顺序,在遍历链表的时候,关于链表元素的输出顺序说法错误的是( )
A两者输出的顺序一致 B 两者输出的顺序互为逆序关系 C 首插法输出的顺序与输入的顺序相反 D尾插法输出的顺序和输入的顺序相同
12、在一个长度为n的顺序表中,在第i个元素(1in+1)之前插入一个新元素时须向后移动( )个元素。
A n-i B n-i+1 C n-i-1 D i
13、在单链表的第i个结点后插入一个新结点(1in)的算法时间复杂度是( )
A O(1) B O(n) C O(n2) D O(log2n)
14、对于单链表表示法,以下说法错误的是( )
A数据域用于存储线性表的一个数据元素
B指针域或链域用于存放一个指向本结点的直接后继结点的指针
C所有数据通过指针的连接而组织成单链表
D NULL称为空指针,它不指向任何结点,只起标志作用
15、在线性表的下列运算中,不改变数据元素之间结构关系的运算是( )
A 插入 B 删除 C 排序 D 定位
二、时间复杂度计算(2个题,每题5分,共计10分)
提示:最大语句频度就是执行次数最多的语句的执行次数
1:答案: n3 和 O(n3)
2:答案: log2n 和 O(log2n )
三、算法填空(2个题,每题15分,共计30分)
1、如下算法完成带头结点的单链表的初始化。(15分)
void initList(LinkList &L) { //初始化单链表
L= (LinkList)malloc(sizeof(Lnode));
if(!L)
exit(0);
L->next=NULL;
}
2、如下算法完成删除顺序表L中所有元素x。(15分)
void deleteValue(SeqList &L, elemType x)
{
int i,k=0;
for(i = 0; i < L.Length; i++) // 检测表中所有元素
if( L.elem[i]!=x ) { // 若元素不具有 x 值
if(i!=k) //该元素前移
L.elem[k]=L.elem[i];
k++;
}
L.Length=k;
}
三、算法设计(2个题,每题15分,共计30分)
1、删除顺序表中的最大值。(15分)
int deleteMax(SqList &L, ElemType &x)
{
//删除顺序表 L 中具有最大值的元素。 如果删除成功, 则函数返回 1并通过引用
//型参数 x 返回其值, 否则函数返回 0。
if (L.length==0) {
printf("这是空表!\n");
return 0;
}
int i, max_i=0; //假定0号元素的值最大
for (i = 2; i <= L.length; i++) //循环,寻找具有最大值的元素
if (L.elem[i - 1] > L.elem[max_i])
max_i = i-1; //max_i 记忆当前具最大值元素的位置
x = L.elem[max_i];
L.length--;
L.elem[max_i] = L.elem[L.length];
return 1;
}
2、统计链表中元素e的个数。(15分)
int count(LinkList L,elemType e)
{
LinkList p=L->next;
int n=0;
while(p)
{
if(p->data==e)
n++;
p=p->next;
}
return n;
}
#+=#+=#+=#+=#+=#+=#+=#+=#+=#+=#+=#+=#+=#+=#+=#+=#+=#+=#+=#+=#+=#+=#+=#+=#+=#+=#+=
本文来自博客园,作者:凡是过去,皆为序曲,转载请注明原文链接:https://www.cnblogs.com/longhai3/p/15887671.html
如有疑问,欢迎提问
#+=#+=#+=#+=#+=#+=#+=#+=#+=#+=#+=#+=#+=#+=#+=#+=#+=#+=#+=#+=#+=#+=#+=#+=#+=#+=#+=