严淑敏《数据结构》C语言答案解析:冒泡排序与斐波那契序列

需积分: 0 2 下载量 101 浏览量 更新于2024-08-02 收藏 275KB DOC 举报
"严淑敏数据结构答案,包含C语言实现的算法,如冒泡排序和斐波那契序列计算,以及结构体定义和数组处理。" 这篇摘要涉及到的知识点主要集中在数据结构、算法和C语言编程上。首先,我们来看第一章中的两个问题。 1.16 题目涉及一个简单的冒泡排序算法。冒泡排序是一种基础的排序算法,它通过不断交换相邻的未正确排序的元素来逐步将数组排序。在这个例子中,`void print_descending` 函数接收三个整数 `x`, `y`, `z`,并按照从大到小的顺序输出它们。它首先使用 `<->` 运算符(这是一个表示交换操作的自定义符号)来比较并交换 `x` 和 `y`,然后再次比较并交换 `x` 和 `y`,实现冒泡排序的效果。最后,函数按降序顺序打印这三个数。 1.17 题目是关于斐波那契序列的计算。`Status fib` 函数用于求解 k 阶斐波那契序列的第 m 项 `f` 的值。斐波那契序列是这样一个数列:F(0) = 0, F(1) = 1, F(n) = F(n-1) + F(n-2) 对于 n > 1。这里,函数采用了非递归的方法来避免指数时间复杂度,通过动态规划计算出序列的第 k 至第 m 个元素的值,并在 O(m) 时间内求得 f[m]。对比之下,递归方法会导致 O(k^m) 的时间复杂度,而简单的迭代方法则可能达到 O(m^2)。 接下来,1.18 题目介绍了一个数据结构——`resulttype` 结构体,用于存储运动员的信息,包括运动项目、性别、学校名、比赛结果和分数。此外,还有一个 `scoretype` 结构体,用于存储每个学校的男女总分和团体总分。`void summary` 函数的目的是计算并总结 `result[]` 数组中各学校的男女总分和团体总分,这涉及到数组遍历和数据统计的基本操作。 这些知识点涵盖了数据结构中的结构体设计,算法中的排序(冒泡排序)和动态规划(斐波那契序列),以及C语言的基础语法,如自定义运算符、条件判断、循环控制、指针操作和数组处理。对于学习数据结构和算法的初学者来说,这些都是非常重要的基础概念。