《大话数据结构》笔记

来源:互联网 发布:windows apache 启动 编辑:程序博客网 时间:2024/05/16 10:51

第一章

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.双亲表示法、孩子表示法、双亲孩子表示法、孩子兄弟表示法


0 0
原创粉丝点击