赞
踩
经过考前的三天复习,最终斩获93分的不错成绩,在此进行考后总结。希望以后再接再厉。
T | F |
---|
解析:可能会超出表容量,插入失败
平方探测的整体流程
平方探测的整体流程和线性探测基本相似,但是线性探测是没有③
①根据哈希函数算出Hashval,i 初始化为零,判断HashTable[Hashval]是否被占用,如果没被占用,则Hashval就是根据哈希函数算出的值,跳出平方探测;如果被占用则向右探测(执行②);
②判断HashTable[Hashval + i * i]是否被占用,如果没被占用,则Hashval = Hashval + i * i,跳出平方探测;如果被占用则向左探测(执行③);
③判断HashTable[Hashval - i * i]是否被占用,如果没被占用,则Hashval = Hashval - i * i,跳出平方探测;如果被占用则i++继续向右探测(执行②);
T | F |
---|
T | F |
---|
解析:插入和查找具有同样的时间复杂度O(1)。
T | F |
---|
解析:访问结点的时间复杂度为O(N)
T | F |
---|
解析:因为题中交代了非空二叉树,而如果该二叉树只有根节点时满足所有结点均无左孩子,所有结点均无右孩子。而显然此状态下,三种遍历顺序的结果都相同。先序:根左右 后序:左右根。当该数只有两个节点是,可以省略为 先序:根->孩子 后序:孩子->根,故该二叉树只有一个叶子节点。
T | F |
---|
T | F |
---|
解析:循环队列解决的是“假溢出”问题,但是仍然出现真正的溢出问题。假溢出指的是下标溢出,真溢出指的是空间溢出。循环队列面临着数组可能溢出的问题。
T | F |
---|
折半查找:必须要求记录有序,采用顺序存储,利用这个特点,所以折半查找的效率也比顺序查找高,对于数量非常大时,非常快,时间复杂度为
O
(
l
o
g
N
)
O(logN)
O(logN)。
二叉搜索树:若它的左子树不为空,则左子树上所有节点的值均小于根节点。若它的右子树不为空,则右子树上所有节点的值均小于根节点,它的左右子树都是二叉查找树。
所以二叉排序树不一定是平衡树,它是只要求了左右子树与根结点存在大小关系。但是对左右子树之间没有层次差异的约束,因此通过二叉排序树进行查找不一定能够满足
O
(
l
o
g
N
)
O(logN)
O(logN)的。
例如一棵只有多层左子树的二叉排序树。只有是一棵平衡的二叉排序树时,其查找时间性能才和折半查找类似。
T | F |
---|
解释:考察哈弗曼树的构造方法,哈弗曼树的构造思想就是贪心的思想,每次选择权值最小的两个节点来形成新的节点,自底向上建树,因此对于一棵哈弗曼树来说,树中任一非叶节点的权值一定不小于下一层的任意节点的权值。
T | F |
---|
解释:考察二叉搜索树的构造方法。二叉搜索树每次插入一个数时,都需要从句根节点开始比较,小于往左子树比较,大于往右子树比较。而本题中25不能在39的右子树上的。
T | F |
---|
解释:考察算法的特性
①有穷性 执行有穷步之后结束
②确定性 算法中每条指令都必须有确切的含义,不能含糊不清。
③算法必须有0个或者0个以上的输入
④算法必须有1个或者1个以上的输出
⑤有效(可行)性 算法的每个步骤都能有效执行并能得到确定的结果。
T | F |
---|
解释:二叉查找的平均复杂度是
O
(
l
o
g
N
)
O(logN)
O(logN),但是二叉查找不能用链表存储的,这是由链表的特性决定的。链表是很典型的顺序存取结构,数据在链表中的位置只能通过从头到尾的顺序检索得到,即使是有序的,要操作其中的某个数据也必须从头开始。
这和数组有本质的不同。数组中的元素是通过下标来确定的,只要你知道了下标,就可以直接存储整个元素,比如a[5]是直接的。链表没有这个,所以折半查找只能在数组上进行。
T | F |
---|
解释:二叉 搜索/排序/查找 树的特点:①左孩子小于根 ②右孩子大于根
T | F |
---|
解释:数据结构是一门研究非数值计算的程序设计问题中计算机的数据元素以及它们之间的关系和运算等的学科。
T | F |
---|
解释:循环队列指的是后者,用数组表示的队列,利用求余数运算使得头尾相接
T | F |
---|
解释:哈夫曼树的构造总是以两棵值最小的树合并,每次合并都是两棵子树,不会存在度为1的节点。
选项 | |
---|---|
A | 所有结点的平均查找效率是 O ( l o g N ) O(logN) O(logN) |
B | 最大值一定在叶结点上 |
C | 最小值一定在叶结点上 |
D | 中位值结点在根结点或根的左子树上 |
解释:最大值在右子树上,但不一定是叶子节点
选项 | |
---|---|
A | 只允许在端点处插入和删除元素 |
B | 都是先进后出 |
C | 没有共同点 |
D | 都是先进先出 |
解释:不写了吧
选项 | |
---|---|
A | 44 是根结点 |
B | 26 和 66 是兄弟 |
C | 37 和 73 是兄弟 |
D | 26 是 13 的父结点 |
解释:
选项 | |
---|---|
A | 17 |
B | 16 |
C | 47 |
D | 15 |
解释:通过分支可以确定该二叉树边的个数为60,由一颗树的性质:结点等于边+1【n= k+ 1】,那么总结点个数为61,叶子节点的个数为16。
选项 | |
---|---|
A | 任一结点均无右孩子的二叉树 |
B | 以上都不是 |
C | 任一结点均无左子树的二叉树 |
D | 一般二叉树 |
解释:某二叉树的前序和中序遍历序列正好一样,则该二叉树中的任何结点一定都无左孩子。因为 前序序列:根左右 中序序列:左根右
选项 | |
---|---|
A | 6 |
B | 5 |
C | 3 |
D | 4 |
解释:向下查找方法,查找下标(从1开始)依次为:5,2,1,故最少比较3次
选项 | |
---|---|
A | 2 N 和 N N 2^{N} \text { 和 } N^{N} 2N 和 NN |
B | N log N 2 和 N log N N \log N^{2} 和 N \log N NlogN2和NlogN |
C | N 和 2 / N N 和 2 / N N和2/N |
D | N 2 log N 和 N log N 2 N^{2} \log N \text { 和 } N \log N^{2} N2logN 和 NlogN2 |
解释:增长速度与相当于时间复杂度,与常数无关
选项 | |
---|---|
A | 线性表和队列都可以用循环链表实现,但堆栈不能 |
B | 堆栈和队列都不是线性结构,而线性表是 |
C | 线性表用指针,堆栈和队列用数组 |
D | 堆栈和队列都是插入、删除受到约束的线性表 |
解释:不写了吧
选项 | |
---|---|
A | 20 |
B | 30 |
C | 16 |
D | 18 |
解释:树的边为7 * 2 + 5 * 1 = 19,总共19+1个点
选项 | |
---|---|
A | 113 |
B | 122 |
C | 82 |
D | 41 |
解释:树的边为20 * 4 + 10 * 3 + 1 * 2 + 10 * 1 = 122,总共点数为(122 + 1)叶子节点即度为0的结点,那么叶子节点的个数为82个
front
和rear
的值分别为0和4。当从队列中删除两个元素,再加入两个元素后,front
和rear
的值分别为多少?选项 | |
---|---|
A | 2和0 |
B | 2和4 |
C | 2和6 |
D | 2和2 |
解释:
循环队列入队操作只改变front:front=(front+1)%size; (0+2)%4
出队操作只改变rear:rear=(rear+1)%size; (4+2)%6
出队前判断队空情况:队空—rear=front;
入队前判断队满情况:队满—(rear+1)%size=front;
c/(e-f)*(a+b)
,对应的后缀表达式是( )选项 | |
---|---|
A | ef-c/ab+* |
B | c/e-f*a+b |
C | cef-/ab+* |
D | cef/-ab*+ |
解释:考察栈的应用。
①数字直接输出 ②符号入栈 ③’(‘符号入栈 ④’)‘是右括号,匹配左括号,所以栈顶符号依次出栈,直到’(’ ⑤符号入栈时,如果栈顶符号优先级大于当前需要入栈的符号,那么需要出栈直到栈顶元素的优先级大于(不包含等于)入栈的符号的优先级。
选项 | |
---|---|
A | 一个“右-右”旋和两个“右-左”旋 |
B | 一个“右-右”旋、一个“右-左”旋、一个“左-右”旋 |
C | 两个“右-右”旋和一个“左-右”旋 |
D | 两个“右-右”旋和一个“右-左”旋 |
解释:
本题要求实现一个函数,将两个链表表示的递增整数序列合并为一个非递减的整数序列。
函数接口定义:
List Merge( List L1, List L2 );
其中List
结构定义如下:
typedef struct Node *PtrToNode;
struct Node {
ElementType Data; /* 存储结点数据 */
PtrToNode Next; /* 指向下一个结点的指针 */
};
typedef PtrToNode List; /* 定义单链表类型 */
L1
和L2
是给定的带头结点的单链表,其结点存储的数据是递增有序的;函数Merge
要将L1
和L2
合并为一个非递减的整数序列。应直接使用原序列中的结点,返回归并后的带头结点的链表头指针。
裁判测试程序样例:
#include <stdio.h> #include <stdlib.h> typedef int ElementType; typedef struct Node *PtrToNode; struct Node { ElementType Data; PtrToNode Next; }; typedef PtrToNode List; List Read(); /* 细节在此不表 */ void Print( List L ); /* 细节在此不表;空链表将输出NULL */ List Merge( List L1, List L2 ); int main() { List L1, L2, L; L1 = Read(); L2 = Read(); L = Merge(L1, L2); Print(L); Print(L1); Print(L2); return 0; } /* 你的代码将被嵌在这里 */
输入样例:
3
1 3 5
5
2 4 6 8 10
输出样例:
1 2 3 4 5 6 8 10
NULL
NULL
答案
List Merge( List L1, List L2 ) { List L = (List)malloc(sizeof(struct Node)); List L3 = L; List P = L1 -> Next; List Q = L2 -> Next; while(P && Q){ if(P -> Data < Q -> Data){ L3 -> Next = P; P = P -> Next; }else{ L3 -> Next = Q; Q = Q -> Next; } L3 = L3 -> Next; } L3 -> Next = NULL; if(P){ L3 -> Next = P; P = P -> Next; } if(Q){ L3 -> Next = Q; Q = Q -> Next; } //L3 -> Next = NULL; L1 -> Next = NULL; L2 -> Next = NULL; return L; }
本题要求按照先序遍历的顺序输出给定二叉树的叶结点。
函数接口定义:
void PreorderPrintLeaves( BinTree BT );
其中BinTree结构定义如下:
typedef struct TNode *Position;
typedef Position BinTree;
struct TNode{
ElementType Data;
BinTree Left;
BinTree Right;
};
函数PreorderPrintLeaves
应按照先序遍历的顺序输出给定二叉树BT
的叶结点,格式为一个空格跟着一个字符。
裁判测试程序样例:
#include <stdio.h> #include <stdlib.h> typedef char ElementType; typedef struct TNode *Position; typedef Position BinTree; struct TNode{ ElementType Data; BinTree Left; BinTree Right; }; BinTree CreatBinTree(); /* 实现细节忽略 */ void PreorderPrintLeaves( BinTree BT ); int main() { BinTree BT = CreatBinTree(); printf("Leaf nodes are:"); PreorderPrintLeaves(BT); printf("\n"); return 0; } /* 你的代码将被嵌在这里 */
输出样例(对于图中给出的树):
Leaf nodes are: D E H I
答案
void PreorderPrintLeaves( BinTree BT )
{
if(BT != NULL)
{
if(BT->Left == NULL && BT->Right == NULL)
{
printf(" %c",BT->Data);
}
PreorderPrintLeaves(BT->Left);
PreorderPrintLeaves(BT->Right);
}
}
%[^,]
是scanf
的正则表达式之一。scanf("%s", xxxx)
,有时我们希望空格也输入进去,可以用scanf("%[^\n]", xxxx)
%[^\n]
的意思就是以'\n'
作为输入的结束标志。%[^,]
就是以','
做输入的结束标志。%[a-z]
表示匹配a
到z
中任意字符%[aB']
匹配a
、B
、'
中一员%[^a]
匹配非a的任意字符fscanf
的用法基本一样。logN
的增长速度 小于 N的0.5次方
。Fn
用递归函数计算的时间复杂度为O(Fn)
.边+1
【n= k+ 1】。LOC[行坐标,列坐标]
表示当前元素起始存储地址Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。