第一章
1.程序设计的实质是对确定的问题选择一个好的数据结构,加上设计一种好的算法。
2.数据元素:是组成数据的、有一定意义的基本单位,在计算机中通常作为整体处理, 也被称为记录。一个数据元素可以自若干个数据项组成,数据项是数据不可分割的最小单位。
3.数据结构分为逻辑结构和物理结构。
4.逻辑结构分为以下四种:集合结构、线性结构、树形结构、图形结构。
5.物理结构:是指数据的逻辑结构在计算机中的存储形式。存储器主要是针对内存而言的,像硬盘、软盘、光盘等外部存俯器的数据组织通常用文件结构来描述。
6.数据的存储结构应正确反映数据元素之间的逻辑关系,如何存储数据元素之间的逻辑关系,是实现物理结构的重点和难点。
7.数据元素的存储结构形式有两种:顺序存储和链式存储。顺序存储结构:是把数据元素存放在地址连续的存储单元里,其数据间的逻辑关系和物理关系是一致的。链式存储结构:是把数据元素存放在任意的存储单元里, 数据元素的存储关系并不能反映其逻辑关系,因此需要用一个指针存放数据元素的地址。
8.逻辑结构是面向问题的,而物理结构就是面向计算机的,其基本的目标就是将数据及其逻辑关系存储到计算机的内存中。
9.数据类型就用来说明变量或表达式的取值范围和所能进行的操作。
10.抽象数据类型 (Abstract Data Type, ADT) : 是指一个数学模型及定义在该模型上的一组操作。
第二章
1.算法具有五个基本特性: 输入、输出、 有穷性、确定性和可行性。
2.确定性:算法的每一步骤都具有确定的含义, 不会出现二义性。 算法在一定条件下,只有一条执行路径,相同的输入只能有唯一的输出结果。
3.好的算法,应该具有正确性、 可读性、健壮性、 高效率和低存储量的特征。
4.一个程序的运行时间,依赖于算法的好坏和问题的输入规模。
5.用大写 O( )来体现算法时间复杂度的记法,我们称之为大O记法。一般情况下,随着 n 的增大, T(n)增长最慢的算法为最优算法。
6.要分析算法的复杂度,关键就是要分析循环结构的运行情况。
7.常用的时间复杂度所耗费的时间从小到大依次是: O(1) < O(logn) < O(n) < O(nlogn) < O(n2) < O(n3) < O(2" ) < O(n!) < O(n")
8.通常, 除非特别指定, 我们提到的运行时间都是最坏情况的运行时间。一般在没有特殊说明的情况下,都是指最坏时间复杂度。
第三章
1.可以用 C 语言的一维数组来实现线性表的顺序存储结构。顺序结构线性表的长度不能超过线性表的最大存储长度。
2.数组的长度是存放线性表的存储空间的长度,存储分配后这个量是一般是不变的。线性表的长度是线性表中数据元素的个数,随着线性表插入和删除操作的进行,这个量是变化的。由于线位表中可以进行插入和删除操作,因此分配的数组空间要大于等于当前线性表的长度。
3.线性表的第 i 个元素是要存储在数组下标为 i-1 的位置。
4.假设,每个数据元素占据c个存储单元,对于第 i 个数据元素 ai,的存储位置可以由 a1 推算得出:
LOC(ai)= LOC(a1 ) + (i-1)*c 。
5.对每个线性表位置的存入或者取出数据, 对计算机来说都是相等的时间, 也就是一个常数,存取时间性能为 O(1),我们通常把具有这一特点的存储结构称为随机存取结构。
6.线性表的顺序存储结构,在存、 读数据时,不管是哪个位置,时间复杂度都是 O(1) ; 而插入或删除时,时间复杂度都是 O(n) 。
7.对于插入或删除数据越频繁的操作,单链衰的效率优势就越是明显。
第六章树
1.当树非空时,根节点是唯一的
2.一个节点的子树的个数没有限制,但自述一定是互不相交的,即每一个孩子只能由一个双亲
3.结点拥有的子树数称为结点的度 (Degree) 。度为 0 的结点称为叶结点(Leaf) 或终端结点;度不为 0 的结点
称为非终端结点或分支结点。 除根结点之外,分支结点也称为内部结点。树的度是树内各结点的度的最大值。
4.结点的层次(Level)从根开始定义起,根为第一层, 根的孩子为第二层。树中结点的最大层次称为树的深度 (Depth)或高度
5.森林 ( Forest) 是 m (m>0) 棵互不相交的树的集合。对树中每个结点而言,其子树的集合即为森林。
6.我们又关注结点的双亲、 又关注结点的孩子、还关注结点的兄弟,而且对时间遍历要求还比较高,那么我们还可以把此结构扩展为有双亲域、长子域、 再有右兄弟域。
7.双亲表示法、孩子表示法、双亲孩子表示法、孩子兄弟表示法