刷题十五天

xiaoxiao2025-10-10  23

1:有以下5个叶子节点1,1,3,2,5构成的哈夫曼树的带权路径长度为(D) A:24 B:26 C:23 D:25 解析: 2:某表达式的前缀形式为"±*^ABCD/E/F+GH",它的中缀形式为© A:A^B*C-D+E/F/G+H B:A^B*(C-D)+(E/F)/G+H C:A^B*C-D+E/(F/(G+H)) D:A^B*(C-D)+E/(F/(G+H)) 解析: 先找^AB转换为A^B 再找*和C转换成A^B*C 再找-和D转换成A^B*C-D 再找+GH转换成G+H …… 3:能在O(1)时间内访问线性表的第i个元素的结构是(A) A:顺序表 B:单链表 C:单项循环表 D:双向链表 解析:顺序表能随机存取任意元素。 4:有n-1条边的图肯定都是生成树(B) A:对 B:错 解析:前提是不构成回路。 5:若已知一棵二叉树的前序遍历序列和后序遍历序列,则可以恢复该二叉树,这样的说法正确吗(B) A:正确 B:不正确 解析:已知中序和前序或者中序和后序可以推出另外一种,前序和后序无法确定 6:N个结点的二叉排序树有多种,其中树高最小的二叉排序树是最佳的(A) A:对 B:错 解析:二叉排序树的主要用途是链式存储结构的二分查找,查找的最坏次数是树的高度,因此高度最小的二叉排序树是最佳的 7:以下 C 语言指令: int a[5] = {1,3,5,7,9}; int *p = (int *)(&a+1); printf(“%d,%d”,*(a+1) , *(p-1)); 运行结果是什么(C) A:2,1 B:3,1 C:3,9 D:运行时崩溃 解析:&a表示一个指向大小为5数组的指针,那么(&a+1)就是表示一个指向大小为5的下一个数组的指针, 也就是数组a最后一个元素的下一个位置,-1则指向a中最后一个元素;a是保存数组的首地址,*(a+1)保存的是数组第二个地址的值,故为3.p是保存数组a最后一个位置的下一个位置的地址,*p是指向数组a最后一个位置的下一个位置,值为-1,*(p-1)是指向数组a最后一个位置,值为9. 8:若有说明:a[3][4];,则数组 a 中和元素(C) A:可在程序的运行阶段得到初值 0 B:可在程序的编译阶段得到初值 0 C:数组 a 的初值无法确定 D:可在程序的编译或运行阶段得到初值 0 解析:int a[3][4]定义了数组但未赋初值,系统为所定义的数组在内存中开辟了已连续的存储单元,但这些存储单元中没有确定的值 9:以下哪些算法是可以用来求最小生成树(AD) A:kruskal算法 B:dijkstra算法 C:floyd算法 D:prim算法 解析: Kruskal算法(适合稀疏图,贪心算法的运用,时间复杂度O(eloge),e为边数) Prim算法适合稠密图,贪心算法的应用,时间复杂度为O(n+e),临接表存储 B和C是求最短路径的算法 10:选项代码中能正确操作数组元素的是(AB)

int main(){ int a[N][N]={{0,0},{0,0}}; for(int i=0;i<N;i++){ for(int j=0;j<N;j++){ //访问二维数组a的值 //选项代码 } } }

A:*(*(a+i)+j)=1 B:*(a[i]+j)=1 C:**(a+i)[j]=1 D:*((a+i)+j)=1 解析:数组名当被直接使用时,是一个指向数组首地址的指针。如果数组是多维数组,那么数组名是指向第一行数组的首地址,而不是第一行第一列单个元素的地址,所以*(a+i)与a[i]是一个意思,当直接用a[i]时代表的是该一维数组的首地址,所以*(a[i]+j)是与a[i][j]等效,所以AB选项正确

转载请注明原文地址: https://www.6miu.com/read-5037664.html

最新回复(0)