一、选择题
1.下列程序段的时间复杂度是()
void func(int n){
int i = 0,m = 0;
while(m < n * n){
i++:
m=m+i;
}
}
A. O(n)B. O(Iogn)C. O(nIogn)D. O(n^2)
2.设p指向一个非空双向链表中的某个结点,将一个q所指新结点插入到该双向链表中,使其成为p所指结点的前驱结点,能正确完成此要求的语句段是 ( )。
A. q->next=p; q->prior=p->prior; p->prior=q; p->prior->next=q;
B. p->prior=q; q->next=p; p->prior->next=q; q->prior=p->prior;
C. q->prior=p->prior; q->next=p; p->prior->next=q;p->prior=q;
D. q->prior=p->next; q->next=p; p->prior->next=q; p->prior=q;
3.一个栈的入栈序列为1,2,3,···,n,其出栈序列是pi,p2,p3,···,Pn。若p1=4,则p3可能取值的个数是多少?()
A. n-3
B. n-2
C. n-1
D. 无法确定
4.二维数组SA中,每个元素的长度为3个字节,行下标 i 从0到7,列下标 j 从0到9,从首地址SA开始连续存放在存储器内,且采用行优先顺序存储,元素A[4][5]的起始地址为 ( )。
A. SA+141
B. SA+111
C. SA+135
D. SA+165
5.一棵度为4的树 T 中,若有10个度为 4 的结点,20个度为 3 的结点,1个度为2的结点,12个度为1的结点,则树 T 的叶子结点个数是 ( )。
A. 63
B. 81
C. 105
D. 72
6.设森林 F 中有 4 棵树 T1,T2,T3,T4,其结点个数分别为 10、15、12、19,将森林 F 转换成一棵二叉树BT,BT 的根结点 R 为 T1 上的结点,则 R 的左子树上的结点个数是 ( )。
A. 9
B. 10
C. 19
D. 27
7.设哈夫曼编码的长度不超过4,若已对两个字符编码为 1 和 01,则最多还可对( )个字符编码。
A. 2
B. 3
C. 4
D. 7
8.下列四个序列中,哪一个是堆 ( )。
A. 65,55,40,10,30,25,20,15
B. 65,55,30,15,25,40,20,10
C. 65,40,55,10,25,30,20,15
D. 65,55,40,30,15,25,20,10
9.在含有33个结点的二叉排序树上,查找关键字为34的结点,以下 ( ) 是可能的关键字比较序列?
A. 25,37,16,45,34
B. 45,37,16,25,34
C. 45,25,16,37,34
D. 16,37,25,45,34
10.序列(5,3,12,9,4,2,10.6,8)是某排序方法第一趟后的结果,该排序算法可能是()。
A.冒泡排序
B.堆排序
C.归并排序
D.简单选择排序
选择题答案
1.答案是 A. O(n)。这段程序的时间复杂度是线性的,因为在每次循环中,i和m都在增加,而m的增长速度比n的平方快,所以循环的次数是线性关系1。【m的取值变化是0->1->3->6->10->15->21->28->36->45->55->66->78->91这样的。】
2.答案是 C. q->prior=p->prior; q->next=p; p->prior->next=q;p->prior=q;。这个语句段首先将q的前驱设置为p的前驱,然后将q的后继设置为p,接着将p的前驱的后继设置为q,最后将p的前驱设置为q,这样就完成了将q插入到p之前的操作2。
3.答案是 B (这里我觉得应该是n-2 因为入栈和出栈是可以间插着来进行的。 我可以把4出栈之后再把3,2出栈,再继续入栈5,6,.... 或者把4出栈之后再把3出栈,再继续入栈5,6,.... 或者把4出栈之后再继续入栈5,再把3,2出栈,6,.... 诸如此类。所以我觉得除了1、4不能在p3位置被出栈,其余都可以)
4.答案是 C. SA+135。二维数组元素A[4][5]的起始地址应该是SA+135。因为每个元素的长度为3个字节,行下标i从0到7,列下标j从0到9,从首地址SA开始连续存放在存储器内,且采用行优先顺序存储。所以,元素A[4][5]的起始地址应该是(4*10+5)*3+SA=SA+135。
5.答案是 D. 72。在一棵度为4的树中,叶子结点的个数可以通过公式:叶子结点数 = 度为4的结点数 * 4 + 度为3的结点数 * 3 + 度为2的结点数 * 2 + 度为1的结点数 * 1,所以叶子结点数 = 10 * 4 + 20 * 3 + 1 * 2 + 12 * 1 = 725。
6.答案是 A. 9。将森林F转换成一棵二叉树BT,BT的根结点R为T1上的结点,R的左子树上的结点个数就是T1的结点个数减1,因为R本身不在左子树上,所以答案是10-1=96。
7.C. 4。在哈夫曼编码中,一个编码不能是任何其他编码的前缀。3位编码可能是001,对应的4位编码只能是0000和0001。3位编