1、抽象数据类型可以用____、数据关系和基本操作来定义。
- A:数据元素
- B:数据对象
- C:原子类型
- D:存储结构
解析
抽象数据类型是指一个数学模型以及定义在该模型上的一组操作。它通常是指对数据的某种抽象,定义了数据的取值范围及其结构形式,以及对数据的操作的集合。
抽象数据类型一般可以由数据对象、数据关系及基本操作来定义。故选B。
答案:B
2、数据结构的说法中正确的是____。
- A:数据结构的逻辑结构独立于其存储结构
- B:数据结构的存储结构独立于该数据结构的逻辑结构
- C:数据结构的逻辑结构唯一地决定了该数据结构的存储结构
- D:数据结构仅由其逻辑结构和存储结构决定
解析
数据结构的存储结构是和相应的数据在内存中的物理地址之间的关系有关。而逻辑结构只是描述数据之间的关系(三大逻辑结构的一种)。
举例说明:
线性表(元素之间的逻辑关系是线性的)可以是顺序存储的方式,即所有元素相邻存放,在物理地址上是连续的(存储结构);
而对于链式存储的线性表,他的所有元素之间不一定是线性相连的,可能是第一个结点(元素)的地址为0x123,而第二个元素又出现在物理地址0x100上。
也就是说逻辑结构是线性的但是存储结构不一定就是线性的。
答案:A
3、以下与数据的存储结构无关的术语是____。
- A:循环队列
- B:线索树
- C:栈
- D:数组
解析
A、B选项均涉及存储结构。
C选项是单纯的逻辑结构。
D选项,顺序表定义了data数组和length长度,其中length长度显然不能表示存储结构,所以顺序表的存储结构必然通过data数组体现。
答案:C
4、某顺序存储的表格中有90000个元素,已按关键字升序排列,假定对每个元素进行查找的概率是相同的,且每个元素的关键字的值皆不相同。用顺序查找法查找时,平均比较次数约为____。
- A:25000
- B:30000
- C:45000
- D:90000
解析
顺序查找适用于查找顺序存储或链式存储的线性表,平均比较次数是N/2。
答案:C
5、若串S="database",其非空子串数目为____。
- A:37
- B:36
- C:35
- D:34
解析
长度为1,2,3,4,5,6,7,8的子串个数分别为:
8,7,6,5,4,3,2,1。
所以子串总个数:8+7+...+1=36。
这类题是有规律的:假设字符串长度为n,则
(1)空串为1个
(2)然后就是长度为1,2,3,...,n的子串个数分别为:n,(n-1),(n-2),...,1所以子串总个数为:1+n*(n+1)/2,显然这是个奇数。
但本题中因为长度为1的字符串有重复,所以长度为1的字符串个数为6,题目中要求的是非空子串,所以总数为34,选D。
答案:D
6、下列排序方法中,在最坏情况下,数据的交换效率最好的排序方法是____方法。
- A:插入排序
- B:快速排序
- C:希尔排序
- D:选择排序
解析
最坏情况下,A、B、C三种方法的时间复杂度都为O(),而选择排序法又可以分为直接选择和堆排序,若为堆排序,时间复杂度为O(n)。
答案:D
7、代码如下,其中n为正整数,则最后行的语句执行在最坏情况下的复杂度是____。
for (i = n-1; i>=1; i--)
for(j=1; j<=i; j++)
if (A[j] > A[j+1])
A[j]与A[j+1]交换
- A:O(n)
- B:O(nlog(n))
- C:O()
- D:O()
解析
最坏情况下,if判断语句满足,当外循环和内循环都同时进行时,for语句双重嵌套,最坏时间复杂度为O()。
答案:D
8、若结点的存储地址与其关键字之间存在某种映射关系,则称这种存储结构为____。
- A:顺序存储结构
- B:链式存储结构
- C:索引存储结构
- D:散列存储结构
解析
散列存储,又称hash存储,是一种力图将数据元素的存储位置与关键码之间建立确定对应关系的查找技术。散列法存储的基本思想是:由节点的关键码值决定节点的存储地址。
答案:D
9、算法的时间复杂度是指____。
- A:算法执行的绝对时间
- B:随着问题规模n的增大,算法执行时间的增长趋势
- C:算法中执行语句的条数
- D:获得算法执行时间的复杂程度
解析
算法中基本操作重复执行的次数是问题规模n的某个函数f(n),算法的时间度量记作T(n)=O(f(n))。它表述随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作时间复杂度。
答案:B
10、假设包含t个非零元素的稀疏矩阵A含有m行n列,并采用三元组顺序表压缩存储,其快速转置算法的时间复杂度为____。
- A:O(m+t)
- B:O(n+t)
- C:O(m+n)
- D:O(m*n)
解析
快速转置时:
1)初始化所有列的非零元素的个数统计为O(n);
2)统计每一列的非零元素个数(t);
3)接着求每一列第一个非零元素的首位置(n);
4)最后对每一个非零个数转置(t)。
总共时间:2*(n+t),于是,时间复杂度为:O(n+t)。