1、在最好情况下,下列排序算法中 排序算法时间复杂度最低的是。
题解: https://blog.csdn.net/qq_29720657/article/details/78399558
2、串中任意个字符组成的子序列称为该串的子串。
题解:该题目是错误的,并且错在任意,对于给定的一个字符串来说,而它的子串是需要连续的,而并不是任意的。
3、设以下c语句中,对数组array定义后,数组元素array[1][2]的值为:()
1 |
|
题解:答案为0;该题目是定义了一个整型为两行三列的二维数组,但是它的元素 且只有5个,在整型的数组中,对于一个数组中的元素如果赋的值比该实际所赋的值的个数少,其余的用默认为零;因此该题应为0.
4、 设A是n*n的对称矩阵,将A的对角线及对角线上方的元素以列为主的次序存放在一维数组B[1..n(n+1)/2]中,对上述任一元素aij (1≤i,j≤n,且i≤j)在B中的位置为()
题解:j(j-1)/2+i
由于题目要求是以列为主的次序,故答案为:j(j-1)/2+i
5、链表与数组的优缺点
题解:1、数组静态分配内存,链表动态分配内存;2、 数组在内存中连续,链表可连可不连续; 3、数组元素在栈区,链表元素在堆区; 4、数组利用下标定位,时间复杂度为O(1),链表定位元素时间复杂度O(n); 5、数组插入或删除元素的时间复杂度O(n),链表的时间复杂度O(1)
6、在一个长为33厘米的光滑凹轨上,在第3厘米、第6厘米、第19厘米、第22 厘米、第26厘米处各有一个钢珠,凹轨很细,不能同时通过两个钢珠,开始时,钢珠运动方向是任意的。两个钢珠相撞后,以相同速度反向运动。假设所有钢珠初 始速度为每秒运动1厘米,那么所有钢珠离开凹轨的最长可能时间是()
题解:30,https://blog.csdn.net/luoweifu/article/details/12071865
7、排序的稳定性
题解: 稳定排序:冒泡排序、插入排序、归并排序、基数排序
不稳定排序:选择排序、快速排序、希尔排序、堆排序。
8、二分搜索法
题解: 1、只能在已排序的数据上进行;2、可用于排好序的数组
9、
请找出下面代码中的所有错误。说明:以下代码是把一个字符串倒序,如“abcd”倒序后变为“dcba”。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
题解:
int
main()
{
char
*src =
"hello,world"
;
int
len = strlen(src);
char
*dest = (
char
*)malloc(len +
1
);
//要为\0分配一个空间
char
*d = dest;
char
*s = &src[len -
1
];
//指向最后一个字符
while
( len-- !=
0
)
*d++ = *s--;
*d =
0
;
//尾部要加\0
printf(
"%s\n"
, dest);
free(dest);
// 使用完,应当释放空间,以免造成内存汇泄露
return
0
;
}
10、空串与由空格组成的串没有区别
题解:答案有区别。
空格串和空串的区别是: 空格串是程序设计中的术语,指的是由空格组成的非空串,其长度为串中空格字符的个数。 空串(null string)是指长度为零的串。 注意:空格串并非空串,空格串中的空格占据相应的存储空间。
11、使用二分查找算法在一个有序序列中查找一个元素的时间复杂度为( )
题解;答案:logn
因为二分查找算法是折半,相当于一个二叉树,因此该查找一个元素的时间复杂度为对数级。
12、
下面函数的功能是
int fun(char *x)
{
char *y = x;
while (*y++);
return (y - x - 1);
}
题解:
分析fun函数, char *y = x;//定义y指针指向x指针指向的字符串,此时x与y指针地址相同
while (*y++);//当*y!='\0'时,指针指向字符串的下一位,直到*y=='\0',由于此时还会执行++操作符,所以此时y指针指向字符串末尾结束符的下一位,即此时指针y已经移动了字符串长度+1位,
所以y-x-1即为字符串的长度
13、设 int x[]={1,2,3,4,5,6},*p=x; 则值为 3 的表达式是(B)
题解:A、p+=2,*++p;//*p=x这里指针p指向数组x的首元素地址,p+=2就相当于p指向数组中的第三个元素;又因为*++p,是先加p再取*++p所指向存放该值得地址——*++p=4;因此不符合条件
B、p+=2,*p++;//同理:*p++是先取值再加加,因此*p++=3,而p已经指向数组下标为三的元素了
C、p+=3,*p;//同理:*p=4
D、p+=2,++*p ;//同理:++*p=4
14、串是一种特殊的线性表,其特殊性体现在()
题解:串又称为字符串,是一种特殊的线性表,其特殊性体现在数据元素是一个字符,也就是说串是一种内容受限的线性表。
15、若有定义"char a [10], *p=a; ”,那么下列赋值语句正确的是(D )
题解:A、a [] ="abcdefg";//*p=a这里指针p指向数组a的首元素地址
B、a=”abedefg";
C、*p=”abcdefg";
D、 p=”abcdefg ";
将字符串赋值给字符数组:
1.定义时直接用字符串赋值。 char a[10]="hello";但是不能先定义再赋值,即以下非法:char a[10];a[10]="hello"; A、错
2.利用strcpy。 char a[10]; strcpy(a,"hello");
3.利用指针。 char *p; p="hello";这里字符串返回首字母地址赋值给指针p。另外以下非法:char a[10]; a="hello"; a已经指向在堆栈中分配的10个字符空间,不能再指向数据区中的"hello"常量。可以理解为a是一个地址常量,不可变,p是一个地址变量。 B、C、错
4.数组中的字符逐个赋值。
16、 对以下二维数组的正确声明
解题:数组存储数据是行优先存储,如果只定义行不定义列数组存储就没有界限。给出总元素个数,行数等于总元素对列数取整。编辑器会根据列数去计算行数,但不会根据行数去计算列数
因此
int[][] a=new int[][3]; 错
int[][] b=new int[3][]; 对
17、
选项代码中能正确操作数组元素的是()
1 2 3 4 5 6 7 8 9 |
|
题解:A、*(*(a+i)+j)=1
B、*(a[i]+j)=1
C、**(a+i)[j]=1
D、*((a+i)+j)=1//a+i中a代表的是地址,i是一个常量,i的步长是1,因为数据类型的不同,因此,所分配的数组中的每一个元素之间的地址差是不一样的。故D错
因此数组名当被直接使用时,是一个指向数组首地址的指针。如果数组是***数组,那么数组名是指向第一行数组的首地址,而不是第一行第一列单个元素的地址,所以*(a+i)与a[i]是一个意思,当直接用a[i]时代表的是该一维数组的首地址,所以*(a[i]+j)是与a[i][j]等效,所以AB选项正确
18、使用二分搜索算法在 1000 个有序元素表中搜索一个特定元素,在最坏情况下,搜索总共需要比较的次数为(10 )
题解:
二分搜索的时间复杂度是:
O(log2 n)如果是整数,则就是这个数,如果不是整数,那么就取下线然后再加1
19、下列哪个查找方法的平均查找长度与查找表中数据元素个数无关?
题解:同1
20、 线性表的长度是线性表所占用的存储空间的大小。
题解:
线性表长度的定义是它所包含的元素的个数。
元素的类型决定了元素所占用存储空间的大小,但元素的个数不等价于元素的类型。
故F