文档介绍:: .
循环队列:s=0 表示队列空,s=1 且 front=rear 表示队列满
1.5 线性链表
数据结构中的每一个结点对应于一个存储单元,这种存储单元称为存储结点,简称结点。
结点由两部分组成:
(1)用于存储数据元素值,称为数据域;
(2)用于存放指针,称为指针域,用于指向前一个或后一个结点。
在链式存储结构中,存储数据结构的存储空间可以不连续,各数据结点的存储顺序与数据元素之间的逻辑
关系可以不一致,而数据元素之间的逻辑关系是由指针域来确定的。
链式存储方式即可用于表示线性结构,也可用于表示非线性结构。
线性链表,HEAD 称为头指针,HEAD=NULL(或 0)称为空表,如果是两指针:左指针(Llink)指向前件
结点,右指针(Rlink)指向后件结点。
线性链表的基本运算:查找、插入、删除。
1.6 树与二叉树
树是一种简单的非线性结构,所有元素之间具有明显的层次特性。
在树结构中,每一个结点只有一个前件,称为父结点,没有前件的结点只有一个,称为树的根结点,简称
树的根。每一个结点可以有多个后件,称为该结点的子结点。没有后件的结点称为叶子结点。
在树结构中,一个结点所拥有的后件的个数称为该结点的度,所有结点中最大的度称为树的度。树的最大
层次称为树的深度。
二叉树的特点:
(1)非空二叉树只有一个根结点;
(2)每一个结点最多有两棵子树,且分别称为该结点的左子树与右子树。
二叉树的基本性质:
(1)在二叉树的第 k 层上,最多有 2k-1(k≥1)个结点;(2)深度为 m 的二叉树最多有 2m-1 个结点;
(3)度为 0 的结点(即叶子结点)总是比度为 2 的结点多一个;
(4)具有 n 个结点的二叉树,其深度至少为[log2n]+1,其中[log2n]表示取 log2n 的整数部分;
(5)具有 n 个结点的完全二叉树的深度为[log2n]+1;
(6)设完全二叉树共有 n 个结点。如果从根结点开始,按层序(每一层从左到右)用自然数 1,2,…,n
给结点进行编号(k=1,2….n),有以下结论:
①若 k=1,则该结点为根结点,它没有父结点;若 k>1,则该结点的父结点编号为 INT(k/2);
②若 2k≤n,则编号为 k 的结点的左子结点编号为 2k;否则该结点无左子结点(也无右子结点);
③若 2k+1≤n,则编号为 k 的结点的右子结点编号为 2k+1;否则该结点无右子结点。
满二叉树是指除最后一层外,每一层上的所有结点有两个子结点,则 k 层上有 2k-1 个结点深度为 m 的满二
叉树有 2m-1 个结点。
完全二叉树是指除最后一层外,每一层上的结点数均达到最大值,在最后一层上只缺少右边的若干结点。
二叉树存储结构采用链式存储结构,对于满二叉树与完全二叉树可以按层序进行顺序存储。
二叉树的遍历:
(1)前序遍历(DLR),首先访问根结点,然后遍历左子树,最后遍历右子树;
(2)中序遍历(LDR),首先遍历左子树,然后访问根结点,最后遍历右子树;
(3)后序遍历(LRD)首先遍历左子树,然后访问遍历右子树,最后访问根结点。
1.7 查找技术
顺序查找的使用情况:
(1)线性表为无序表;
(2)表采用链式存储结构。
二分法查找只适用于顺序存储的有序表,对于长度为 n 的有序线性表,最坏情况只需比较 log2