回 帖 发 新 帖 刷新版面

主题:数据结构篇

数据结构篇

  为什么说程序=数据结构+算法?程序可以看成处理数据的一个过程,而数据形式各种各样,所以非常有必要把数据以及数据间的关系搞清楚,而这正是数据结构。

  按我的理解,数据结构就是图的结构,一般的数据结构书都是从线性表开始,然后到树,最后才讲图,我觉得应该先说图。

  什么是图?定义为图G={V,E},它是顶点集和边集的集合,其中顶点集不能为空。这是图的数学定义,我们要从这个定义背后看到它的实质。顶点集V,就是我们在程序中会遇到的‘数据’,我们有时也称结点,比如

  int a=1,b=2,c=3;

  a,b,c都有相同的数据长度,也有相同的类型。还有复杂点的

  struct _myType{
    char *name;
    int age;
  }a,b,c;

  像这样的都可看成结点,它们是我们研究的对象。

  除此之外,我们还关心顶点间的关系,这就是边集E。其实关系非常简单,无非是有关系和无关系两种,而关系的表现却非常多样,比如,朋友关系,同事关系==。边集形象地表示为两顶点间有没有边,如果两顶点有关系,就说它们直接联通。

  OK,按边集的不同,图就有不同的几种形式。

  1、边集为空,那G=V,是完全离散的点,做为集合,元素间没有任何关系。

  比如

  int a=41;
  char *name="I love programming!";
  double pi=3.14;

  显然这些数据找不出任何关系,它们只是在同一个模块内,同一个集合中。这样的情况比较少见,这也是我们学完C语言后所能达到的编码水平,感觉编程太枯燥太无味了,从‘两个数比较大小’到‘三个数比较大小’的程序就会让程序乱得让人受不了。

  2、边集为任意的非空形态,这是一种一般的形式,那数据结构就是图。(多对多)

  图的算法在数据结构的算法中有非常重要的地位,也就是正因为这个原因。这样的图在现实中也是非常常见,比如我们的交际网,我们现在的Internet等。

  拿到这样的数据结构,我们会关心什么?图的连通性,以及最短连通性,最小子图(生成树),最短路径等。以后会了解到这些算法。

  另外两种都是特殊情况,也是我们比较熟悉的线性结构和树型结构。

  3、边集为某种线性形态,它侧重表达了顶点的有序性。(一对一)

  也就是我们常说的线性表。对于这里关系,我们可以定义“《”关系,也就是我们所说的‘前趋’和‘后继’,线性结构是非常理想的结构。

  4、边集为某种树型形态。(一对多)

  为什么这样的树型结构会这么有用,我还不太清楚,我想可能它体现了我们的思维方式,比如我们的文件以及目录管理,根目录下有文件也有子目录,子目录下也有文件和子目录,再比如我们的学校管理,学校分院系,院下面再分专业,同一专业下还可以分班,同一个班还有不同的学号,这样的管理模式就体现了树型结构。


  这是数据结构的整体体系,写在前面是希望大家能够把握。以后会由浅到深的展示它们的实现、常用的算法以及运用它们能解决的问题。

回复列表 (共22个回复)

21 楼

你开始顶我的老帖啊~~

关于,程序是什么,没必要弄这么一个玄乎的公式,最原始的最本质,程序就是一段可执行的代码~就这么简单。那么说,只是为了突出‘数据结构’,这是软件发展经过的一个阶段,人们认识到数据结构的重要性,仅此而已。

我现在的理解是,数据结构+算法只是‘实现’,某段程序是用来实现某个需求的,而软件的范畴更大~

22 楼

我觉得数据结构不是孤立且难学的,应该是使写程序走向精炼的桥梁,通过定义结构,全部基础知识都能变熟练起来,自己定义自己的结构是有趣的事情.

我来回复

您尚未登录,请登录后再回复。点此登录或注册