1.数组的定义
和线性表一样,所有的数据元素都必须属于同一数据类型。当n=1,n维数组就退化为定长的线性表。数组一旦被定义,它的维度
和维届就不再改变。
2.矩阵的压缩存储
矩阵中有许多值相同的元素或者是零元素。有时为了节省存储空间,对这类矩阵进行压缩存储。所谓的压缩存储是指:为多个值相同的元
只分配一个存储空间;对零元不分配存储空间。
假设值相同的元素或者是零元素在矩阵中的分布有一定的规律,则我们称此类矩阵为特殊矩阵;反之称为稀疏矩阵。
1.特殊矩阵
若n阶矩阵A中的元满足下述性质:
Aij = Aji 1<=i,j<=n
则称为n阶对称矩阵。
对于对称矩阵,我们可以为每一个对称元分配一个存储空间,则可以将n^2个元压缩到n(n+1)/2个元的空间中。
假设以一维数组sa[n(n+1)/2]作为n阶对称矩阵A的存储结构,则sa[k]和矩阵元素aij之间存在一一对应的关系:
k = i(i-1)/2 + j - 1 // 当i>=j
或k = j(j-1)/2 +i - 1 //当i<j
对于任意给定一组下标(i,j),均可在sa中找到矩阵元aij,反之,对所有的k=0,1,2,3...,n(n+1)/2-1,都能确定sa[k]中的元在矩阵中的位置(i,j),
由此,称sa[n(n+1)/2] 为n对称矩阵A的压缩存储。
所谓的下(上)三角矩阵是指矩阵的上(下)三角(不包括对角线)中的元均为常数c或者零的n阶矩阵。则除了和对称矩阵一样,只存储其下(上)三角中的元之外,
再加上一个存储常数c的存储空间即可。
对角矩阵:在这种矩阵中,所有的非零元都几种在以对角线为中心的带状区域中。即除了主对角线上和直接在对角线上,下方若干条对角线上的元之外,其他
所有的元皆为零。
在所有这些我们称之为特殊矩阵的矩阵中,非零元的分布都有一个明显的规律,从而使得我们可以将其压缩到一维数组中,并找到每个非零元在一维数组中的
对应关系。
然而,在实际应用中我们还经常遇到另一类矩阵,其非零元较零元少,且分布没有一定的规律,我们称之为稀疏矩阵。
2.稀疏矩阵
假设在 m*n 的矩阵中,有t个元素不为零。另 x = t/(m*n),称x为矩阵的稀疏因子,通常认为 x<=0.05 时称为稀疏矩阵。
如何进行稀疏矩阵的压缩存储呢?
按照压缩存储的概念,只存储稀疏矩阵的非零元。因此,除了存储非零元的值之外,还必须同时记下它所在的行和列的位置(i,j)。反之,在一个三元组(i,j,aij)
唯一确定了矩阵A的一个非零元。由此,稀疏矩阵可由表示非零元的三元组及其行列数唯一确定。
1.三元组顺序表
假设以顺序存储结构来表示三元组表,则可得稀疏矩阵的一种压缩存储方式---我们称之为三元组顺序表。
三元组顺序表又称为有序的双下标法,它的特点是,非零元在表中按行序有序存储,因此便于进行一次顺序处理的矩阵运算。
2.行逻辑链接的顺序表
为了便于随机存取任意一行的非零元,则需知道每一行的第一个非零元在三元组表中的位置。为此,可将上节快速转置矩阵中的算中创建的,指示'行'信息的辅助数组cpot
固定在稀疏矩阵的存储结构中。称这种'带行链接信息'的三元组表为行逻辑链接的顺序表。
3.十字链表
3.广义表的定义
广义表是线性表的推广。广义表一般记作: LS = (a1,a2,...,an)
其中,LS 是广义表的名称,n是它的长度。在线性表的定义中,ai只限于是单个元素。而在广义表中,ai可以是单个元素,也可以是广义表,分别称为广义表LS的原子和子表。
4.m元多项式的表示
一元多项式用线性表表示,m元多项式用广义表表示。
5.广义表的递归算法
递归定义的基本项描述了一个或几个递归的过程的终结状态。递归的过程,必定能够经过有限层次的递归而终止。所谓的终结状态指的是不需要继续递归而可直接求解的状态。
递归定义的归纳项描述了如何实现从当前状态到终结状态的转换。
递归设计的实质是:当一个复杂的问题可以分解为若干子问题来处理时,其中某些子问题与原问题有相同的特征属性,则可利用和原问题相同的分析处理方法;反之,这些子问题
解决了,原问题也迎刃而解了。递归的归纳项就是描述这种原问题和子问题之间的转换关系。