绪论
第一个很有意义,又没什么意义的问题:什么是数据结构??
其实,数据结构在计算机科学界至今没有标准的定义。个人根据各自的理解的不同而有不同的表述方法:
- Sartaj Sahni在他的《数据结构、算法与应用》一书中称:
“数据结构是数据对象,以及存在于该对象的实例合组成实例的数据元素之间的各种联系。这些联系可以通过定义相关的函数来给出。”
他将数据对象(data object)定义为“一个数据对象是实例或值的集合”。
- Clifford A.Shaffer在《数据结构与算法分析》一书中的定义是:“数据结构是 ADT(抽象数据类型Abstract Data Type) 的物理实现。”
- 《算法导论》一书中定义:“数据结构是存储和组织数据的一种方式,以便于对数据进行访问和修改”
其实,究竟什么是数据结构这个问题
真的并不是很重点。您将会在进一步学习它之后,有自己对它的一种理解。
我们更应该关心的是,学习数据结构
能为我们解决什么样问题?它给我们
带来什么样的好处?
第一个问题,在程序里面,有一个家族,如果您知道一个人的名字,想知道他老爸是谁那么应该怎么做?
其中一个答案是,创建一个结构体,里面包含了本人的名字和他老爸的名字,这样,当我找到这个人的名字的时候,相应的就可以知道他老爸是谁了,
可是这样好像很浪费空间啊,每有一个老爸就要多一份存储名字的空间,
一个家族里面有很多的老爸啊,
那么我们可以换另外一种方法,我们不直接用老爸的名字,而是使用一个指向老爸包含名字的结构的指针,同样我们能够找到他老爸的名字,
如果您这样做了,那么您已经在使用数据结构了!
程序设计实际 = 好的结构 + 好的算法!
数据结构就是一门为您提供好的结构和好的算法的学科!
简单的讲,学习数据结构,您就可以编写更好的程序!
数据结构相关的一些概念和术语:
- 数据 :这个很好理解吧,所有计算机能处理的‘符号’都是数据。例如,整数、浮点数、图像、声音等;
- 数据元素 :数据的基本单位,计算机对其作为整体看待的对象。例如,一本书(包括,书名、作者名等)
- 数据项 :数据元素的最小单位,根据数据元素而定,对于书,书名是数据项。而对于名字这个数据元素,笔画是数据项;
- 数据对象 :性质相同的数据元素的集合,是数据的一个子集。例如,整数数据对象是集合N= {...-2,-1,1,2...}
- (数据)结构 :数据元素之间存在的关系;
- 数据类型 :一个值的集合和定义在这个值集上的一组操作的总称;
- 抽象数据类型:一个数学模型以及定义在该模型上的一组操作;
算法的设计要求:
推荐:《编程修养》,作为一个好的程序员,当然必须得有好的编程习惯!(PS:在我上传的资源里面有)
效率和存储量在一般情况下不好兼得,至于优先考虑哪个,要看具体的应用了。
要学会简单衡量(具体的在后面讨论):
最后,我想说一句,数据结构真的不好学,就严蔚敏老师那本300页的数据结构(C语言版),都足足够看一两个月了。
但是,如果您想作为一名合格的程序员,相信我,学好的它吧,不管有多难!
(
在C++的STL中,很多数据结构已经实现了,例如:表list、堆stack、队列queue)