什么是数据结构

    记得当年考研时,专业课就是数据结构和C++,当时为了准备考试,找来严蔚敏老师的那本经典的数据结构教材,将上面讲到的算法全部用C++实现了一遍,可惜当年博客没现在这么流行,不然我也可以像guojing那样,写一些心得体会。
    晚上再把那本书翻出来,很长时间不看了,已经有一层尘土了,随手翻来,看着书里曾经记录的密密麻麻的笔记,让人感怀不已。

    这篇随笔只是对数据结构的一个大体上的温习和回顾,所以只关心一个问题,那就是:什么是数据结构?
   
计算机软件是伴随着计算机硬件的发展来衍生出来的,那么计算机软件是用来做什么的呢?我们平日里写的代码所堆砌出来的一个东西,它究竟有什么用处呢?软件就是用来使人们的生活更方便、更有效率,这就是我对软件用途的理解。软件将人们从那些大量重复工作的漩涡中解放出来,使他们可以有机会去做一些更有挑战性、更能产生效益的工作,来进一步提高整个社会的财富创造能力。
    如果想要软件去解决问题,那么就必须有一些数学模型来对待解决的问题进行抽象,最典型的就是前几年一直很火的数学建模大赛,提出一个问题,我们通过对其进行数学建模,来得到一个近似的解决方案,通常都是一个最优化的模型。但是现实中的问题要复杂的多,很多时候我们通过数学模型是无法对其进行抽象的,这时,我们就引出了数据结构。
   
现实中需要解决的问题具有以下几个特点:1. 一般包括一些数据,这些数据可能是简单的数据,例如员工的年龄、生日等;也可能是比较复杂的数据,例如员工本身,就是一个由身高、体重、年龄、生日等一系列简单数据所组成的复杂数据。2. 数据之间往往有联系,这种联系可能是一对一的、一对多的或者多对多的。3. 数据往往包含一些操作,就像整数之间可以进行加减乘除。
    数据结构就是相互之间存在一种或多种特定关系的数据元素的集合。我们在平时的工作中还会碰到另外一个很常见的概念:数据类型,它是指一个值的集合和定义在这个值集上的一组操作的总称。当我们说数据类型时,不要忘了它本身是包括了一组操作的。
    下面我们继续关注如何在计算机中使用数据结构,数据结构中提到的数据元素之间的关系分为逻辑和物理两种情况。在逻辑上,主要体现为是一对一、一对多还是多对多;在物理上,是指数据元素在存储设备中的存储方式,分为顺序映像和非顺序映像两种,顺序映像就是指数据元素在内存中相邻存储,我们知道一个元素的位置后,可以通过相对位置的方式来确定其他元素的位置,非顺序映像是指元素之间借助指针来进行连接。
    有了数据类型后,我们解决实际问题,还需要确定如何使用数据类型,也就是我们要确定算法。算法是对特定问题求解步骤的一种描述,它是指令的有限序列,其中每一条指令都表示一个或多个操作。算法有以下特征:1. 有穷性;2. 确定性;3. 可行性;4. 输入;5. 输出。
    对于一个好的算法,有以下要求:1. 正确性;2. 可读性;3. 健壮性;4. 效率和低存储,也就是时间和空间的最优化。
    我们可以通过时间复杂度或者空间复杂度来对算法的优劣进行判断。
   

posted @ 2008-12-03 23:19  李潘  阅读(5670)  评论(0编辑  收藏  举报