数据结构与算法(C语言版)期末复习题

数据结构与算法(C语言版)期末复习题(选择题)

PS:共143道题目,使用电脑观看排版效果最佳
(待更新判断题、简答题、编程题)

1、数据的逻辑结构可以简单分为( A )。
A. 线性结构和非线性结构
B. 内部结构和外部结构
C. 压缩结构和非压缩结构
D. 顺序结构和链式结构
4种基本结构:集合结构、线性结构、树形结构、图形结构

2、计算机处理问题的基本单元是( A )。
A. 数据元素
B. 数据
C. 数据项
D. 数据结构

3、 算法分析的目的是( B )。
A. 分析算法的易懂性和文档性
B. 分析算法效率以求改进
C. 找出数据的合理性
D. 研究算法中的输入和输出关系

4、逻辑结构中的树形结构,指的是数据元素之间存在( B )。
A. 一对一关系
B. 一对多关系
C. 多对多关系
D. 没有关系
线性结构:一对一
树形结构:一对多
图形结构:多对多

5、 在存储数据时,通常不仅需要存储数据元素的值,还需要存储( B )。
A. 数据存储的方式
B. 数据元素之间的关系
C. 数据元素的数量
D. 数据的操作方式

6、算法的描述方式不包括( C )。

​ A. 自然语言

​ B. 流程图

​ C. E-R图

​ D. 程序设计语言

4种方法:自然语言、流程图、伪代码、计算机语言

7、顺序存储,存储单元的地址 ( C )
A. 一定不连续
B. 部分连续,部分不连续
C. 一定连续
D. 不一定连续

8、在下面的程序段中,x=x+1;的语句频度为( C )
for( i=1;i<=n;i++)
for( j=1;j<=n;j++)
x=x+1;
A. O(log2n)
B. O(2n)
C. O(n^2)
D. O(n)
看最内层循环嵌套次数

9、算法的执行时间,与以下哪个因素无关 ( A )
A. 算法所占用的空间
B. 问题的规模
C. 计算机硬件环境
D. 算法设计的策略

10、算法分析的主要方法是( B )。
A. 正确性和简明性
B. 空间复杂度和时间复杂度
C. 数据复杂性和程序复杂性
D. 可读性和文档性

11、算法的基本性质,不包括( A )。
A. 高效率
B. 可行性
C. 确定性
D. 有穷性
有穷性、确定性、可执行、输入性、输出性

12、算法的组成要素不包括( A )
A. 问题的规模
B. 操作
C. 数据结构
D. 控制结构

13、数据结构是一门研究在非数值计算的程序设计问题中所涉及的( C )以及他们之间的关系和运算的科学。
A. 数据流
B. 数据映像
C. 数据元素
D. 数据内容

14、线性表的链式存储结构是一 种( A )存储结构。
A. 顺序存取
B. 散列存取
C. 索引存取
D. 随机存取
线性表分为:顺序存储结构的顺序表、链式存储结构的链表

线性表的链式存储结构中,各个元素的存储位置是不连续的,对元素的存取需要通过指针顺序进行访问

15、若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则利用( D )存储方式最节省时间。
A. 带头结点的双循环链表
B. 单循环链表
C. 双链表
D. 顺序表

16、若长度为n的线性表采用顺序存储结构,在其第i个位置插入一个新元素的算法的时间复杂度为( B ) 。
A. O(0)
B. O(n)
C. O(1)
D. O(n^2)
当在长度为 n 的线性表采用顺序存储结构中第 i 个位置插入一个新元素时,需要将后面的元素依次向后移动一位,以腾出位置给新元素,所以需要移动 n-i 个元素,其操作次数与表长 n 有关,因此时间复杂度为 O(n)

17、在一个长度为n的顺序表中,删除第i个位置的数据元素,需要移动( A )条元素
A. n - i
B. n - i + 1
C. n - i - 1
D. i

18、在一个长度为n的顺序表中第i个元素(1<=i<=n)之前插入一个元素时,需向后移动( A )个元素。
A. n-i+1
B. n-i
C. n-i-1
D. n-1

19、线性表的顺序存储结构是一种 ( A ) 的存储结构。
A. 随机存取
B. 散列存取
C. 索引存取
D. 顺序存取
线性表的顺序存储结构中,元素在存储器中是按逻辑顺序依次存放的,只要知道了首地址,就可以通过简单的计算快速访问到任意位置的元素,具有随机存取的特点。

20、设某顺序表中第一个元素的地址是se(下标从1开始),每个结点占m个单元,则第i个结点的地址为( B )。
A. se - i × m
B. se + ( i - 1 ) × m
C. se + i × m
D. se + ( i + 1 ) × m

21、算法的时间复杂度取决于( A )。
A. 问题的规模和待处理数据的初始状态
B. 不好说
C. 待处理数据的初始状态
D. 问题的规模

22、数据在计算机内有链式和顺序两种存储方式,在存储空间使用的灵活性上,链式存储比顺序存储要(A )。
A. 高
B. 低
C. 相同
D. 不好说

