题目来源:https://www.nowcoder.com/
题目一:
选择D
分析:
其中,a1 是唯一的 “ 第一个 ” 数据元素,又称为表头元素;an 是唯一的 “ 最后一个 ” 数据元素,
又称为表尾元素。除了第一个元素外,每个元素有且仅有一个直接前驱。除最后一个元素外 ,每个
元素 有且仅有一个直接后继。
题目二:
选D
分析:
线性表主要由顺序表示或链式表示,顺序表示指的是用一组地址连续的存储单元依次存储线性表的数据元素,链式表示指的是用一组任意的存储单元存储线性表中的数据元素,称为线性表的链式存储结构。它的存储单元可以是连续的,也可以是不连续的。
题目三:
选A
分析:(4*10+7)*3=141
题目四:
选C
分析:实际存储为{'H','e','l','l','o','\0'},
题目五:
选D
分析:
二维数组为4*3,可表示为
1 0 0
3 2 0
6 7 8
9 0 0
因为数组的起始位置为a[0][0],所以a[2][1]为第三行第二列,即7
题目六:
选C
分析:因为是5列10行的数组,而且分配内存地址是连续的,如果按行存储的,则每增加1行地址就会增加5,然后加上所在的列就是当前的地址,所以就是1000+5i+j
题目七:
选B
分析:三元组转置:行列互换,然后再按行排序
题目八:
选B
分析:
A.char str[2][3]表示声明了一个字符串的数组,最多可以存放两个字符串,每一个字符串的长度为3。题中{"a","b","c"}为三个字符串。
CD.在声明数组时,数组个数可以缺省,数组长度不能缺省。该项中数组长度缺省。
题目九:
选D
题目十:
选B
分析:三维数组,5*3*3=45
题目十一:
选D
分析:
int fun (int a[], int n)
{
int i, j;
j=0;
for (i=0; i<n; i++)
/**********found**********/
if (a[i]%2== 1 ) // 这里是要判断为奇数时,将其值存储到新的位置
{
/**********found**********/
a[j]=a[i];
j++; // j为新索引,每次赋值后需要加1
}
/**********found**********/
return j; // 因为在上一步中已经加过1了,所以这里直接返回j即可
}
结果如下:
The original data:
9 1 4 2 3 6 5 8 7
The number of odd: 5
The odd number:
9 1 3 5 7
题目十二:
选A
分析:由题目可知,数组A[n][n]从A[0][0],开始。
所以A[ i ][ j ]中,当 i>=j 时,
A[ i ][ j ]位于下三角矩阵中。
第0行,1个元素(此A[0][0]元素不计入,所以要去掉)== > (1-1)
第(i-1)行,i个元素
第 i 行,(j+1)个元素(从 0~j 一共有(j+1)个元素,由于A[i][j]不计入在内,所以要去掉一个)==> ((j+1)-1)
结果为:(1-1)+2+3+...+i+((j+1)-1) = i*(i+1)/2+j -1
当 i < j时
A[ i ][ j ]位于上三角矩阵中。故计算到A[ i ][ i ]即可,且包括A[ i ][ i ].
第0行,1个元素(此A[0][0]元素不计入,所以要去掉)== > (1-1)
第(i-1)行,i个元素
第 i 行,(i+1)个元素(从 0~i 一共有(i+1)个元素)
结果为:(1-1)+2+3+...+i+(i+1) = i*(i+1)/2+i
题目十三:
选B
分析:如果数组很大的话应该是行优先快,因为数组在内存中是按行优先存储的,在虚存环境下,如果整个数组没有在内存中的话可以比列优先减少内存换进换出的次数。就算整个数组都在内存中,列优先访问a[i][j]还得计算一次乘法,行优先只需加一就可以了,这个可以忽略
题目十四:
选C
分析:Loc(A ij )=10(基地址)+[(5-1)*100+(5-1)]*2=818。
题目十五:
选C
题目十六:
选A
分析:
首先链表的下一个结点应该用next指针访问,排除B
当前结点是r[j],可以排除C
r[j]是当前节点而不是指向当前节点的指针,因此用r[j].next
题目十七:
CD
分析:A,链式存储情况下不一致 B,优劣要看使用情况
题目十八:
选AB
分析:数组名当被直接使用时,是一个指向数组首地址的指针。如果数组是***数组,那么数组名是指向第一行数组的首地址,而不是第一行第一列单个元素的地址,所以*(a+i)与a[i]是一个意思,当直接用a[i]时代表的是该一维数组的首地址,所以*(a[i]+j)是与a[i][j]等效,所以AB选项正确
题目十九:
选C
分析:pa是执行1000次1000万连续地址的相加,pb是执行1000万次1000连续地址的相加,虽然相加次数是一样的,但是pa数组较长,跨的页较多,所以会产生较多次的缺页,导致执行速度较pb慢
题目二十:
选BCD
分析:
a、数组是能被Object 一切能被Obj 接收的均为对象;
b、数组不是原生类 原生类有8种, int double boolean float byte short long char ;
c、语法错误、
d、数组的大小一开始就已经确定了
注:部分为参考牛客网的见解
谢谢观看!!!