严蔚敏数据结构C语言版习题解析

需积分: 0 2 下载量 12 浏览量 更新于2024-07-31 收藏 275KB DOC 举报
"严蔚敏数据结构习题集答案——包含清华大学版数据结构(C语言版)习题的解答,但不包括实习题答案,仅提供章节习题答案。" 在严蔚敏教授的《数据结构(C语言版)》一书的习题集中,我们发现了两个具体的习题解答,它们涉及了数据结构中的排序和动态计算问题。 第一个习题1.16介绍了一个简单的冒泡排序算法。这个函数`print_descending`接收三个整数参数`x`, `y`, `z`,并按照从大到小的顺序输出这三个数。实现过程中,它首先通过交换操作确保`x`和`y`的正确顺序,接着确保`y`和`z`的正确顺序,最后再次检查`x`和`y`的顺序,确保最终输出的顺序是降序的。这种方法虽然简单,但在实际的数据结构问题中,冒泡排序通常被更高效的排序算法如快速排序、归并排序等替代,因为它们的平均和最坏时间复杂度更低。 第二个习题1.17涉及到斐波那契序列的计算。`fib`函数用于求解k阶斐波那契序列的第m项的值`f`。斐波那契序列是一个典型的动态规划问题,其定义是每个数是前两个数的和。这里使用了一种非递归的方法来求解,避免了递归可能导致的指数级时间复杂度。通过动态存储序列的中间值,算法的时间复杂度降低到了线性O(m),这显著优于递归方法的O(k^m)。此外,还提到了即使使用暂存中间结果的方法,时间复杂度也会达到O(m^2),说明了动态规划在这类问题上的优势。 习题1.18展示了一个结构体`resulttype`,用于存储参赛者的信息,包括性别、学校名、比赛成绩等。同时定义了另一个结构体`scoretype`,用于统计各校的男女总分和团体总分。`summary`函数的目的是对`result[]`数组中的数据进行处理,计算各校的得分情况。虽然具体实现没有给出,但我们可以推断这个函数会遍历`result[]`,根据结构体成员计算相应的分数,并将结果存储在`score[]`数组中。 这些习题展示了数据结构课程中的基础概念,如排序算法、动态规划和结构体的使用,这些都是计算机科学中不可或缺的知识点。理解和掌握这些内容对于深入学习数据结构与算法,乃至整个计算机科学领域都至关重要。