【数据结构】笔记
学习浙江大学【数据结构】做的笔记。
第二讲 线性结构
2.1 线性表及其实现
多项式表示问题的启示:
1.同一个问题可以有不同的表示(存储)方法
2.有一类共性问题:有序线性序列的组织和管理
线性表(Linear List):由同类型 数据元素 构成 有序序列 的线性结构
- 表中元素个数称为线性表的 长度
- 线性表没有元素时,称为 空表
- 表起始位置称为 表头,表结束位置称为 表尾
线性表的基本操作:
- 创建:创建一个空表
- 查找:查找某个元素是否在线性表中
- 插入:在某个位置插入一个元素
- 删除:删除某个位置上的元素
广义表(Generalized List)
- 广义表是线性表的推广
- 对于线性表而言,n 个元素都是基本的单元素
- 广义表中,这些元素不仅可以是单元素也可以是另一个广义表
多重链表
多重链表:链表中的节点可能同时隶属于多个链
- 多重链表中节点指针域会有多个,如前面例子包含了 Next 和 SubList 两个指针域
- 但包含两个指针域的链表并不一定是多重链表,比如 双向链表不是多重链表
多重链表有广泛的用途:
基本上如树、图这样相对复杂的数据结构都可以采用多重链表方式实现存储
2.2 堆栈
后缀表达式
后缀表达式求值策略:从左向右“扫描”,逐个处理运算数和运算符号
堆栈的抽象数据类型描述
堆栈(Stack):具有一定操作约束的线性表,只在一端(栈顶,Top)做插入、删除
- 插入数据:入栈(Push)
- 删除数据:出栈(Pop)
- 后入先出:Last In First Out(LIFO)
2.3 队列
队列(Queue):具有一定操作约束的线性表。插入和删除操作:只能在一端插入,而在另一端删除。
- 数据插入:入队
- 数据删除:出队
- 先来先服务
- 先进先出:FIFO
第三讲 树(上)
3.1 树与树的表示
查找:根据某个给定关键字 K, 从集合 R 中找出关键字 K 相同的记录
- 静态查找:集合中记录是固定的,没有插入和删除操作,只有查找
- 动态查找:集合中记录是动态的,除查找,还可能发生插入和删除
树的一些基本术语
- 结点的度(Degree):节点的字树个数
- 树的度:树的所有节点中最大的度数
- 叶节点(Leaf):度为 0 的节点
- 父节点(Parent):有子树的节点是其子树的根节点的父节点
- 子节点(Child):若 A 结点是 B 结点的父节点,则称 B 结点是 A 结点的子结点;子结点也称孩子结点
- 兄弟节点(Sibling):具有同一父节点的各结点彼此是兄弟节点
- 路径和路径长度:从结点 n1 到 nk 的路径为一个节点序列 n1,n2,n3,……,nk, ni 是 ni+1 的父结点。路径所包含边的个数为路径的长度。
- 祖先节点(Ancestor):沿树根到某一结点路径上的所有节点都是这个结点的祖先节点。
- 子孙结点(Descendant):某一结点的子树中的所有结点是这个结点的子孙。
- 结点的层次(Level):规定根节点在 1 层,其它任一节点的层数是其父结点的层数加 1 。
- 树的深度(Depth):树种所有结点中的最大层次是这棵树的深度。
3.2 二叉树及其存储结构
二叉树 T:一个有穷的结点集合。
- 这个集合可以为空。
- 若不为空,则它是由根结点和称为其左子树 TL 和右字树 TR 的两个不相交的二叉树组成。
二叉树几个重要性质
- 一个二叉树第 i 层的最大结点数为: 2i-1,i ≥ 1
- 深度为 k 的二叉树有最大节点总数为: 2k-1,k ≥ 1
- 对任何非空二叉树 T ,若 n0 表示叶节点个数、 n2 是度为 2 的非叶节点个数,那么两者满足关系 n0 = n2 + 1 。
3.3 二叉树的遍历
先序遍历
遍历过程为:
1.访问根节点
2.先序遍历其左子树
3.先序遍历其右字树
中序遍历
遍历过程为:
1.中序遍历其左子树
2.访问根节点
3.中序遍历其右字树
后序遍历
遍历过程为:
1.后序遍历其左子树
2.后序遍历其右字树
3.访问根节点
先序、中序和后序遍历过程:遍历过程中经过节点的路线一样,真是访问各结点的时机不同。
第四讲 树(中)
4.1 二叉搜索树
二叉搜索树(BST, Binary Search Tree),也称二叉排序树或二叉查找树。
二叉搜索树:一棵二叉树,可以为空:如果不为空,满足以下性质:
1.非空左子树的所有键值小于其根节点的键值。
2.非空右字树的所有键值大于其根节点的键值。
3.左、右字树都是二叉搜索树。
第五讲 树(下)
5.1 堆
优先队列(Priority Queue):特殊的“队列”,取出元素的顺序是依照元素的优先权(关键字)大小,而不是元素进入队列的先后顺序。
5.2 哈夫曼树与哈夫曼编码
哈夫曼树的特点:
- 没有度为 1 的结点;
- n 个叶子结点的哈夫曼树共有 2n - 1 个结点;
- 哈夫曼树的任意非叶节点的左右字树交换后仍是哈夫曼树;
第六讲 图(上)
6.1 什么是图
什么是“图”(Graph)
- 表示“多对多”的关系
- 包含:
- 一组顶点:通常用 V(Vertex)表示顶点集合
- 一组边:通常用 E(Edge)表示边的集合