《数据结构(C语言版)第八章排序知识梳理及习题详解》

需积分: 0 11 下载量 71 浏览量 更新于2023-12-28 收藏 1.5MB PDF 举报
本系列博客为《数据结构》(C语言版)的学习笔记,主要涵盖了关于排序算法的知识梳理和习题详解。在学习数据结构时,排序算法是一个重要的内容,对于初学者来说,掌握各种排序算法的原理和实现方式是至关重要的。本系列博客将介绍归并排序、交换排序、插入排序、选择排序等多种排序算法的实现方式和时间复杂度,并对这些算法进行了对比和详细的解释。 其中,归并排序是一种经典的排序算法,可以通过递归实现和非递归实现两种方式进行排序。归并排序的时间复杂度为O(nlogn),在实际应用中有着较好的性能表现。通过将序列对半拆分直到序列长度为1,再将序列合并的方式,归并排序可以有效地对待排序记录进行排序。在本系列博客中提供了归并排序的具体实现方式和代码示例,方便学习者进行实际的练习和掌握。 除了归并排序,本系列博客还介绍了其他多种排序算法,例如快速排序、冒泡排序、插入排序、选择排序等。每种排序算法都有其特点和适用场景,学习者可以通过本系列博客对比各种排序算法的性能和实现方式,从而更好地理解和掌握排序算法的原理和实现技巧。 在介绍排序算法的基本原理和实现方式后,本系列博客还提供了大量的习题详解和第七章的作业答案,帮助学习者巩固所学的知识,并提高对数据结构的理解能力。通过练习习题和查看详细的解答,学习者可以更好地掌握排序算法的应用和实际操作技巧。 最后,本系列博客还介绍了内部排序和外部排序的概念。在实际应用中,排序的数据可能会分布在内存和外存之间,导致复杂度增加。因此,了解和掌握外部排序的方法和技巧对于处理大规模数据的排序非常重要。通过本系列博客的学习,学习者可以掌握内部排序和外部排序的原理和实现方式,为日后的实际应用提供了重要的基础知识。 总之,本系列博客以清晰易懂的方式对数据结构中的排序算法进行了详细的梳理和解释,通过介绍归并排序、交换排序、插入排序、选择排序等多种排序算法的实现方式和应用场景,帮助学习者更好地理解和掌握数据结构的基本原理和应用技巧。同时,通过大量的习题详解和作业答案,提高了学习者对所学知识的掌握和应用能力。通过本系列博客的学习,学习者可以更好地理解数据结构中的排序算法,并为日后的实际应用打下坚实的基础。
2019-09-21 上传
1. 一棵二叉树的顺序存储情况如下: 树中,度为2的结点数为( )。 A.1 B.2 C.3 D.4 2. 一棵“完全二叉树”结点数为25,高度为( )。 A.4 B.5 C.6 D.不确定 3.下列说法中,( )是正确的。 A. 二叉树就是度为2的树 B. 二叉树中不存在度大于2的结点 C. 二叉树是有序树 D. 二叉树中每个结点的度均为2 4.一棵二叉树的前序遍历序列为ABCDEFG,它的中序遍历序列可能是( )。 A. CABDEFG B. BCDAEFG C. DACEFBG D. ADBCFEG 5.线索二叉树中的线索指的是( )。 A.左孩子 B.遍历 C.指针 D.标志 6. 建立线索二叉树的目的是( )。 A. 方便查找某结点的前驱或后继 B. 方便二叉树的插入与删除 C. 方便查找某结点的双亲 D. 使二叉树的遍历结果唯一 7. 有abc三个结点的右单枝二叉树的顺序存储结构应该用( )示意。 A. a b c B. a b ^ c C. a b ^ ^ c D. a ^ b ^ ^ ^ c 8. 一颗有2046个结点的完全二叉树的第10层上共有( )个结点。 A. 511 B. 512 C. 1023 D. 1024 9. 一棵完全二叉树一定是一棵( )。 A. 平衡二叉树 B. 二叉排序树 C. 堆 D. 哈夫曼树 10.某二叉树的中序遍历序列和后序遍历序列正好相反,则该二叉树一定是( )的二叉树。 A.空或只有一个结点 B.高度等于其结点数 C.任一结点无左孩子 D.任一结点无右孩子 11.一棵二叉树的顺序存储情况如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 A B C D E 0 F 0 0 G H 0 0 0 X 结点D的左孩子结点为( )。 A.E B.C C.F D.没有 12.一棵“完全二叉树”结点数为25,高度为( )。 A.4 B.5 C.6 D.不确定 二、填空题(每空3分,共18分)。 1. 树的路径长度:是从树根到每个结点的路径长度之和。对结点数相同的树来说,路径长度最短的是 完全 二叉树。 2. 在有n个叶子结点的哈夫曼树中,总结点数是 2n-1 。 3. 在有n个结点的二叉链表中,值为非空的链域的个数为 n-1 。 4. 某二叉树的中序遍历序列和后序遍历序列正好相反,则该二叉树一定是 任一结点无左孩子 的二叉树。 5. 深度为 k 的二叉树最多有 个结点,最少有 k 个结点。 三、综合题(共58分)。 1. 假定字符集{a,b,c,d,e,f }中的字符在电码中出现的次数如下: 字符 a b c d e f 频度 9 12 20 23 15 5 构造一棵哈夫曼树(6分),给出每个字符的哈夫曼编码(4分),并计算哈夫曼树的加权路径长度WPL(2分)。 (符合WPL最小的均为哈夫曼树,答案不唯一) 哈夫曼编码: 2. 假设用于通信的电文由字符集{a,b,c,d,e,f,g}中的字符构成,它们在电文中出现的频率分别为{0.31,0.16,0.10,0.08,0.11,0.20,0.04}。要求: (1)为这7个字符设计哈夫曼树(6分)。 (2)据此哈夫曼树设计哈夫曼编码(4分)。 (3)假设电文的长度为100字符,使用哈夫曼编码比使用3位二进制数等长编码使电文总长压缩多少?(4分) (1) 为这7个字符设计哈夫曼树为(符合WPL最小的均为哈夫曼树,答案不唯一): (2) 哈夫曼编码为: a:01;b:001;c:100;d:0001;e:101;f:11;g:0000 (3) 假设电文的长度为100字符,使用哈夫曼编码比使用3位二进制数等长编码使电文总长压缩多少? 采用等长码,100个字符需要300位二进制数,采用哈夫曼编码发送这100个字符需要261二进制位,压缩了300-261=39个字符。压缩比为39/300=13%。 3. 二叉数T的(双亲到孩子的)边集为: { <A,B>, <A,C>, <D,A>, <D,E>, <E,F>, <F,G> } 请回答下列问题: (1)T的根结点(2分): (2)T的叶结点(2分): (3)T的深度(2分): (4)如果上述列出边集中,某个结点只有一个孩子时,均为其左孩子;某个结点有两个孩子时,则先列出了连接左孩子的边后列出了连接右孩子的边。画出该二叉树其及前序线索(6分)。 (1)T的根结点 (2)T的叶结点 : (3)T的深度 : (4)该二叉树其及前序线索为: 4.现有以下按前序和中序遍历二叉树的结果: 前序:ABCEDFGHI 中序:CEBGFHDAI 画出该二叉树的逻辑结构图(5分),并在图中加入中序线索(5分)。 5.有电文:ABCDBCDCBDDBACBCCFCDBBBEBB。 用Huffman树构造电文中每一字符的最优通讯编码。画出构造的哈夫曼树,并给出每个字符的哈夫曼编码方案。(符合WPL最小的均为哈夫曼树,答案不唯一) (1)构造哈夫曼树(6分): (2)哈夫曼编码方案(4分):