基本数据结构
线性表:仅存在线性关系,每个元素只有一个直接前驱和一个直接后继。
树:有明显的层次关系,每个元素只能和上一层的一个元素相关,但可以和 下一层的多个元素相关。
图:元素间的关系是任意的,每个元素可以有多个前驱和多个后继。
线性表
顺序表
链表
栈:只在栈顶进出。
顺序栈
链栈队列:只在队尾插入,只在队头删除
顺序存储
链表存储
树
树的重要术语:
父节点
孩子节点
兄弟节点
层次:根节点层次为1
节点的深度:节点所在的层次
树的高度(深度):树中最大层次数
度:节点拥有的子树数目
叶子节点
森林:互不相交的树的集合
二叉树
满二叉树:深度为k时,节点数为 2k−1
完全二叉树:将满二叉树从上到下,从左到右一次编号,如果一个二叉树中每一个节点都能与对应深度的满二叉树编号一一对应,则是完全二叉树。树的存储结构
顺序存储结构——双亲表示法
每个节点只记录:数据、双亲节点的编号
链式存储结构——孩子表示法
每个节点记录:数据、指针(指针中包括孩子节点的编号和指向下一个孩子节点的类似指针)
链式存储结构——双亲孩子表示法
双亲表示法和孩子表示法的结合
链式存储结构——孩子兄弟表示法
每一个节点都记录:指向第一个孩子节点的指针、数据、指向第一个兄弟节点的指针
最优二叉树(哈夫曼树)
基本概念:
路径
路径长度:路径经过的边的个数
带权路径长度:路径长度与该节点的权的乘积。
树的带权路径长度:所有叶子节点的带权路径长度之和,记为WPL
哈夫曼树:用n个权值构造一个树的带权路径长度WPL最小的树。最优二叉搜索树
构造一棵最优二叉搜索树,应将查找概率高的节点靠近根结点,这种设计思想与哈夫曼树的构造思想相似,但是最优二叉搜索树所有结点的左右顺序(中序遍历顺序)不能变化,所以无法像构造哈夫曼树的算法那样一味地把查找概率高的结点往上移。
图
图的主要术语
邻接点和相关边
路径和回路
权、网
连通和生成树图的存储结构
邻接矩阵
邻接表:每一个节点记录:下标、数据、指针(指针中记录下一个节点的下标、次下一个节点下标的指针)
逆邻接表
十字链表:邻接表和逆邻接表的结合。
邻接多重表(无向图)