1.顺序队列和循环队列的队满及队空判断条件是一样的( 错误 )
2.设输入序列为1,2,3,4,5借助一个栈不可能得到的输出序列是( c )
A 、 1,2,3,4,5 B 、5,4,3,2,1 C 、 4,3,1,2,5 D、 1,3,2,5,4
3. 深度为6的完全二叉树至多有_63_个结点,至有_32_个结点。
4. 已知完全二叉树有28个结点,则整个二叉树有( B )个度为1的结点。
A、 0; B、 1; C、 2; D、 不确定
5. 已知一棵二叉树中序和后序序列为分别为:BDCEAFHG和DECBHGFA画出这棵二叉树.
6. 已知二叉树的先序、中序、后序序列分别如下,但其中有一些已模糊不清,构造出该二叉树.
先序: _23_5_78
中序: 3_41_789
后序: _42__651
7. 由空格组成的串称空串。(错)
8. 深度为K的二叉树,所含叶子的个数最多为__D___.
A 、 2k B 、 K; C 、 2k-1 D、 2k-1
9. 设有两个串p和q,求q在p中首次出现的位置的运算称作( B )
A、连接 B、模式匹配 C、求子串 D、求串长
10. 顺序队的“假溢出”是怎样产生的?如何知道循环队列是空还是满?
答:一般的一维数组队列的尾指针已经到了数组的上界,不能再有入队操作,但其实数组中还有空位置,这就叫“假溢出”。
采用循环队列是解决假溢出的途径。
另外,解决队满队空的办法有三:
① 设置一个布尔变量以区别队满还是队空;
② 浪费一个元素的空间,用于区别队满还是队空。
③ 使用一个计数器记录队列中元素个数(即队列长度)。
我们常采用法②,即队头指针、队尾指针中有一个指向实元素,而另一个指向空闲元素。
判断循环队列队空标志是: f=rear 队满标志是:f=(r+1)%N
11. 假设用于通信的电文仅由8个字母组成,字母在电文中出现的频率分别为0.07,0.19,0.02,0.06,0.32,0.03,0.21,0.10。试为这8个字母设计哈夫曼编码。使用0~7的二进制表示形式是另一种编码方案。对于上述实例,比较两种方案的优缺点。
解:方案1;哈夫曼编码
先将概率放大100倍,以方便构造哈夫曼树。
w={7,19,2,6,32,3,21,10},按哈夫曼规则:【[(2,3),6], (7,10)】, ……19, 21, 32
0 1 0 1 0 1 19 21 32 0 1 0 1 0 1 7 10 6 0 1 2 3
|
(40) (60)
19 21 32 (28)
(17) (11)
7 10 6 (5)
2 3
方案比较:
|
|
方案1的WPL=2(0.19+0.32+0.21)+4(0.07+0.06+0.10)+5(0.02+0.03) =2.61
方案2的WPL=3(0.19+0.32+0.21+0.07+0.06+0.10+0.02+0.03)=3
结论:哈夫曼编码优于等长二进制编码。
12. 简述以下算法的功能(栈和队列的元素类型均为int)。
void algo3(Queue &Q){
Stack S; int d;
InitStack(S);
while(!QueueEmpty(Q)){
DeQueue (Q,d); Push(S,d);
};
while(!StackEmpty(S)){
Pop(S,d); EnQueue (Q,d);
}
}
答:该算法的功能是:利用堆栈做辅助,将队列中的数据元素进行逆置。
13. 非线性结构是数据元素之间存在一种:( B )
A、一对多关系 B、多对多关系 C、多对一关系 D、一对一关系
14. 数据结构中,与所使用的计算机无关的是数据的( C )结构;
A、存储 B、物理 C、逻辑 D、 物理和存储
15. 计算机算法必须具备输入、输出和( B )等5个特性。
A、可行性、可移植性和可扩充性 B、 可行性、确定性和有穷性
C、 确定性、有穷性和稳定性 D、 易读性、稳定性和安全性
16. 你所学过的排序的方法中,哪些是稳定的____________
答:直接插入 二分(折半)插入 冒泡 归并排序 枚举
17.下列排序算法中,排序花费的时间不受数据开始排列特性影响的算法是( C )
A、直接插入排序 B、冒泡排序 C、直接选择排序 D、快速排序
18. 下列排序算法中,最好情况下时间复杂度为0(n)的算法是( D )
A、选择排序 B、归并排序 C、快速排序 D、冒泡排序
19. 交换排序的基本思想是:两两比较待排序记录的___关键字___ ,发现两个记录的次序相反时即进行交换,直到没有_反序_ 的记录为止,其中_起泡排序_和__快速排序__都属于交换排序.
20. 顺序查找法适用于存储结构为( C )的线性表.
A、 散列存储 B 、压缩存储 C、顺序或链式存储 D、索引存储