数据结构

来源:互联网 发布:非遗文化知多少 编辑:程序博客网 时间:2024/05/22 14:46

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. 已知一棵二叉树中序和后序序列为分别为:BDCEAFHGDECBHGFA画出这棵二叉树.


6. 已知二叉树的先序、中序、后序序列分别如下,但其中有一些已模糊不清,构造出该二叉树.

先序:   _23_5_78

中序:   3_41_789

后序:   _42__651


7. 由空格组成的串称空串。()

 

8. 深度为K的二叉树,所含叶子的个数最多为__D___.

   A   2k         B   K;           C 2k-1        D 2k-1 

 

9. 设有两个串pq,求qp中首次出现的位置的运算称作(  B    )

A、连接      B、模式匹配    C、求子串       D、求串长

 

 

10. 顺序队的“假溢出”是怎样产生的?如何知道循环队列是空还是满?

    答:一般的一维数组队列的尾指针已经到了数组的上界,不能再有入队操作,但其实数组中还有空位置,这就叫“假溢出”。

采用循环队列是解决假溢出的途径。

另外,解决队满队空的办法有三:

  设置一个布尔变量以区别队满还是队空;

  浪费一个元素的空间,用于区别队满还是队空。

  使用一个计数器记录队列中元素个数(即队列长度)。

我们常采用法②,即队头指针、队尾指针中有一个指向实元素,而另一个指向空闲元素。

判断循环队列队空标志是: f=rear      队满标志是:f=(r+1)%N

 

11. 假设用于通信的电文仅由8个字母组成,字母在电文中出现的频率分别为0.070.190.020.060.320.030.210.10。试为这8个字母设计哈夫曼编码。使用07的二进制表示形式是另一种编码方案。对于上述实例,比较两种方案的优缺点。

解:方案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

  

100

 

40      60

19     21     32   28

(17)      11

   7     10  6    5

                 2     3

 

 

方案比较:

 

字母编号

对应编码

出现频率

1

1100

0.07

2

00

0.19

3

11110

0.02

4

1110

0.06

5

10

0.32

6

11111

0.03

7

01

0.21

8

1101

0.10

 

字母编号

对应编码

出现频率

1

000

0.07

2

001

0.19

3

010

0.02

4

011

0.06

5

100

0.32

6

101

0.03

7

110

0.21

8

111

0.10

 

 

 

 

 

 

 

 

 

 

 

 


方案1WPL2(0.19+0.32+0.21)+4(0.07+0.06+0.10)+5(0.02+0.03) =2.61

方案2WPL3(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、索引存储

 

原创粉丝点击