数据结构教程 第4章 数组、串与广义表.ppt
文本预览下载声明
第四章 数组、串与广义表;线性表——具有相同类型的数据元素的有限序列。;线性表——具有相同类型的数据元素的有限序列。;4.1.1 多维数组的概念; a11 a12 … a1n
a21 a22 … a2n
… … … …
am1 am2 … amn; a11 a12 … a1n
a21 a22 … a2n
… … … …
am1 am2 … amn;4.1.2 多维数组的存储表示;数组的基本操作;设一维数组的下标的范围为闭区间[l,h],每个数组元素占用 c 个存储单元,则其任一元素 ai 的存储地址可由下式确定:
Loc(ai)=Loc(al)+(i-l)×c ;常用的映射方法有两种:
按行优先:先行后列,先存储行号较小的元素,行号相同者先存储列号较小的元素。
按列优先:先列后行,先存储列号较小的元素,列号相同者先存储行号较小的元素。 ;l2;第l1行;Loc(aijk ) = Loc(a000) +( i×m2×m3 + j×m3 + k )×c ;4.2 特殊矩阵;4.2.1 对称矩阵的压缩存储 ;(a) 下三角矩阵 (b) 存储说明 (c) 计算方法;对于下三角中的元素aij(i≥j),在数组SA中的下标k与i、j的关系为:k=i×(i+1)/2+j 。
上三角中的元素aij(i<j),因为aij=aji,则访问和它对应的元素aji即可,即:k=j×(j+1)/2+i 。;4.3.1 稀疏矩阵及其三元组数组表示 ;template class T
struct Trituple
{
int row, col; //行号,列号
T value //非零元素值
};;三元组表:将稀疏矩阵的非零元素对应的三元组所构成的集合,按行优先的顺序排列成一个线性表。;采用顺序存储结构存储三元组表;采用顺序存储结构存储三元组表;template class T
class SparseMatrix{
public:
SparseMatrix(int maxSz=DefaultSize;
SparseMatrix(SparseMatrixT x);
~SparseMatrix( ){delete [] smArray;}
SparseMatrixT operator=(SparseMatrixT x);
SparseMatrixTTranspose( );
SparseMatrixTAdd(SparseMatrixT b);
SparseMatrixTMultiply(SparseMatrixT b);
private:
TritupleT*smArray; //存储非零元素
int Rows, Cols, Terms, maxTerms; //行数,列数,非零元个数};;例:; 0 0 15
0 3 22
0 5 -15
1 1 11
1 2 3
2 3 6
4 0 91
空 空 空
闲 闲 闲
;基本思想:直接取,顺序存。即在A的三元组顺序表中依次找第0列、第1列、…直到最后一列的三元组,并将找到的每个三元组的行、列交换后顺序存储到B的三元组顺序表中。 ; 0 0 15
0 3 22
0 5 -15
1 1 11
1 2 3
2 3 6
4 0 91
空 空 空
闲 闲 闲
; 0 0 15
0 3 22
0 5 -15
1 1 11
1 2 3
2 3
显示全部