内存和外存
1.1.1 学习数据结构的必要性
我们知道,虽然每个人都懂得英语的语法与基本类型,但是对于同样的题目,
每个人写出的作文,水平却高低不一。
程序设计也和写英语作文一样,虽然程序员都懂得语言的语法与语义,但是对于同样的问题,程序员写出来的程序不一样。
有的人写出来的程序效率很高,有的人却用复杂的方法来解决一个简单的问题。
只有多思索、多练习,才能提高自己的程序设计水平;否则,书看得再多,提高也不大。记得刚学程序设计时,常听人说程序设计水平要想提高,
最重要的是多看别人写的程序,多去思考问题。从别人写的程序中,我们可以发现效率更高的解决方法;
1、 数据(Data)
数据是外部世界信息的载体,
2、 数据元素(Data Element)和数据项(Data Item) 数据项有时也称为字段(Field)或域(Domain)。
3、 数据对象(Data Object)
数据对象是性质相同的数据元素的集合, 是数据的一个子集。例如,整数数
据对象是{0,±1,±2,±3,…},字符数据对象是{a,b,c,…}。
4、 数据类型(Data Type)
数据类型可分为两类:一类是非结构的原子类型,如 C#语言中的基本类型
(整型、实型、字符型等);另一类是结构类型,它的成分可以由多个结构类型
组成,并可以分解。结构类型的成分可以是非结构的,也可以是结构的。例如,
C#语言中数组的成分可以是整型等基本类型,也可以是数组等结构类型。
5、 数据结构(Data Structure)
数据结构是相互之间存在一种或多种特定关系的数据元素的集合。在任何问
题中,数据元素之间都不是孤立的,而是存在着一定的关系,这种关系称为结构
(Structure)。根据数据元素之间关系的不同特性,通常有 4 类基本数据结构:
(1) 集合(Set):如图 1.1(a)所示,该结构中的数据元素除了存在“同属于一个集
合”的关系外,不存在任何其它关系。
(2) 线性结构(Linear Structure):如图 1.1(b)所示,该结构中的数据元素存在着一
对一的关系。
(3) 树形结构(Tree Structure):如图 1.1(c)所示,该结构中的数据元素存在着一对
多的关系。
(4) 图状结构(Graphic Structure):如图 1.1(d)所示,该结构中的数据元素存在着
多对多的关系。
人们越来越重视数据结构,认为程序设计的实质是确定数据结构,加上设计一个好
的算法,这就是人们常说的“程序=数据结构+算法”。 下面只从算法的特性、算法的评价标准和算法的时间复杂度等三个
方面进行介绍。
3、 健壮性(Robustness)。一个算法应该具有很强的容错能力,当输入不合法的数
据时,算法应当能做适当的处理,使得不至于引起严重的后果。健壮性要求表明
算法要全面细致地考虑所有可能出现的边界情况和异常情况,并对这些边界情况
和异常情况做出妥善的处理,尽可能使算法没有意外的情况发生。