23、顺序表的长度,指的是( D )
A. 以上都不是
B. 顺序表中,最多能够存放的数据元素的数量
C. 顺序表所暂用的存储空间大小
D. 顺序表中,当前所有的数据元素的数量

24、已知指针p指向单链表L中的某结点,则删除其后继结点的语句是( C )

A. p = p->next
B. p->next = NULL
C. p->next = p->next->next
D. p = NULL

25、线性表L在( C )情况下适用于使用链式结构实现。
A. L中含有大量的数据元素
B. L中数据元素的结构复杂
C. 需不断对L进行删除和插入操作
D. 需经常修改L中的结点值

26、对于一个头指针为head的带头结点的单链表,判定该表为空表的条件是( A )。
A. head->next == NULL
B. head != NULL
C. head->next == head
D. head == NULL

27、循环链表的主要优点是( D ) 。
A. 在进行插入、删除运算时,能更好的保证链表不断开
B. 已知某个结点的位置后,能够容易找到它的直接前趋
C. 不再需要头指针了
D. 从表中的任意结点出发都能访问整个链表的结点

28、设单链表中指针p指向结点m,若要删除结点m的直接后继结点(若存在),则需做的操作为( D )。
A. p = p->next->next;
B. p->next = p;
C. p = p->next;
D. p->next = p->next->next;

29、链表不具有的特点是( B )。
A. 所需空间与线性表长度成正比
B. 可随机访问任一元素
C. 插入删除不需要移动元素
D. 不必事先估计存储空间

30、线性表采用链式存储时,其地址( D )。
A. 一定是不连续的
B. 部分地址必须是连续的
C. 必须是连续的
D. 连续与否均可以

31、在顺序表中,只要知道( A ),就可在相同时间内求出任一数据元素的存储地址。
A. 基地址和每个数据元素大小
B. 向量大小
C. 数据元素大小
D. 基地址

32、线性表L=(a₁,a₂,……an),下列说法正确的是( D )。
A. 线性表中至少有一个元素
B. 每个元素都有一个直接前驱和一个直接后继
C. 表中诸元素的排列必须是由小到大或由大到小
D. 除第一个和最后一个元素外,其余每个元素都有一个且仅有一个直接前驱和直接后继。

33、线性表是( D )。
A. 一个无限序列,不可以为空
B. 一个有限序列,不可以为空
C. 一个无限序列,可以为空
D. 一个有限序列,可以为空
有序性:线性表中的元素是按照一定的顺序排列的。

唯一性:线性表中的元素是唯一的,不存在相同元素。

有限性:线性表中的元素个数是有限的,存在一个确定的表长。

34、线性表若采用顺序存储结构时,要求内存中可用存储单元的地址( B )。
A. 部分地址必须是连续的
B. 必须是连续的
C. 一定是不连续的
D. 连续或不连续都可以

35、以下说法错误的是( B )。
A. 顺序存储的线性表可以随机存取
B. 线性表的链式存储结构优于顺序存储结构
C. 求表长、定位这两种运算在采用顺序存储结构时实现的效率比采用链式存储结构时实现的效率高
D. 由于顺序存储要求连续的存储区域,所以在存储管理上不够灵活

36、单链表中每个结点的存储结构所占存储空间( A )。
A. 分两部分,一部分存放结点数据信息,另一部分存放表示结点间关系的指针
B. 只有一部分,存储表示结点间关系的指针
C. 只有一部分,存放结点值
D. 分两部分,一部分存放结点值,另一部分存放结点所占单元数

37、在单链表中,要将s所指结点插入到p所指结点之后,其语句应为( B )。
A. (*p).next=s; (*s).next=(*p).next;
B. s->next=p->next; p->next=s;
C. s->next=p->next; p->next=s->next;
D. s->next=p+1; p->next=s;
方法:先连接,再断开。先将s节点连接到p后一个节点,防止先断开的话找不到了

38、栈的特点不包括( C )。
A. 只能在一个端点处进行数据元素的插入和删除操作
B. 后进先出
C. 存储密度高
D. 先进后出
栈包括顺序栈、链栈

39、用链式存储结构存储的栈,栈顶指针指向链表的( A )位置。
A. 第一个结点
B. 任意一个结点
C. 以上都不是
D. 最后一个结点

40、在一个有n个单元的顺序栈中,top表示栈顶元素的下标,当做出栈操作时,top变化为( A )。
A. top–
B. top++
C. top不变
D. top=0

41、顺序栈出栈和入栈操作的时间复杂度都为( A )。
A. O(1)
B. O(n2)
C. O(n)
D. O(log2n)
无论是出栈还是入栈操作,它们只涉及栈顶元素的操作,而不需要遍历整个栈。因此,无论栈的大小是多少,这两种操作的时间复杂度都是常数级别的,即O(1)

42、若让元素1、2、3、4依次入栈,则出栈次序不可能出现的是( B )。
A. 4 3 2 1
B. 1 4 2 3
C. 2 1 4 3
D. 3 2 1 4
B选项应该是 1432

