回 帖 发 新 帖 刷新版面

主题:数据结构篇

数据结构篇

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

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

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

沙发

[b]线性结构[/b]

线性表(链表)、栈与队列
[url=http://www.programfan.com/club/showbbs.asp?id=152982]http://www.programfan.com/club/showbbs.asp?id=152982[/url]

我再来一贴,链表的操作--C++类封装.封装得不完善,也不好哈..
[url=http://www.programfan.com/club/showbbs.asp?id=112591]http://www.programfan.com/club/showbbs.asp?id=112591[/url]


[b]树型结构[/b]

树与二叉树
[url=http://www.programfan.com/club/showbbs.asp?id=152988]http://www.programfan.com/club/showbbs.asp?id=152988[/url]

二叉树各种操作算法
[url=http://www.programfan.com/club/showbbs.asp?id=73848]http://www.programfan.com/club/showbbs.asp?id=73848[/url]


[b]网状结构[/b]

图的定义与实现
[url=http://www.programfan.com/club/showbbs.asp?id=152994]http://www.programfan.com/club/showbbs.asp?id=152994
[/url]

-------------------------
不断更新、添加

板凳

[quote]程序=数据结构+算法[/quote]

[b]This is a wrong and misleading statement. [/b]

There are a lot more than that in programming, and also there are many programs which are not 数据结构+算法 oriented!!!!

3 楼

数据结构+算法 are important parts of programming, but does not equal or are not equivalent to programming!!!!

You need to learn a lot more than 数据结构+算法!!!!!!!!!!!

4 楼

来晚了,   顶下`  希望多写些 数据结构和算法的文章  写的不错

5 楼

谢谢你  我相信有你在我的数据结果会有很大的提高的。非常感谢

6 楼

请问这句是不是有语法问题呀?BOOL InitList(LPDList *pl)
我运行时就是这样提示我的?
请多多指教

7 楼

hao

8 楼

哪个好心人帮我可以写一个线性表的建立与操作程序?
我会非常的感谢

9 楼

支持
很有心得

10 楼


拿本离散数学书看看 或许更好

我来回复

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