8、串的线性存储结构和基本运算的实现:串是在程序中比较常见的线性存储结构,也就是用一个连续的存储空间把串的每一个字符按照一定顺序存储起来。所以,在定义一个串之前,我们得先申请一个足够可以容纳字符串的空间。
(1)串是一种特殊的线性表,其特征体现在数据元素是一个字符
(2)字符串的长度不能为0
(3)字符串是数据元素都为字符的一种线性表
9、数组:所谓数组,是有序的元素序列。
(1)如何理解元素:<1>简单说就是存放在每个格中的内容(值)
<2>在C、Java等强类型语言中,一讲到内容(值),就必须与类型挂钩,因此我们常见到int a[10]; int[10] a;
(2)零矩阵:内部元素全部为0,一般用Omxn表示
方阵:对于行数和列数相等的矩阵
对角矩阵:方阵A中的元素aiJ=0(i不等于j)时,A是一个对角矩阵
单位矩阵:对角矩阵A的元素aii=1时,A称为n阶单位矩阵,记做【n或1n】
上/下三角形矩阵:主对角线以下/上元素全为0的矩阵
行/列矩阵:矩阵中只有一行/一列元素的矩阵
(3)特殊矩阵的压缩储存
若一个n阶方阵A中的元素满足aij=aji(0≤i,j≤n-1),则称A为n阶对称矩阵。即在对称矩阵中,以主对角线a00,a11,…,an-1n-1,为轴线的对称位置上的元素值相等。因此,只需为每一对对称元素分配一个存储单元即可,这样n阶矩阵中的n×n个元素就可以被压缩到n(n+1)/2个元素的存储空间中去。
若以行优先顺序存储的对称矩阵为例。假设以一维数组 S[n(n+1)/2]作为n阶对称矩阵A的存储结构,A中的任意一个元素A[i][j]与一维数组中的第k个元素S[k]相对应。其中k与i、j的对应公式如下。
对于任意一组下标(i,j),均可在一维数组S中找到其相应的矩阵元素aij;反之,对所有的k=0,1,2,…,n(n+1)/2 -1,都能确定在S[k]中的元素在对称矩阵中的下标位置(i,j)。因此,S[n(n+1)/2]可以实现阶对称矩阵的压缩存储。其压缩存储的结构如下图所示。
三角矩阵的压缩存储
三角矩阵分为上三角矩阵和下三角矩阵。下三角矩阵是指矩阵的主对角线(不包括主对角线)上方的元素的值均为0;上三角矩阵是指矩阵的主对角线(不包括主对角线)下方的元素的值均为0,如图下所示。
①下三角矩阵的压缩存储
与对称矩阵的压缩存储类似,利用下三角矩阵的规律,用一维数组B存放下三角矩阵中的元素。
假设A为一个下三角矩阵,A中任意一个元素a,经过压缩存储后,与一维数组B的下标k之间的关系为:
其中,i为行下标,为列下标。
②上三角矩阵压缩存储
对于上三角矩阵,采用以列为主序存放上三角矩阵元素的方法比较方便。
假设A是一个上三角矩阵,A中任意一个元素a,经过压缩存储后,与一维数组B的下标k之间的关系为:
其中,i为行下标,j为列下标。
对角矩阵的压缩存储
对角矩阵是指矩阵的所有非零元素都集中在以主对角线为中心的带状区域中,即除主对角线上和直接在主对角线上、下方若干条对角线上的元素之外,其余元素皆为零。这样的矩阵称为半带宽为d的带状矩阵(带宽为2d+1),d为直接在对角线上、下方不为0的对角线数。对于n阶2d+1对角矩阵,只需存放对角区域内n(2d+1)-d(d+1)个非零元素。为了计算方便,认为每一行都有2d+1个元素,若少于2d+1个元素,则添零补足。假设以一维数组S[n(2d+1)]作为对角矩阵的存储结构,则对角矩阵中每一个元素的存储地址计算公式如下:
10、树型结构是一种应用十分广泛的非线性结构,客观世界广泛存在。
树的定义:树是由n(n大于或等于0)个节点组成的有限集合T
如果n=0,称为空树
如果n>0,则满足<1>有一个特定的称之为根的节点,它只有直接后继,但没有直接前驱;
<2>除根以外的其它节点划分为m(m>0)个互不相交的有限集合T1,T2、、、,Tm,每个集合又是一棵树,并且称之为根的子树,每棵子树的根结点有且仅有一个直接前驱,但可以有0个或多个直接后续。
11、树的其它表示方法:a、集合包含关系文氏图法 b、广义表法(WIndows文件系统)
树的基本术语:节点:包含一个数据元素及若干个指向其子树的分支
节点的度:节点的子树的个数
树的度:树中节点度的最大值
叶子:度为零的节点
分支:度不为零的节点
孩子:某节点的个子树的根
双亲:该节点的直接前驱节点
有序树和无序树:如果树中每个节点的各个子树是从左到右有次序
森林:m(m>=0)根互不相交的有限集合
树的深度:树中的所有节点的做大层数,也称高度
12、二叉树的定义:二叉树是树结构的一种最典型、最常用的结构,处理起来比一般树简单,而且树也可以很容易地转化成二叉树
二叉树是由n(n>=0个节点的有限集合BT,它或者是空集,或者由一个根节点和两棵分别称为左子树和右子树的互不相交的二叉树组成)
二叉树的性质:<1>性质1在二叉树的第i层上至多有2的i次方-1个节点
用归纳法可证明此性质
证明:当i=1时,是二叉树的第一层,只有一个根节点,而2的i-1次方=2的零次方=1
假设对所有的j(1小于等于j小于i)命题成立,即第i层上至多有2j-1次方个节点,那么可以证明j=1时命题成立
<2>性质2深度(高度)为K的二叉树至多有2k次方-1(k大于等于1)个节点
证明:深为K的二叉树的最大节点数之和,根据性质1,最大节点数为
2的0次方+2的一次方+、、、2的k减1次方=2的k次方-1
<3>性质3具有n个结点的完全二叉树的深度为/log2n/+1