文章目录
一、二维数组及多维数组
1.数组的顺序存储
都是存储在一维线性表中
(1)按行
(2)按列
2.数组的地址计算
按行存储
一维数组:Loc(A[ i ] ) = Loc(A[ 1]) +(i-1)size
二维数组:Loe (A [ i] [j] ) = Loe (A [ 1 ] [ 1 ]) + (n(i- 1 ) +j-1)size
三维数组:Loe(A[i] [j] [ k ]) = Loe(A [ 1 ] [ 1] [ 1 ]) +((i-1)*m*n+(j-1 )*n+(k-L))*size
注意:都是看线性表前面有多少个来计算
二、特殊矩阵
1.规律分布的特殊矩阵
(1)三角矩阵
上三角、下三角
存储位置:Loc[i, j] = Loc[1, 1] + (i * (i - 1) / 2 + j - 1)
元素获取:
(2)带状矩阵
a.三对角带状矩阵特点
在以下条件下非零,其他元素均为零
b.三对角带状矩阵压缩存储方法
方法:按行存储非零元素
确定非零元素在一维数组空间中的地址:Loc (A[i][j]) = Loc (A[1][1]) + (前 i-1 行非零元素个数 + 前 i-1 行中前非零元素的个数) * size
前 i-1 行非零元素个数 : 3 * (i - 1) -1(因为第一行只有两个元素)
前 i-1 行中前非零元素的个数: j - i + 1
(3)稀疏矩阵
a.含义
非零元素个数低于总元素的30%
b.存储方式
三元组表
例子:
c.稀疏矩阵三元组表的类型定义
#include<stdio.h>
#define MAXSIZE 1000
typedef int ElementType;
//三元组
typedef struct
{
int row, col; //行,列
ElementType e;
}Triples;
//三元组表
typedef struct
{
Triples data[MAXSIZE + 1]; //data[0]未用
int m, n, len; //矩阵的行数、列数、非零元素的个数
}TTMatrix;