43、栈的插入和删除操作在 ( B )进行。
A. 栈底
B. 栈顶
C. 任意位置
D. 某一个固定的指定位置

44、补全下列顺序栈的入栈操作源代码 ( C )
typedef struct SQStack {    
	ElemType data[ MAXSIZE ];    
	int top = -1; 
}

int push(SQStack* stack ,  ElemType elem) {    
    if(stack->top  >=  MAXSIZE  -  1 )
		return 0;       
	stack->data[       ] = elem;    
		return 1; 
} 
A. stack->top
B. stack->top++
C. ++stack->top
D. stack->top + 1
data是用于存储元素的数组,top表示栈顶索引。

stack->top++;  // 栈顶指针加1
stack->data[stack->top] = elem;  // 将元素存入栈顶位置

45、递归过程或函数调用时,处理参数及返回地址需要用一种叫做( A )的数据结构。
A. 栈
B. 线性表
C. 队列
D. 多维数组
递归过程中的函数调用是一种典型的“后进先出”的行为,而栈数据结构正好满足这种特点。每次函数调用时,参数和返回地址都被压入栈顶,然后递归函数再次调用自身。当递归终止条件满足时,函数开始从最深层的调用返回,依次弹出栈顶的参数和返回地址,恢复之前的函数调用现场,直到最初的调用位置。

46、栈和队列的共同点是( C )。
A. 没有共同点
B. 都是先进先出
C. 只允许在端点处进行插入和删除运算
D. 都是先进后出

47、设栈S和队列Q的初始状态为空,元素e1,e2,e3,e4,e5和e6依次通过栈S,一个元素出栈后随即进入队列Q,若6个元素出队的序列是e2,e4,e3,e6,e5,e1,则栈S的容量至少应该是( D )。
A. 4
B. 2
C. 6
D. 3
出队顺序 = 入队顺序 = 出栈顺序

48、栈和队列都是( C )。
A. 链式存储的非线性结构
B. 顺序存储的线性结构
C. 限制存取点的线性结构
D. 限制存取点的非线性结构
都只允许在端点处插入和删除元素

49、用带头结点的单链表表示队长大于1的队列时,其队头指针指向队头结点,其队尾指针指向队尾结点,则在进行删 除操作时( A )
A. 仅修改队头指针
B. 队头、队尾指针都要修改
C. 队头,队尾指针都可能要修改
D. 仅修改队尾指针
队头删除元素,队尾插入元素

50、设计一个判别表达式中括号是否匹配出现的算法,采用( B )的数据结构最佳。
A. 单链表
B. 栈
C. 顺序表
D. 队列
从左到右遍历表达式的每个字符。
如果遇到左括号,将其压入栈中。如果遇到右括号,进行出站匹配操作。

51、 对于一个具有n个结点的单链表,在已知的结点*p后插入一个新结点的时间复杂度和在给定值为x的结点后插入一个新结点的时间复杂度分别为( D )。
A. O(n),O(n)
B. O(1),O(1)
C. O(n),O(1)
D. O(1),O(n)
已知的结点*p后插入一个新结点的时间复杂度为O(1):因为已经知道了要插入的位置,只需修改指针即可完成插入操作,与链表的长度无关,因此时间复杂度是常数时间。

在给定值为x的结点后插入一个新结点的时间复杂度为O(n):这种情况下,需要遍历整个链表找到给定值为x的结点,然后进行插入操作。最坏情况下,需要遍历整个链表,因此时间复杂度是与链表长度成正比的,即O(n)

52、最大容量为n的循环队列,队尾指针为rear,队头指针为front,则队空的条件是( A )。
A. rear==front
B. (rear-l)%n==front
C. (rear+1)%n==front
D. rear+1==front

53、最大容量为M的循环队列,队尾指针为rear,队头指针为front,采用牺牲一个元素空间来判断队满,则队满 的条件是( D )。
A. rear+1==front
B. (front+1)%M==rear
C. rear==front
D. (rear+1)%M==front
加一是采用的牺牲一个空间,是为了区分是队空还是队满的情况

54、顺序队列的出队操作代码如下,请给下划线位置选择正确的代码( D )
Course* remove(){  
	Course *old = NULL;
 	if (front < rear) {  
 		old = &data[front];   
		__________________;
 		printf("出队:%d  %s  %d\n",old->code,old->n
               ame,old->weight);
 	}
    return old;  
} 

A. rear++
B. front--
C. rear--
D. front++

55、顺序队列的入队操作代码如下,请选择下划线位置正确的代码 ( C )
void add(Course crs){  
    if (rear <= capacity)  {  
		data[rear] = crs;
 		printf("入队:%d  %s  %d \n",data[rear].code,data [rear].name,data[rear].weight);
        ________________;
     }  
} 

A. rear--
B. front++
C. rear++
D. front--

