一、数据结构
1、程序设计的实质是数据表示和数据处理。数据要能被计算机处理,首先必须能够存储在计算机的内存中,这项任务称为数据表示,其核心就是数据结构;一个实际问题的求解必须满足各项处理要求,这项任务称为数据处理,其核心是算法。
程序 = 数据结构 + 算法;
2、数据:是信息的载体,在计算机科学中是指能输入到计算机中并能被计算机程序识别和处理的符号集合。可以将数据分为两大类:一类是整数、实数等数值数据;另一类是文字、声音、图像和图形等非数值数据。而非数值数据类型是数据结构的研究对象。
3、数据元素是数据的基本单位,构成数据元素的不可分割的最小单位称为数据项。
4、数据结构:是指相互之间存在一定关系的数据元素的集合。
5、数据结构分为逻辑结构、存储结构以及结构的运算。
6、逻辑结构:是指数据元素之间逻辑关系的整体。它在形式上是一个二元组:
Data_Structure = (D , R);
根据数据元素之间逻辑关系的不同,数据结构分为四类:
(1)集合:数据元素之间就是属于同一个集合,除此之外,没有任何关系。
(2)线性结构:数据元素之间存在着一对一的线性关系。
(3)树:数据元素之间存在一对多的层次关系。
(4)图:数据元素之间存在多对多的任意关系。
7、存储结构:又称物理结构,是数据及其逻辑结构在计算中的表示,存储结构除了存储数据元素之外,必须隐式或显式的存储数据元素之间的逻辑关系。通常分为顺序存储结构和链接存储结构。
8、结构的运算:算法的设计取决于数据(逻辑)结构,而算法的实现依赖于采用的存储结构。数据的存储结构实质上是它的逻辑结构在计算机存储器中的实现,为了全面的反映一个数据的逻辑结构,它在存储器中的映象包括两方面内容,即数据元素之间的信息和数据元素之间的关系。不同数据结构有其相应的若干运算。数据的运算是在数据的逻辑结构上定义的操作算法,如检索、插入、删除、更新和排序等。
不同的数据结构其操作集不同,但下列操作必不可缺:
ADT抽象数据类型名;抽象数据类型有两个重要特性:
(1)数据抽象,用ADT描述程序处理的实体时,强调的是其本质的特征、其所能完成的功能以及它和外部用户的接口(即外界使用它的方法)。
(2)数据封装,将实体的外部特性和其内部实现细节分离,并且对外部用户隐藏其内部实现细节。
二、常见的数据结构
1、数组 (Array)
2、栈 (Stack)
3、队列 (Queue)
4、链表 (Linked List)
5、树 (Tree)
(2)除K0外,K中的每个结点,对于关系N来说有且仅有一个前驱。
6、图 (Graph)
应用:(1)最小生成树: 利用MST性质求得,普里姆(Prim:取连接点中代价最小的结点)算法和克鲁斯卡尔(Kruskal:取所有边中代价最小的边)算法。
(2)最短路径:Dijkstra算法(利用v0到各个终点的最短路径来求得,使用邻接矩阵存储)和Floyd算法。
7、堆 (Heap)
8、散列表 (Hash)
三、算法基本概念
1、 算法:是对特定问题求解步骤的一种描述,是指令的有限序列。
2、 5个必要特征:输入、输出、有穷性、确定性、可行性。
3、好的算法除了五大特征外,还需满足:正确性、鲁棒性、简单性、抽象分级、高效性。
4、描述算法的方式: 自然语言、流程图、程序语言、伪代码。
5、同一问题可用不同算法解决,而一个算法的质量优劣将影响到算法乃至程序的效率。算法分析的目的在于选择合适算法和改进算法。一个算法的评价主要从 时间复杂度和 空间复杂度来考虑。
(1)时间复杂度
(2)空间复杂度