MOOC浙大-数据结构笔记

“线性表(Linear List)”:由同类型数据元素构成有序序列的线性结构
 表中元素个数称为线性表的长度
 线性表没有元素时,称为空表
 表起始位置称表头,表结束位置称表尾
用处举例:多项式

广义表(Generalized List)
 广义表是线性表的推广
 对于线性表而言, n个元素都是基本的单元素;
 广义表中,这些元素不仅可以是单元素也可以是另一个广义表。

多重链表: 链表中的节点可能同时隶属于多个链
 多重链表中结点的指针域会有多个,如前面例子包含了Next和SubList两个指针域;
 但包含两个指针域的链表并不一定是多重链表,比如在双向链表不是多重链表。
 多重链表有广泛的用途:基本上如树、图这样相对复杂的数据结构都可以采用多重链表方式实现存储。
多重链表的使用举例:矩阵

矩阵可以用二维数组表示,但二维数组表示有两个缺陷:
 一是数组的大小需要事先确定,
 对于“稀疏矩阵 ”,将造成大量的存储空间浪费。
所以采用一种典型的多重链表——十字链表来存储稀疏矩阵

十字链表
 只存储矩阵非0元素项
    结点的数据域: 行坐标Row、列坐标Col、数值Value
 每个结点通过两个指针域, 把同行、同列串起来;
 行指针(或称为向右指针)Right
 列指针(或称为向下指针) Down
  用一个标识域Tag来区分头结点和非0元素结点:
 头节点的标识值为“Head”,矩阵非0元素结点的标识值为“Term”。

堆栈(Stack) : 具有一定操作约束的线性表
只在一端(栈顶, Top)做 插入、删除
 插入数据: 入栈(Push)
 删除数据: 出栈(Pop)
 后入先出: Last In First Out(LIFO


队列(Queue): 具有一定操作约束的线性表
 插入和删除操作:只能在一端插入,而在另一端删除。
数据插入: 入队列(AddQ)
 数据删除: 出队列(DeleteQ)
先来先服务
先进先出: FIFO

查找(Searching): 根据某个给定关键字K ,从集合R中找出关键字与K相同的记录
静态查找:集合中记录是固定的
 没有插入和删除操作,只有查找
动态查找:集合中记录是动态变化的
 除查找,还可能发生插入和删除

静态查找
方法1:顺序查找
顺序查找算法的时间复杂度为O(n)。
方法2:二分查找(Binary Search)
二分查找算法具有对数的时间复杂度O(logN)

树(Tree) : n(n≥0)个结点构成的有限集合。
  当n=0时,称为空树;
  对于任一棵非空树(n> 0),它具备以下性质:
 树中有一个称为“根(Root) ”的特殊结点, 用 r 表示;
 其余结点可分为m(m>0)个互不相交的有限集T1, T2, ... , Tm,其中每个集合本身又是一棵树,称为原来树的“子树(SubTree)”

树的特点:
 子树是不相交的;
 除了根结点外, 每个结点有且仅有一个父结点;
 一棵N个结点的树有N-1条边。

树的一些基本术语
1. 结点的度(Degree):结点的子树个数
2. 树的度:树的所有结点中最大的度数
3. 叶结点(Leaf): 度为0的结点
4. 父结点(Parent):有子树的结点是其子树的根结点的父结点
5. 子结点(Child):若A结点是B结点的父结点,则称B结点是A结点的子结点;子结点也称孩子结点。
6. 兄弟结点(Sibling):具有同一父结点的各结点彼此是兄弟结点。
7. 路径和路径长度:从结点n1到nk的路径为一个结点序列n1 , n2 ,… , nk , ni是 ni+1的父结点。路径所包含边的个数为路径的长度。
9. 祖先结点(Ancestor):沿树根到某一结点路径上的所有结点都是这个结点的祖先结点。
10. 子孙结点(Descendant):某一结点的子树中的所有结点是这个结点的子孙。
11. 结点的层次(Level):规定根结点在1层,其它任一结点的层数是其父结点的层数加1。
12. 树的深度(Depth) :树中所有结点中的最大层次是这棵树的深度。

二叉树T:一个有穷的结点集合。

  •  这个集合可以为空
  •  若不为空,则它是由根结点和称为其左子树TL和右子树TR的两个不相交的二叉树组成。
     

 特殊二叉树
 斜二叉树(Skewed Binary Tree)
完美二叉树(Perfect Binary Tree)或满二叉树(Full Binary Tree)
完全二叉树(Complete Binary Tree):有n个结点的二叉树,对树中结点按从上至下、从左到右顺序进行编号,编号为i(1 ≤ i ≤ n)结点与满二叉树中编号为 i 结点在二叉树中位置相同

二叉树几个重要性质
 一个二叉树第 i 层的最大结点数为: 2 i-1, i >= 1。
 深度为k的二叉树有最大结点总数为: 2 k-1, k >= 1。
 对任何非空二叉树 T,若n0表示叶结点的个数、 n2是度为2(即有2个子树)的非叶结点个数,那么两者满足关系n0 = n2 +1。

 证明:
边的总数=节点数-1=各个节点拥有的边的总和
n0+n1+n2-1=0*n0+1*n1+2*2n
=>n0=n2+1

 二叉搜索树(BST, Binary Search Tree),也称二叉排序树或二叉查找树
二叉搜索树:一棵二叉树,可以为空;如果不为空,满足以下性质:
1. 非空左子树的所有键值小于其根结点的键值。
2. 非空右子树的所有键值大于其根结点的键值。
3. 左、右子树都是二叉搜索树

查找最大和最小元素
 最大元素一定是在树的最右分枝的端结点上
 最小元素一定是在树的最左分枝的端结点上


平衡二叉树(Balanced Binary Tree)(AVL树):
空树,或者任一结点左、右子树高度差的绝对值不超过1,即|BF(T) |≤ 1

“平衡因子(Balance Factor,简称BF) : BF(T) = hL-hR,其中hL和hR分别为T的左、右子树的高度。

猜你喜欢

转载自blog.csdn.net/qq_35629563/article/details/84060797
今日推荐