56、假设以数组 A[m]存放循环队列的元素,其头尾指针分别为 front 和 rear, 则当前队列中的元素个数为( A)。
A. (rear-front+m)%m
B. (front-rear+m)%m
C. rear-front+1
D. (rear-front)%m
1、当 rear >= front 时,表示队列中的元素连续排列,没有经过循环移动。
2、当 rear < front 时,表示队列中的元素经过了循环移动。
对于情况1,可以计算出元素个数为 rear - front。
对于情况2,原本最后一个位置的元素被移动到了数组的开头,可以理解为,数组长度m 减去 对头与队尾之间的间隔。

57、若用一个大小为 6 的数组来实现循环队列,且当前 rear 和 front 的值分别为 0 和 3,当从队列中删除 一个 元素,再加入两个元素后,rear 和 front 的值分别为多少?( D )
A. 1和5
B. 5和1
C. 4和2
D. 2和4
当从队列中删除一个元素后,front 的值会增加 1,变为 4。而 rear 的值不受影响,仍然为 0。
当加入两个元素到队列中时,rear 的值会增加 2,变为 2。而 front 的值不受影响,仍然为 4

58、在顺序栈中,top的初始值为-1,栈空间的大小为M,请问栈为满的条件是( A )。
A. top == M-1
B. top != M
C. top != M-1
D. top == M
对于顺序栈,top的初始值为-1,意味着栈中没有任何元素。当第一个元素被压入栈后,top的值将变为0,表示栈顶元素所在的位置。

59、在解决计算机主机和打印机之间速度不匹配问题时,通常设置一个打印数据缓冲区,主机将要输出的数据依 次写入该缓冲区,而打印机则从该缓冲区中取走数据打印。该缓冲区应该是一个( D )结构。
A. 堆栈
B. 数组
C. 线性表
D. 队列
先进入缓冲区的文件先被打印,选择先进先出的结构,即队列。

60、依次在初始为空的队列中插入元素a,b,c,d以后,紧接着做了两次删除操作,此时的队头元素是( D )。
A. b
B. a
C. d
D. c

61、一个递归算法必须包括( A )。
A. 终止条件和递归部分
B. 迭代部分
C. 终止条件和迭代部分
D. 递归部分

62、下面的说法中,只有( D )是正确的。
A. 一个字符串不能说是其自身的一个子串
B. 字符串的长度是指串中包含的字母的个数
C. 字符串的长度是指串中包含的不同字符的个数
D. 若串T包含在串S中,则T一定是S的一个子串

63、一个子串在包含它的主串中的位置是指( B )。
A. 子串的最后那个字符在主串中首次出现的位置
B. 子串的第一个字符在主串中的位置
C. 子串的任意字符在主串中的位置
D. 子串的最后那个字符在主串中的位置

64、空串与空格字符组成的串的区别在于( A )。
A. 两串的长度不相等
B. 两串包含的字符不相同
C. 没有区别
D. 两串的长度相等

65、字符串采用结点大小为1的链表作为其存储结构,是指( C )。
A. 链表的每个链结点的数据域中不仅只存放了一个字符
B. 链表中只存放1个字符
C. 链表的每个链结点的数据域中只存放了一个字符
D. 链表的长度为1

66、两个字符串相等的条件是( B )。
A. 两串的长度相等,并且两串包含的字符相同
B. 两串的长度相等,并且对应位置上的字符相同
C. 两串包含的字符相同
D. 两串的长度相等

67、 对特殊矩阵采用压缩存储的目的主要是为了 ( B )。
A. 使表达变得简单
B. 减少不必要的存储空间
C. 对矩阵元素的存取变得简单
D. 去掉矩阵中的多余元素

68、数组A[ 10 ] [ 10 ]按以行为主序进行存储,每个数据元素所占的空间为4个字节,首元素A[ 0 ] [ 0 ]的地址为 460,那么数据元素A[ 6 ] [ 5 ]的存储地址为( B )
A. 576
B. 720
C. 580
D. 724
// 二维数组A[m][n],k为存储单元数

以行为主序:A[i][j] = A[0][0] + (i * n + j) * k
以列为主序:A[i][j] = A[0][0] + (j * m + i) * k

本题解法:A[6][5] = 460 + (6 * 10 + 5) * 4 = 720

69、10阶上三角矩阵A,每个元素占4个字节, LOC(A[ 0 ] [ 0 ])为1024,A[ 6 ] [ 7 ]的地址为( B )。
A. 1244
B. 1208
C. 1240
D. 1136
// L为存储单元数, 注意这是三角矩阵

下三角(i >= j):k = n * (n + 1) / 2
上三角(i < j):k = i * (2n - i + 1) / 2 + j - i

A[i][j] = A[0][0] + k * L

本题解法:k = 6 * (2 * 10 - 6 + 1) / 2 + 7 - 6 = 46
    	A[6][7] = A[0][0] + 46 * 4 = 1208

70、数组 A[6] [8],以行为主序存储,设第一个元素A[0] [0]的首地址是1000,每个元素的长度为4个字节,元素 A[2] [5]的存储地址( A )。
A. 1084
B. 1132
C. 1080
D. 1128
A[2][5] = 1000 + (2 * 8 + 5) * 4 = 1084

