1
将数据元素2,4,6,8, 10, 12, 14, 16, 18,20, 22依次存放于一个一维数组中,然后采用折半查找方法查找数组元素16,被比较过的数组元素的轨迹依次为(a)
12,18,14,1612,14, 18,166,9,7,86,7,9,8
中间数12<16,说明在该数在12右侧。如果剩下的子序列有奇数个数字,就取中间那个为middle。如果有偶数个数字,取前一半的最后一个为middle。
2
设有数组A[i,j],数组的每个元素长度为3字节,i的值为1到8,j的值为1到10,数组从内存首地址BA开始顺序存放,当用以行为内存放时,元素A[5,8]的存储首地址为(d)
BA+141BA+180BA+222BA+225
(4*10+7)*3=141
3
具有 n 个整数的数组 A=[29,6,28,20,2,24] 使用插入排序( Insertion Sort )算法排序,算法伪代码如下:
![]()
经过三趟排序后,数组 A 的排列状态将是(c)
6,29,28,20,2,246,28,20,2,24,296,20,28,29,2,242,6,20,24,28,29
4
数组定义为“ int a [ 4 ] ; ”,表达式 (d ) 是错误的。
*aa [ 0 ]aa++
5
char str[]=”Hello”,sizeof(str)=(c)
4567
注意char str[] = {'a','b'};和char *str = {'a','b'}中求sizeof(str)的区别,前者是求数组所占内存空间,后者是元素地址空间
6
给出一个由 n 个数组成的序列 A[1…n] ,要求找出它的最长单调上升子序列,设 m[i] ( 1 ≤ i ≤ n ),表示以 A[i] 结尾的最长单调上升子序列的长度,则 m[1] = 1 , m[i] ( 1 < i ≤ n )为(a )。
m[i] = 1 + max{0,m[k](A[k] < A[i],1≤k < i )}m[i] = 1 + m[k] (k = i - 1 && i > 1)m[i] = 1 + max{-1,m[k] (A[k] ≤ A[i],1≤k < i )}m[i] = max{0,m[k](A[k] < A[i],1≤k < i )}
7
从逻辑结构上看,n维向量的每个元素均属于1个n维向量(a)
对错
类似二维数组与一位数组
8
采用压缩存储之后,下三角矩阵的存储空间可以节约一半,这样的说法正确吗?b
正确不正确
假设是2*2的矩阵,下三角矩阵有3个元素,只是少了一个元素,没有达到减少一半的空间。加上对角线的元素。
9
若有以下程序段:
……
int a[]={4,0,2,3,1},i,j,t;
for(i=1;i<5;i++)
{
t=a[i];
j=i-1;
while(j>=0&&t>a[j])
{
a[j+1]=a[j];
--j;
}
a[j+1]=t;
}
……
则该程序段的功能是: b
对数组a进行插入排序(升序)对数组a进行插入排序(降序)对数组a进行选择排序(升序)对数组a进行选择排序(降序)
在第i次排序中,前i-1个元素始终是有序的,此时只需把第i个元素插入到有序的序列中即可,故代码中体现的是插入排序的思想。代码中对当前a[i]>a[j](0<=k<i-1)是否成立进行判断,若成立则将a[j]往后移(即大的数排在前面,小的数排在后面),故代码中的排序原则为降序排。
结合所述答案为插入排序(降序),故选B。
10
以下操作中,数组比链表速度更快的是____
ace
原地逆序头部插入返回中间节点返回头部节点选择随机节点
A选项,如果是数组只要遍历一半元素就可以了,翻转的思想类似于字符串逆序,但链表如果要完成逆序,就算只是修改指针也要把所有的元素遍历完,所以相比而言数组还是比链表快的。
B链表只需插入一个节点,数组需移动n个元素
C选项的访问中间节点,数组可以通过array[length/2]访问,链表需要依次查找到中间节点。
D头结点都一样
E 数组是顺序存储的线性表,相对于链表而言主要的优点就是可以通过下标随机访问数组中的任意元素。
1
下面哪项是数组优于链表的特点?
正确答案: D
方便删除方便插入长度可变存储空间小
1: 数组内存空间少比链表少
2:数组支持随机访问,链表不具有随机访问的特性
3:插入和删除是链表优于数组,数组需要移动被删除或者插入位置之后的元素
https://blog.csdn.net/u014082714/article/details/44259029
2
一维数组与线性表的区别是( )。
正确答案: A
前者长度固定,后者长度可变后者长度固定,前者长度可变两者长度均固定两者长度均可变
数组的长度是固定不变的,数组是线性表的一种。而线性表有多种形式,其长度可变。
数组的长度在初始值就已经设定好,而线性表的长度是动态可变的。
3
请问对一个排好序的数组进行查找,用平均时间复杂度最小的算法,时间复杂度为()
正确答案: B
O(n)O(lgn)O(nlgn)O(1)
二分查找的基本思想是将n个元素分成大致相等的两部分,去a[n/2]与x做比较,如果x=a[n/2],则找到x,算法中止;如果x<a[n/2],则只要在数组a的左半部分继续搜索x,如果x>a[n/2],则只要在数组a的右半部搜索x.
时间复杂度无非就是while循环的次数!
总共有n个元素,
渐渐跟下去就是n,n/2,n/4,....n/2^k,其中k就是循环的次数
由于你n/2^k取整后>=1
即令n/2^k=1
可得k=log2n,(是以2为底,n的对数)
所以时间复杂度可以表示O()=O(logn)
4
在n个结点的线性表的数组实现中,算法的时间复杂性是O(1)的操作是()
正确答案: A
访问第i个结点(1<=i<=n)和求第i个结点的直接前驱(2<=i<=n)在第i个结点后插入一个新结点(1<=i<=n)删除第i个结点(1<=i<=n)以上都不对
访问是O(1) ,删除和插入都是o(n) ,题目讲是数组实现的线性表,数组是连续空间,基指针加上偏移就能访问,不用查找(查找时间复杂度为o(n) )。
5
在C语言中,若有定义:int a[4][10](其中0<=i<4,0<=j<10);则下列选项中对数组元素a[i][j]引用错误的是()
正确答案: A
*(a+i)+j*(&a[0][0]+10*i+j)*(a[i]+j)*(*(a+i)+j)
a[i]就是:a加i取值—取到的值是地址,记为p。
a[i][j]就是:p加j取值—取到的值是数值,就是最后的结果!
而*(a+i)和a[i]等价;
*(*(a+i)+j)和a[i][j]等价。
6
设某数据结构的二元组形式表示为 A=(D , R) , D={01 , 02 , 03 , 04 , 05 , 06 , 07 , 08 , 09} , R={r} , r={<01 , 02> , <01 ,03> , <01 , 04> , <02 , 05> , <02 , 06> , <03 , 07> , <03 , 08> , <03 , 09>} ,则数据结构A是() 。
正确答案: B
线性结构树型结构物理结构图型结构
二元组的存储,A=(D,R),D表示数据,R表示关系,这是二元组的定义,由题可知,01元素与02,03,04均有关系,所以不可能是线性结构,至于图,一般是用{V,{E}}来表示,V表示顶点,{E}表示边,乍一看是挺符合二元组的表示,但是这里要提一下图和树的区别,树是用来描述一对多的关系,而图是用来描述多对多的关系,根据题中所给关系可以很清楚的看到,是属于1对多,所以应该是树形,而不是图型。
7
稀疏矩阵一般的压缩存储方式有两种,即 。
正确答案: C
二维数组和三维数组三元组和散列三元组和十字链表散列和十字链表
所谓三元组就是一个元素存放三个信息,矩阵中的行号,列号以及值,这样就可以不存放值为0的元素,实现压缩。 十字链表相当于是邻接表和逆邻接表的合集,在一个元素里面存放了值以及出度表和入度表,这样也不需要像邻接矩阵那样存放大量0元素,而且找一个节点的入节点和找出节点一样快。
8
数组A[0..4,-1..-3,5..7]中含有元素的个数()
正确答案: B
55453616
三维数组:
长的边 个数:4-0+1=5
宽的 边 个数 :(-1)-(-3)+1=3
高的边个数 :7-5+1=3
总个数:5*3*3
9
稀疏矩阵压缩存储后,必会失去随机存取功能()
正确答案: A
对错
三元组表示法就是在存储非零元的同时,存储该元素所对应的行下标和列下标。稀疏矩阵中的每一个非零元素由一个三元组(i,j,aij)唯一确定。矩阵中所有非零元素存放在由三元组组成的数组中。
10
若要删除 book 表中的所有数据,如下哪些语法是错误的?
正确答案: A D
drop table book;truncate table book;delete from book;del *from book;
A: drop table book 是删除整个表,题目的潜在意思是删除表中的数据而并非删除整个表。因此A错。
B: truncate table book 是删除表中的数据,删除速度比delete更快,无法撤回(回退)。
C: delete from book 删除数据表中的数据,可以回退,可添加where 子句。
D:语法错误。