数据结构二维数组求地址 数据结构第五章多维数组和广义表
数据结构第五章多维数组和广义表
第五章多维数组和广义表
多维数组
一般用顺序存储的方式表示数组 常用方式有 )行优先顺序 将数组元素按行向量排列; )列优先顺序 将数组元素按列向量排列
计算地址的函数 LOC(Aij)=LOC(Ac c )+((i c )*(d c + )+j c )*d
矩阵的压缩存储
为多个非零元素分配一个存储空间;对零元素不分配存储空间
对称矩阵
在一个n阶的方阵A中 元素满足Aij=Aji <=i j<=n ;称为对称矩阵
元素的总数为 n(n+ )/ ;
设 I=i或j中大的一个数;J=i或j中小的一个数;
则 k=I*(I+ )/ +J;
地址计算 LOC(Aij)=LOC(sa[k])=LOC(sa[ ])+k*d= LOC(sa[ ])+ (I*(I+ )/ +J )*d
三角矩阵
以主对角线划分 三角矩阵有上三角和下三角;上三角的主对角线下元素均为常数c;下三角的主对角线上元素均为常数c
元素总数为 (n(n+ )/ )+ ;
以行优先顺序存放的Aij与SA[k]的关系
上三角阵 k=i*( n i+ )/ +j i;
下三角阵 k=i*(i+ )/ +j;
对角矩阵
所有的非零元素集中在以主对角线为中心的带状区域 相邻两侧元素均为零 |i j|>(k )/
以行优先顺序存放的Aij与SA[k]的关系 k= i+j;
稀疏矩阵
当矩阵A中有非零元素S个 且S远小于元素总数时 称为稀疏矩阵 对其压缩的方法有顺序存储和链式存储
三元组表
将表示稀疏矩阵的非零元素的三元组(行号 列号 值)按行或列优先的顺序排列得到的一个结点均是三元组的线性表 将该表的线性存储结构称为三元组表 其类型定义
#define maxsize
typedef int datatype;
typedef struct{
int i j;
datatype v;
}trituplenode;
typedef struct{
trituplenode data[maxsize];
int m n t;
}tritupletable;
带行表的三元组表

在按行优先存储的三元组表中加入一个行表记录每行的非零元素在三元组表中的起始位置 类型定义
#define maxrow
typedef struct{
tritulpenode data[maxsize];
int rowtab[maxrow];
int m n t;
}rtritulpetable;
广义表的概念
广义表是线性表的推广 广义表是n个元素的有限序列 元素可以是原子或一个广义表 记为LS
若元素是广义表称它为LS的子表 若广义表非空 则第一个元素称表头 其余元素称表尾
表的深度是指表展开后所含括号的层数
把与树对应的广义表称为纯表 它限制了表中成分的共享和递归;
允许结点共享的表称为再入表;
允许递归的表称为递归表;
相互关系 线性表∈纯表∈再入表∈递归表;
广义表的特殊运算 )取表头head(LS); )取表尾tail(LS);
附二:
第五章多维数组和广义表
**************************************************************************************
数组一般用顺序存储的方式表示 存储的方式有 ·行优先顺序 也就是把数组逐行依次排列 PASCAL C
·列优先顺序 就是把数组逐列依次排列 FORTRAN
**************************************************************************************
地址的计算方法 ·按行优先顺序排列的数组 LOCa(ij)=LOCa( )+((i )*n+(j ))*d
·按列优先顺序排列的数组 LOCa(ij)=LOCa( )+((j )*n+(i ))*d
**************************************************************************************
矩阵的压缩存储 为多个相同的非零元素分配一个存储空间;对零元素不分配空间
特殊矩阵的概念 所谓特殊矩阵是指非零元素或零元素分布有一定规律的矩阵
稀疏矩阵的概念 一个矩阵中若其非零元素的个数远远小于零元素的个数 则该矩阵称为稀疏矩阵
*************************************************************************************
特殊矩阵的类型 ·对称矩阵 满足a(ij)=a(ji) 元素总数n(n+ )/ I=max(i j) J=min(i j) LOCa(ij)=LOC(sa[ ])+(I*(I+ )/ +J)*d
·三角矩阵 ·上三角阵 k=i*( n i+ )/ +j i LOCa(ij)=LOC(sa[ ])+k*d
·下三角阵 k=i*(i+ )/ +j LOCa(ij)=LOC(sa[ ])+k*d
·对角矩阵 k= i+j LOCa(ij)=LOC(sa[ ])+k*d
*************************************************************************************
稀疏矩阵的压缩存储方式用三元组表把非零元素的值和它所在的行号列号做为一个结点存放在一起 用这些结点组成的一个线性表来表示 但这种压缩存储方式将失去随机存储功能 加入行表记录每行的非零元素在三元组表中的起始位置 即带行表的三元组表
************************************************************************
广义表是n(n≥ )个元素的有限序列 其中的元素是原子或者是一个广义表
广义表表头和表尾的概念 ·若广义表LS非空(n≥ ) 则这个广义表的第一个元素就是表头
·其余的元素组成的表称为LS的表尾 所以表尾必是一个子表
广义表有两种表示法 一种是括号表示法 一种是图形表示法
广义表与树(形结构)相对应 这个广义表就是纯表
如果一个广义表的结点又可以被其他结点所共享 则这个表称为再入表
允许递归的表称为递归表
线性表∈纯表(树)∈再入表∈递归表 可见 广义表是对线性表和树的推广
广义表有两个特殊的基本运算 ·取表头head(LS) 取表中的第一个数据元素 不能对空表操作
lishixinzhi/Article/program/sjjg/201311/23669