71、数组的特点不包括( A )
A. 存储密度大
B. 其中数据元素类型相同
C. 是一种随机存取的结构
D. 数据元素的数量固定
PS: 关于这个题,我查阅了一些资料,但是各有各的答案与理由,依据本人的教材,书上没有A选项。所以各位请依据你们的教材来,我的教材也许是错的!!!

72、10阶对称矩阵A,每个元素占4个字节, LOC(A[0] [0])为100,A[6] [8]的地址为( C )。
A. 360
B. 356
C. 268
D. 226
// L为存储单元数,注意这里是对称矩阵
i >= j: k = [i * (i+1) / 2] + j
i < j: k = [j * (j+1) / 2] + i

A[i][j] = A[0][0] + k * L

本题解法:k = [8 * (8 + 1) / 2] + 6 = 42
	A[6][8] = 100 + 42 * 4 = 268

73、 设矩阵A是一个对称矩阵,为了节省存储,将其下三角部分按行序存放在一维数组B[n(n+1)/2]中,对下三角 部分中任一元素ai,j ( j ≤ i ), 在一维数组B中下标k的值是 ( A )
A. i(i+1)/2+j
B. j(j+1)/2+i-1
C. i(i+1)/2+j-1
D. j(j+1)/2+i

74、树最适合用来表示的结构是( D )。
A. 元素间的有序结构
B. 元素间的无序结构
C. 元素间无联系的结构
D. 元素间具有分支及层次关系的结构

75、在一棵二叉树上第6层的结点数最多为( C )。
A. 6
B. 63
C. 32
D. 64
第 i 层的结点数最多:2^(i - 1) ( i >= 1 )
    
本题解法: 2^(6 - 1) = 32

76、一棵具有N个结点的二叉树采用二叉链表进行存储,其中空指针域有( C )个。
A. N
B. 不确定
C. N+1
D. N-1
一棵二叉树有 N 个结点,每个结点有左右两个指针域,所以总共有 2N 个指针域。
除了根结点外,对于每一个结点都有指向父结点的指针,即有 N-1 个非空指针
所以有2N - (N-1) = N + 1个空指针

77、在一棵二叉树中,双分支结点数为6,单分支结点数为5个,则叶子结点数为( C )个
A. 6
B. 5
C. 7
D. 4
设结点数为0、结点数为2的个数分别为N0,N2
N0 = N2 + 1
    
本题解法:N0 = 6 + 1 = 7

78、下列关于二叉树的存储结构说法正确的是( B )
A. 顺序存储结构和链式存储结构都不能使用
B. 顺序存储结构和链式存储结构都能存储
C. 不能用顺序存储结构存储
D. 不能用链式存储结构存储

79、3个结点的二叉树有( C )种形态。
A. 6
B. 3
C. 5
D. 4
5种形态分别为:没结点、一个根节点、根结点+左孩子结点、根结点+右孩子结点、根结点+左右孩子结点

80、一棵深度为5的二叉树,请问其最多有( B )个结点
A. 5
B. 31
C. 16
D. 8
深度为 k 的二叉树最多有 2^k-1 个结点

80、下列关于完全二叉树的描述错误的是( A )
A. 完全二叉树一定是满二叉树
B. 除了最后一层外,每一层上的结点数均达到最大值
C. 满二叉树是完全二叉树
D. 具有n个结点的完全二叉树的深度为└ log2n ┘(向下取整) + 1
完全二叉树: 如果除了最后一层外,其他层的节点个数都达到最大值,并且最后一层的节点都集中在左侧连续位置上
满二叉树: 如果所有非叶子节点都有两个子节点,并且所有叶子节点都在同一层上

81、广义表L = (a, b, (c, (d, e)), (f, g)),L的表尾是( D )。
A. b, (c, (d, e)), (f, g)
B. (f, g)
C. g
D. (b, (c, (d, e)), (f, g))
表尾:除了表头之外的表元素组合

82、广义表L=((a,b,c)),L的长度和深度分别为( A )。
A. 1和2
B. 2和3
C. 1和1
D. 1和3
长度:广义表所含元素个数
深度:广义表中括号的层数

83、字符串是特殊的线性表,特殊性在于( B )。
A. 存储方式只能使用顺序存储
B. 数据元素都是字符
C. 插入和删除只能在指定位置进行
D. 表长度受限制

84、一个二维数组A[12] [10],A[0] [0]的地址为480,采取列为主序的存储方式,每个数据元素占用的空间为3,A[5] [2]的地址为( B )。

​ A. 660

​ B. 567

​ C. 581

​ D. 625

公式请看前面例题。
本题解法:480 + (2 * 12 + 5) * 3 = 567

85、10阶对称矩阵A,每个元素占4个字节, LOC(A[0] [0])为100,A[6] [8]的地址为( C )。
A. 360
B. 356
C. 268
D. 226
公式请看前面例题:
本题解法:注意 i < j。100 + [8 * (8 + 1) / 2 + 6] * 4 = 268 

