今天开始认真读这本清华版的数据结构,严蔚敏和吴伟民编著。也许你会奇怪我为什么会选择这本C语言描述的数据结构书,现在的数据结构不都用面向对象语言描述吗?其实这本书不是我选的,而是我参加的机试指定的参考书。不过对于本书选用的语言,我倒有自己的看法。用C语言描述显然有很多不便,但是在一个充斥着用OO描述数据结构的世界里,从OO中抽身出来用C看待数据结构的思想,也许更能看清数据结构的本质。
好了,言归正传。在今天这第一篇文章里,我来探讨一下数据结构的基本概念。作者一开篇就归纳了计算机解题的一般步骤:“首先要从具体问题抽象出一个适当的数学模型,然后设计一个解此数学模型的算法,最后编出程序,进行测试、调试直至得到最终解答。”我把它再进一步归纳一下,就是:抽象数学模型——设计算法——编写程序。这个思路非常重要,除了一些非常简单的问题,所有的程序设计都应该遵循这三个基本步骤。我们平时写程序常犯的错误是忽略第一个或第二个步骤,或者更甚者,前两个都忽略。
在设计数学模型的过程中,实际上就引出了数据结构的概念。本书中作者给出的定义是:“简单来说,数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象以及它们之间的关系和操作等的学科。”国内的教材为了语言上的严谨常常把话说得很难懂。请大家注意这句话里的这几个关键词:1)非数值计算,这说明了数据结构这门学科的应用范围,如果你想解一个线性方程组,大概很难直接找到合适的数据结构;2)操作对象,也就是问题中的数据及其表示的形式;3)关系,即数据间的关系;4)操作,