1.绪论
1.1 数据结构在程序设计中的作用
通常计算机解决一个问题时,大致经过一下几个步骤:首先从具体问题当中抽象一个数学模型,然后设计一个解决这个数据模型的算法,最后编写程序,测试调整以输出结果。建数学模型的过程实质就是分析问题,从中提取操作对象,找出它们之间的关系,然后用数学的语言加以描述。有些非数值计算问题的数学模型不再是数学方程,而是像表(数据库中的表,关系库二维表之间可能有一对一,也可能有一对多,多对多)、树(阿尔法狗下棋,每落一个子都会暴力搜索出其他所有可能,寻找最优解)和图(地图软件,设计上下班路线)这样的数据结构。数据结构在这种非数值计算的问题中,研究对象和他们之间关系和操作的学科。
1.1.2 数据结构的主要内容
数据结构的研究涉猎计算机硬件、操作系统、数据库系统、编写程序等方面。数据结构这个概念的是相互之间存在一种关系或多种特定关系的数据元素的集合。
数据结构有四种基本数据结构:
- 集合:除了同属于一个集合之外没有其他关系;
- 线性结构:结构中的元素都是一对一的关系;
- 树形结构:结构中的元素都是一对多的关系;
- 图或网:结构中的元素都是多对多的关系;
数据结构还研究一些算法:
- 内存的分配和回收算法
- 查找算法
- 排序算法
1.1.3 算法设计
1.3.1 算法的五个特性
- 有穷性:一个算法应该在执行有穷步之后结束,且每一步应在又穷时间内完成。
- 确定性:每一条算法必须有确切的含义,读者理解不会有二义性。并且任何条件下,相同的输入只会得到相同的输出。
- 可行性:算法中描述的操作都是通过已经实现的基本运算执行有限次来实现的。
- 输入:一个树算法可以有零个或多个输入
- 输出:一个算法有一个或多个的输出,这些输出同输出有特定关系。
1.3.2 算法设计的要求
一个好的算法应考虑以下目标:
-
正确性:
a. 程序源文件不能有语法错误。
b. 程序对与输入的数据能得符合要求的结果。
c. 程序对于精心选择的典型、苛刻而带有刁难的数据要得出负荷要求的结果
d. 一切合法数据都应得出满足生产需要的结果。但是通常情况不太可能,数据量大的时候,难免会有意外的数据,有些ID是0开头的,有些数值用字符串存的,多了小数点,抛出异常。
-
可读性:算法首先是为了人与人的交流,一个项目你可能负责一小部分,或者一个接口,一个函数,你需要写明的你的参数列表的意义,返回值,程序功能的一些注释,多一些调试的打印。
-
健壮性:当输入非法数据时,算法也能够适当做出反应,不会产生莫名奇妙的处理,不能让程序中止,比方说上面说到的数值的情况。
-
效率与低存储的要求:算法执行效率要高,时间要短。要分析它的时间复杂度。注意内存。Java程序一般会占用CPU、内存特别高,经常需要优化。C程序内存泄露。
1.4时间复杂度和空间复杂度
1.4.1 时间复杂度
-
语句频度:该语句的执行次数
-
时间复杂度:去问题归的规模为n,算法中基本操作的次数是n的某个函数f(n),算法执行时间的增长率和f(n)的增长率相同,T(n) = O(F(n))。
1.4.2 空间复杂度:
- 一个程序执行时,除了变量和数据还会需要一些辅助空间。举例排序算法。
1.5 抽象数据类型
用固有的数据类型实现一个新的结构,用已有的操作组合成一个新的操作。

浙公网安备 33010602011771号