86、下列关于字符串的说法,不正确的是( D )
A. 字符串是由字符组成的有限序列
B. 字符串既可以用顺序存储,也可以用链式存储
C. 求子串在主串中位置的操作称为模式匹配
D. 空串是由一个或多个空格组成的字符串

87、简单模式匹配的时间复杂度为( A )。
A. O(n*m)
B. O(n)
C. O(n+m)
D. O(n^2)

88、如果需要知道数组中某个数据元素的地址,不需要知道( D )。
A. 数组的首地址
B. 数据元素的下标
C. 数据元素所占用的存储空间大小
D. 数组的数据元素个数

89、字符串S=”abc123def“,子串Sub = ”123“,子串在S中的位置是( D )(从1开始计数)
A. 2
B. 不确定
C. 3
D. 4

90、设字符串S=“data structure” 的长度是( B )。
A. 15
B. 14
C. 12
D. 13

91、一个二维数组A[12] [10],A[0] [0]的地址为450,采取以行为主序的方式存储,每个数据元素占用的空间为5个字节,A[4] [6]的地址为( B )。
A. 670
B. 680
C. 660
D. 690
A[4][6] = 450 + (4 * 10 + 6) * 5 = 680

92、下图所示的二叉树中序遍历的结果( C )。

二叉树图片2.jpg

A. GDBAECF
B. DBGACEF
C. DGBAECF
D. DGBACEF

93、下图所示的二叉树前序遍历的结果( B )。

二叉树图片2.jpg

A. ABGDCEF
B. ABDGCEF
C. ABDGECF
D. DGBAECF

94、下图所示的二叉树后序遍历的结果( D )。

二叉树图片2.jpg

A. DGBEFCA
B. DGBECFA
C. GDBECFA
D. GDBEFCA

95、判断线索二叉树中某结点P有左孩子的条件是( A )。
A. p->LTag == 0
B. p->LTag == 1
C. p != NULL
D. p->lchild != NULL
ltag = 0, lChild域指向结点左孩子
ltag = 1, lChild域指向结点的前驱

rtag = 0, rChild域指向结点右孩子
rtag = 1, rChild域指向结点的后继

96、具有15个结点的二叉树,它的高度至少为( B )
A. 5
B. 4
C. 15
D. 14
2为底15的对数,向下取整再加1

第一层1个,第二层2个,第三层4个,第四层8

97、一个有向图中所有顶点的度数之和等于图的边数的( A )倍。
A. 2
B. 1
C. 4
D. 1/2

98、一个具有n个顶点的无向图最多有( D )边。
A. n(n-1)
B. 2n
C. n
D. n(n-1)/2

99、如果一个有向图中只有4个顶点,其入度分别是1,2,2,1,那么这个有向图的边的数量为( D )。
A. 4
B. 5
C. 3
D. 6
某个顶点的入度就是另外顶点的出度。入度和=出度和=边数

100、一个具有n个顶点的无向图中,要连通全部顶点至少要( C )条边。
A. n
B. n/2
C. n-1
D. n+1

101、如果含有n个顶点的图形成一个环,则它有( B )棵生成树。
A. n+1
B. n
C. n-1
D. 不确定
生成树:连接 n 个顶点的 n-1 条边 且 无回路的子图

102、下列关于无向连通图特性的叙述中,正确的是( D )
I. 边数大于等于顶点个数减1
II. 所有顶点的度之和为偶数
III. 至少有一个顶点的度为1
A. 只有I
B. I和III
C. 只有II
D. I和II
I、n个顶点,至少n-1条边才能保证这个图是连起来的
II、每一条边都要给两端点(两顶点)贡献一个度,所以度 = 2 *边,必为偶数
III、比如环,各顶点度为 2 

103、一个有n个顶点和m条边的无向图,其中m>=n,那么该无向图一定是( A )。
A. 有环的
B. 连通的
C. 无环的
D. 不连通的

104、深度优先遍历类似于二叉树的( D )。
A. 后序遍历
B. 层次遍历
C. 中序遍历
D. 先序遍历
在深度优先遍历中,从起始顶点开始,依次访问与之相邻的未访问过的顶点。

105、广度优先遍历类似于二叉树的( D )。
A. 后序遍历
B. 先序遍历
C. 中序遍历
D. 层次遍历
在广度优先遍历中,从起始顶点开始,首先访问其所有未访问过的相邻顶点,然后再依次访问这些相邻顶点的相邻顶点。

106、如果一个无向图有n个顶点,那么关于它的生成树是( C )
A. 是这个图的连通分量之一
B. 可能存在环
C. 可能不唯一
D. 可能有n条边甚至更多

107、图中存在一条路径(a,b,c,d,a,f,e)那么这条路径的长度为( B )
A. 7
B. 6
C. 8
D. 5
路径长度:一条路径上经过的边的数目

108、无向图如下所示,以下( A )是这个无向图从顶点a开始广度优先搜索遍历的序列

img

