1
算法与数据结构  C语言版
1.3.1.1 1.1.1 为什么学习数据结构
1.1.1 为什么学习数据结构

早期人们把计算机理解为数值计算工具,认为计算机就是用来计算的。可现实中,我们更多的不是解决数值计算问题,而是需要一些更科学有效的手段(如表、树、图等数据结构)的帮助,才能更好地处理问题。所以数据结构是一门研究非数值计算的程序设计问题中的操作对象,以及它们之间关系和操作等相关问题的学科。

在数据处理领域中,建立数学模型有时并不十分重要,事实上,许多实际问题是无法表示成数学模型的。人们最感兴趣的是数据集合中各数据元素之间存在什么关系,应如何组织它。简单地说,数据结构是指相互有关联的数据元素的集合。例如,向量和矩阵就是数据结构,在这两种数据结构中,数据元素之间有着位置上的关系。又如,图书馆中的图书卡片目录就是一个较为复杂的数据结构,对于列在卡片上的各种书,可能在主题、作者等问题上相互关联,甚至一本书本身也有不同的相关成分。数据元素具有广泛的含义。一般来说,现实世界中客观存在的一切个体都可以是数据元素。

数据结构并不是要教你怎样编程,编程语言的精练也不在数据结构的管辖范围之内,数据结构是教你如何在现有程序的基础上把它变得更优(运算更快,占用资源更少),它改变的是程序的存储运算结构而不是程序语言本身。

如果把程序看成一辆汽车,那么程序语言就构成了这辆车的车身和轮胎,而算法则是这辆车的核心——发动机。这辆车跑得是快是慢,关键就在于发动机的好坏(当然轮胎太烂了也不行),而数据结构就是用来改造发动机的。可以这么说,数据结构并不是一门语言,它是一种思想、一种方法、一种思维方式。

再举一个简单的例子,我们要写文章的时候,一定要先构思文章的结构,然后才能下笔去写,写的时候可能用英文,也可能用法文或中文,在这里文章构思的结构就相当于数据结构,而用的语言就是实现数据结构算法的编程语言。可以这样理解,数据结构是思想,实现数据结构算法的语言(如C语言)是工具。工具一定是依赖思想存在的,可见数据结构的重要性。

数据结构就是教你怎样用最精简的语言,利用最少的资源(包括时间和空间)编写出最优秀、最合理的程序。

1968年,美国的高德纳(Donald E.Knuth)教授在其所写的《计算机程序设计艺术》第一卷《基本算法》中,较系统地阐述了数据的逻辑结构和存储结构及其操作,开创了数据结构的课程体系。同年,数据结构作为一门独立的课程,在计算机科学的学位课程中出现。

20世纪70年代初,出现了大型程序,软件也开始相对独立,结构程序设计成为程序设计方法学的主要内容,人们越来越重视数据结构,认为程序设计必须是好的数据结构加上好的算法。