回 帖 发 新 帖 刷新版面

主题:数据结构篇

数据结构篇

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

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

  什么是图?定义为图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个回复)

11 楼

你这个只适用于c语言吗?
在c++中有没有效啊?

12 楼

goog!

13 楼

第一次进来,希望能得到各位武林高手的指点,我也是学计算机的
觉得编程太难了,没法混啊

14 楼


好样的啊

15 楼


帮帮忙!编写一个遍历及显示队列中元素的算法(,原代码) 编写一个遍历及显示队列中元素的算

16 楼

嗯!楼主不错哈,我就是喜欢这么的帖子哈,以后多多的发点!

17 楼


好劲啊!!你地[em8]

18 楼


好劲啊!!你地[em8]

19 楼

顶!

20 楼


[quote]为什么说程序=数据结构+算法?[/quote]

在刚刚开始学习编程的岁月里,我看了这句话就糊涂,和 justforfun626 观点一致,我不赞同!但我理解也很有限,我的公式是:程序 = 语法 + 算法;

确实,我对数据结构这东东一点都不感冒,主要是在看数据结构的书的时候一打开就是一大堆定义啊、各种操作的实现啊什么的,一旦自己要编起程序来,[em18],呵呵~~~

很赞同关于图的观点!其实我觉得很多 教程 方面的书包括数据结构的书,都不知不觉遵循着一种 从简单到复杂、从特殊到一半的 渐进规律,线性代数就是吧,行列式(直接对应着多元一次方程)—>矩阵(开始抽象了)—>向量,这个是简单到复杂的例子,特殊到一般,高中数学:圆 —>椭圆—>双曲线。

最后想问楼主一个问题,您对数据结构与算法之间的关系怎么看?

一个老掉牙的问题。


我来回复

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