A. a,d,b,f,e,g,c
B. a,d,e,b,c,g,f
C. a,f,d,b,e,g,c
D. a,d,f,b,c,e,g
附加题:深度优先遍历为( C )
A. a,b,c,g,f,d,e
B. a,b,e,d,f,g,c
C. a,d,g,f,e,b,c
D. a,d,g,c,b,e,f

109、用邻接表表示一个有n个顶点有向图,如果这个邻接表中有e个边的结点,那么这个图的逆邻接表中有( D ) 个边的结点
A. 2e
B. n
C. n+e
D. e

110、有向图G,其中有n个顶点和e条边,那么这个有向图中所有顶点的入度之和为( A )
A. e
B. n+1
C. n
D. 2e

111、用邻接矩阵表示一个有n个顶点的无向图,如果这个图中有14条边,那么邻接矩阵中非0元素的数量为(A)
A. 28
B. n
C. n+14
D. 14

112、含有n个顶点的连通图,其生成树的边的条数为( A )。
A. n-1
B. 2n
C. n
D. n+1
也就是极小连通图

113、从顶点1开始深度优先搜索遍历,遍历顺序不包括( D )。

img

A. 1、4、5、3、2
B. 1、2、3、4、5
C. 1、3、4、5、2
D. 1、3、4、2、5
附加题:广度优先搜索遍历,遍历顺序不包括(   D   )
A. 13245
B. 12345
C. 14325
D. 13542

114、一个有向图中,某个顶点Vi 的出度为4,入度为3,那么这个图的邻接表中,第i个链表的长度为( B )。
A. 3
B. 4
C. 1
D. 7
邻接表中该顶点对应的链表长度,其实就是算的该顶点的出度
逆邻接表中该顶点对应的链表长度,其实就是算的该顶点的入度

115、一个有向图中,所有顶点的度之和,是弧的数量的( A )倍。
A. 2
B. 1
C. 1/2
D. 4

116、一个具有n个顶点的无向图最多有( A )边。
A. n(n-1)/2
B. 2n
C. n(n-1)
D. n
每个顶点与其他 n-1 个顶点相连,且为无向,需去掉重复的一半。

附加题:如果是有向图呢?( C )倍

117、下列说法不正确的是( C )。
A. 遍历的基本算法有两种:深度优先遍历和广度优先遍历
B. 图的深度优先遍历也适用于有向图
C. 图的遍历是从给定的起点出发访问每一个顶点最多一次
D. 图的深度遍历是一个递归过程
C选项:是必须一次,不多不少

118、n个元素的关键字序列按升序排序,进行二分查找,如果比较次数最多为5,那么n不能超过( D )
A. 32
B. 16
C. 15
D. 31

公式:最多比较次数为 = l o g 2 ( n ) + 1 , 向下取整 公式: 最多比较次数为 = log_2 (n)+1,向下取整 公式:最多比较次数为=log2(n)+1,向下取整


119、关于二分查找的判定树,下列说法正确的是( B )。
A. 左右子树的结点树一定相等
B. 要么左右子树的结点数相等,要么右子树的结点数比左子树的结点数多1
C. 要么左右子树的结点数相等,要么右子树的结点数比左子树的结点数少1
D. 左右子树的高度一定相等

120、设有100个元素,用折半查找法进行查找时,最大比较次数( D )
A. 6
B. 5
C. 8
D. 7

121、n个元素构成的查找表中进行顺序查找,平均查找长度为50,那么n为( D )
A. 50
B. 100
C. 101
D. 99

公式:顺序查找平均查找长度 = ( 1 + 2 + 3 + … … + n ) / n = 1 + n 2 公式:顺序查找平均查找长度 = (1+2+3+……+n)/n = \frac{1+n}{2} 公式:顺序查找平均查找长度=(1+2+3+……+n)/n=21+n


122、分块查找中,将n个元素分为b个区块,每个区块元素数量为s。要使查找效率最高,那么( C )
A. b远小于s
B. b远大于s
C. b和s大致相等
D. 都可以

123、排序算法中最重要的操作是( D )
A. 移动数据元素
B. 比较
C. 查找元素位置
D. 元素的比较和移动

124、有一查找表以顺序结构存储,其中的元素的关键字按升序排列,那么最适合这个查找表的查找方式为( )
A. 都可以
B. 分块查找
C. 顺序查找
D. 二分查找
关键字:已经按升序排列好

125、关于二叉排序树,下列说法错误的是( )。
A. 二叉排序树的右子树高度可以为0
B. 先序遍历二叉排序树,得到一个有序序列
C. 左子树的所有关键字都小于右子树的关键字
D. 插入一个结点时,新结点一定是叶子结点
左子树 < 根结点 < 右子树

126、设有一个长度为15的有序顺序表,在其上进行二分查找数据元素x,那么查找次数最多为( A )。
A. 4
B. 3
C. 6
D. 5
公式:118

127、当在一个有序的顺序表上查找一个数据时,既可用折半查找,也可用顺序查找,但前者比后者的查找速度 ( A )
A. 在大部分情况下要快
B. 必定快
C. 取决于表递增还是递减
D. 必定慢

