线性表
顺序表中插入元素,平均要移动的元素个数n/2
将两个各有n个元素的有序表归并成一个有序表,其最少的比较次数是n
创建一个单链表的时间复杂度为O(n),而建立一个有序单链表,则每生成一个新的节点时需要和已有的节点进行比较,确定合适的插入位置,所以时间复杂度为O(n^2)
顺序存储的线性表可以随机存取
栈与队列
栈
队列
栈是限定仅在表尾进行插入或删除的线性表,又称为后进先出的线性表。栈有两种存储表示,顺序表示(顺序栈)和链式表示(链栈)。栈的主要操作是进栈和出栈,对于顺序栈的进栈和出栈操作要注意判断栈满或栈空,队列是一种先进先出的线性表。它只允许在表的一端进行插入,而在另一端删除元素。队列也有两种存储表示顺序表示(循环队列)和链式表示(链队)
栈和队列的逻辑结构都和线性表一样,数据元素之间存在一对一的关系。
循环队列中少用一个元素判断队空或队满时:
队空的条件: Q.front == Q.rear
队满的条件:(Q.rear+ 1)%MAXQSIZE == Q.front
串
串是内容受限的线性表,表中元素只能存字符,这是特殊性的体现
串中的字符的数目称为串的长度
数组
地址的计算先确定主序,确定占去字符数量,
当采用下三角时地址为j(j-1)/2+i
树和二叉树
树的基本术语
1.结点的度:结点拥有的子树数量称为结点的度
2.树的度:树内各结点度的最大值,即上图 D结点的度就是此树的度
3.叶子:度为 0的节点称为叶子或终端节点
4.结点的层次和树的深度
5.森林:m棵互不相交的树的集合
二叉树的性质:
性质1:在二叉树的第i层上至多有2-1个结点(i>=1)
性质2:深度为k的二叉树至多有2k-1个结点(k>=1)
性质3:对任何一棵二叉树T,如果其终端结点数为n0,度为2的结点数为n2,则n0=n2+1
性质4:具有n个结点的完全二叉树的深度为[log2n]+1
性质5:如果对一颗有n个结点的完全二叉树(其深度为[log2n]+1)的结点按层序编号(从第1层到第[log2n]+ 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
二叉树的遍历
先序:根->左->右(中左右)
中序:左->中->右(左中右)
后序:左->右->中(左右中)
1. 先序遍历的第一个为根,中序遍历的中间为根
2. 区分左右子树
3. 循环如上操作
哈夫曼树
路径:从一个结点到另一个结点之间的分支序列
路径长度:从一个结点到另一个结点所经过的分支数目
结点的权:根据应用的需要可以给树的结点赋权值
结点的带权路径长度:从根到该结点的路径长度与该结点权的乘积
树的带权路径长度:树中所有叶子结点的带权路径之和WPL=Z"=1Wk*lk
哈夫曼树:由n个带权叶子结点构成的所有二叉树中带权路径长度最短的二叉树
图
完全图
1.无向图中任意两点之间都存在边,称为无向完全图;如G1就是无向完全图。无向完全图具有(n(n-1)/2 条边。
2.有向图中任意两点之间都存在方向向反的两条弧,称为有向完全图,有向完全图具有 n(n-1)条弧。
子图:设两个图G=(V, E)和G’=(V',E’),如果V'包含于 V且 E’包含于E,则称G’为G的子图。
顶点的度,入度,出度
1.顶点的度为以该顶点为一个端点的边的数目
2.对于无向图,顶点的边数为度,度数之和是顶点边数的两倍
3.对于有向图,入度是以顶点为终点(即箭头所指方向),出度是以顶点为起点(即箭尾巴所指方向)
4.有向图的全部顶点入度之和等于出度之和且等于边数。顶点的度等于入度与出度之和。
用邻接表表示图进行广度优先遍历时,通常借助队列来实现算法