数据结构:相互之间存在一种或多种特定关系的数据元素的集合。
数据的存储结构分为:顺序存储结构,链式存储结构
数据的逻辑结构分为:集合结构,线性结构(一对一),树形结构(一对多),图形结构 (多对多)
算法的特性:输入,输出,有穷性,确定性,可行性
算法的基本要求:正确性,可读性,健壮性,时间复杂度,空间复杂度
线性结构:数组,栈,队列,单链表,循环链表,双链表,递归,排序算法
头指针和头结点异同:
链表中第一个结点的存储位置叫做头指针。
静态列表;用数组描述的链表。每个元素由两个数据域组成,包括data和cur,如图所示:
栈与队列:
栈是限定仅在表尾进行插入和删除操作的线性表。
队列是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。(FIFO)
两栈共享空间(相同数据类型)
串:
串是由零个或多个字符组成的有限序列,又名字符串。
KMP模式匹配算法
树:
树(Tree)是n(n0)个结点的有限集。n=0时称为空树。在任意一棵非空树中:
- 有且仅有一个特定的称为根(Root)的结点;
- 当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1、T2、……、Tm,其中每一个集合本身又是一棵树,并且称为根的子树(SubTree)。
如果将树中结点的各子树看成从左至右是有次序的,不能互换的,则称该树为有序树,否则称为无序树。
森林(Forest)是m(m>0)棵互不相交的树的集合。
树的存储结构的表示法:双亲表示法、孩子表示法、孩子兄弟表示法。
特殊二叉树:
- 斜树:所有的结点都只有左子树的二叉树叫做左斜树。所有的结点都是只有右子树的二叉树叫做右斜树。两者统称为斜树。
- 满二叉树:在一棵二叉树中,如果所有分支结点都存在左子树和右子树,并且所有叶子都在同一层上,这样的二叉树称为满二叉树。
- 完全二叉树:对一棵具有n个结点的二叉树按层序编号,如果编号为1(1
i
n)的结点与同样深度的满二叉树中编号为i的结点在二叉树中位置完全相同,则这颗二叉树称为完全二叉树。
二叉树性质:
- 在二叉树的第i层上至多有
个结点(i
1)。
- 深度为k的二叉树至多有
-1个结点(k
1)。
- 对任何一棵二叉树T,如果其终端结点数为n0,度为2的结点数为n2,则
=
+1。终端结点数就是叶子结点数。
- 具有n个结点的完全二叉树的深度为
(
表示不大于x的最大整数)。(特性2的反推)
- 如果对一棵有n个结点的完全二叉树(其深度为
)的结点按层序编号(从第1层到第
层,每层从左到右),对任一结点i(1
i
n)有:
1.如果i=1,则结点i是二叉树的根,无双亲;如果i>1,则其双亲是结点[i/2]。
2.如果2i>n,则结点i无左孩子(结点i为叶子结点);否则其左孩子是结点2i。
3.如果2i+1>n,则结点i无右孩子;否则其右孩子是结点2i+1。
二叉树的存储结构:
- 顺序存储结构:一般只用于完全二叉树。
- 二叉链表:
二叉树遍历方式:
- 前序遍历,遍历顺序为:ABDGHCEIF
- 中序遍历,遍历顺序为:GDHBAEICF
- 后序遍历,遍历顺序为GHDBIEFCA
- 层序遍历,遍历顺序为ABCDEFGHI