主题:数据结构篇
rickone
[专家分:15390] 发布于 2006-04-01 11:44:00
数据结构篇
为什么说程序=数据结构+算法?程序可以看成处理数据的一个过程,而数据形式各种各样,所以非常有必要把数据以及数据间的关系搞清楚,而这正是数据结构。
按我的理解,数据结构就是图的结构,一般的数据结构书都是从线性表开始,然后到树,最后才讲图,我觉得应该先说图。
什么是图?定义为图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个回复)
沙发
rickone [专家分:15390] 发布于 2006-04-01 11:45:00
[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]
-------------------------
不断更新、添加
板凳
justforfun626 [专家分:18460] 发布于 2006-04-01 12:38:00
[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 楼
justforfun626 [专家分:18460] 发布于 2006-04-01 12:42:00
数据结构+算法 are important parts of programming, but does not equal or are not equivalent to programming!!!!
You need to learn a lot more than 数据结构+算法!!!!!!!!!!!
4 楼
wbyoulove [专家分:4830] 发布于 2006-04-17 23:09:00
来晚了, 顶下` 希望多写些 数据结构和算法的文章 写的不错
5 楼
tossboy [专家分:160] 发布于 2006-04-27 20:18:00
谢谢你 我相信有你在我的数据结果会有很大的提高的。非常感谢
6 楼
tossboy [专家分:160] 发布于 2006-04-27 20:29:00
请问这句是不是有语法问题呀?BOOL InitList(LPDList *pl)
我运行时就是这样提示我的?
请多多指教
8 楼
碧海精灵 [专家分:0] 发布于 2006-06-18 15:03:00
哪个好心人帮我可以写一个线性表的建立与操作程序?
我会非常的感谢
9 楼
36336985 [专家分:0] 发布于 2006-07-14 09:52:00
支持
很有心得
10 楼
xirullc [专家分:0] 发布于 2006-07-15 18:44:00
拿本离散数学书看看 或许更好
我来回复