1.1.1 数据结构的定义
数据结构是相互之间存在一种或多种关系的数据元素的集合,以及该集合中元素之间的关系。这个科学定义比较抽象,如何理解呢?
让我们一起假想一个实际场景:请编写一个程序,输入3个整数,找出这3个整数中最小的数字。
不妨设3个变量a、b、c,用于存储输入的3个整数,输入完成以后,假设a是最小的。将a和b进行比较,如果b比a小,则把b的值赋给a。此时,a里面存储的一定是a和b中的较小值。再比较a和c,如果c比a小,则把c的值赋给a。完成这个步骤后,a中存储的是3个数中的最小值,实现上述步骤的程序如下:
上述问题并不难解决,但是如果数字增多,问题就会变得非常棘手。比如数字增加到10个,需要定义a、b、c、d、e、f、g、h、i、j等10个变量,if语句也需要罗列10句。如果是100个数字呢?如果是1000个数字呢?遇到这样的困难,归根结底是因为数字之间没有建立关系,所有的数字都是独立分散存储的。
如果换一个思路,使用数组来存储,问题就会变得很容易处理。数组就是一种最基础、最常见的数据结构。它的特点就是,把一组相同类型的数字,按照线性方式,存储在连续相邻的位置上。此时所有数字都可以用一个名字来表示,比如 a,用数组下标来区分这是数组中的第几个元素。此时输入可以用循环,输入完成后,假设 a[0]是最小的,则依次把a[0]与后面每个元素比较,如果发现更小的,就赋值给a[0],这样对于100个数字的问题,代码如下:
不管数据规模多大,都只需要调整常量MAXN的大小即可,程序并不会变得更难写。事实上,还可以定义一个变量 n,表示数据的个数,这样程序可以处理的数据规模就是可变的了。
通过上文的例子可以看到,在合理选用数组这个数据结构以后,由于数据紧密组织在一起,编程更方便。数组就是一个线性数据结构,其数据元素线性排列,元素之间有前后相邻的关系。
我们可以定义数据结构 DataStructure=(D,R)。其中,D 是数据元素的集合;R 是该集合中所有元素关系的有限集合。根据数据之间的关系,可以把数据结构分为3种类型:线性结构、树形结构和图形结构(见图1.1)。本章主要介绍线性结构,简要介绍树形结构。
图1.1 线性结构、树形结构和图形结构