128、设一个有序序列{8, 12, 19, 22, 28, 33, 37, 54, 89},构造的二叉判定树的高度为( D )。

A. 6

B. 5

C. 3

D. 4

第一层:1
第二层:2
第三层:4
第四层:8

129、关于分块查找,下列说法错误的是( B )。
A. 不同块之间是有序的
B. 块内元素是有序的
C. 查找属于哪个块,可以采用二分查找
D. 确定了元素在哪个块区间范围之后,可以采用顺序查找
分块查找:综合二分查找与顺序查找
块内不要求,块间有序

130、设有100个元素,用折半查找法进行查找时,查找成功时最大、最小比较次数分别时( A )。
A. 7,1
B. 5,1
C. 8,1
D. 6,1

131、顺序查找对查找表的要求是( C )。
A. 顺序存储的
B. 链式存储的
C. 顺序存储和链式存储都可以
D. 按关键字排序的

132、哈希查找的好处是( D )。
A. 插入和删除数据元素方便
B. 有效利用存储空间
C. 不受数据元素数量限制
D. 通过关键字可以直接计算数据元素的存储地址

133、一个长度为n的查找表,若查找每个元素的概率相等,则用顺序查找法查找表中任一数据元素,查找成功的 平均查找长度为( B )。
A. n
B. (n+1)/2
C. n/2
D. n/2 + 1
公式:题121

134、衡量查找算法效率的主要标准是( D )。
A. 所需的存储量
B. 算法难易程度
C. 元素个数
D. 平均查找长度

135、一组记录的关键码为(46,79,56,38,40,84),则利用快速排序的方法,以第一个记录为基准得到的 一次划分结果为( C )。
A. (40,38,46,84,56,79)
B. (38,40,46,56,79,84)
C. (40,38,46,56,79,84)
D. (40,38,46,79,56,84)

136、对序列{15,9,7,8,20,16}进行排序,进行一趟直接插入排序的结果是( D )。
A. 9,7,8,15,16,20
B. 8,9,7,15,20,16
C. 7,9,15,8,20,16
D. 9,15,7,8,20,16

137、对序列{15,9,7,8,20,16}进行排序,进行一趟冒泡排序的结果是( B )。
A. 7,9,15,8,20,16
B. 9,7,8,15,16,20
C. 9,15,7,8,20,16
D. 8,9,7,15,20,16

138、对序列{15,9,7,8,20,16}进行排序,进行一趟简单选择排序的结果是( B )。
A. {9,7,8,15,16,20}
B. {7,9,15,8,20,16}
C. {8,9,7,15,20,16}
D. {9,15,7,8,20,16}

139、快速排序的最好情况的时间复杂度和最坏情况的时间复杂度分别是( A )。
A. O(nlog2n )、O(n2)
B. O(n )、O(nlog2n )
C. O(nlog2n)、O(nlog2n)
D. O(n )、O(n2)

140、下列排序方式中,是稳定排序的是( B )。
1、直接插入排序 2、希尔排序 3、冒泡排序
4、快速排序 5、简单选择排序 6、堆排序
A. 2、4、6
B. 1、3
C. 1、2、4
D. 3、5、6
内部排序是稳定的方法连记:直接归并基数冒泡(直接插入排序 ,归并排序,基数排序,冒泡排序)

141、7个元素的待排序序列,对其进行简单选择排序,比较次数为( D )。
A. 6
B. 7
C. 36
D. 21
1个元素与剩下6个比较
第2个元素与剩下5个比较
……………………

142、如果对一个序列进行升序排序,使用直接插入排序方法,在这个序列( B )情况下, 比较和移动次数最少。
A. 元素按关键字从大到小排列
B. 元素按关键字从小到大排列
C. 基本有序
D. 完全无序

143、一个长度为n的序列,对其进行冒泡排序,比较次数和交换次数最多分别为( D )。
A. n2 n(n-1)/2
B. n2 nlog2n
C. n(n-1)/2 nlog2n
D. n(n-1)/2 n(n-1)/2

附:常见算法对应的应用实例

常用算法 { 分治算法 { 求 X 的 n 次方幂 归并排序 贪心算法 { 哈夫曼编码 最小生成树 回朔算法 { 八皇后问题 素数环 动态规划法 { 0 − 1 背包 最小生成树 常用算法\begin{cases} 分治算法\begin{cases} 求X的n次方幂\\ \\归并排序 \end{cases} \\ \\ 贪心算法\begin{cases} 哈夫曼编码\\ \\最小生成树 \end{cases} \\ \\ 回朔算法\begin{cases} 八皇后问题\\ \\素数环 \end{cases} \\ \\ 动态规划法\begin{cases} 0-1背包\\ \\最小生成树 \end{cases} \\ \\ \end{cases} 常用算法 分治算法 Xn次方幂归并排序贪心算法 哈夫曼编码最小生成树回朔算法 八皇后问题素数环动态规划法 01背包最小生成树

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值