数组
- 数组相关术语
- 数组的抽象数据类型定义
- 数组的顺序储存
- 矩阵的压缩存储
- 特殊矩阵的压缩存储
- 稀疏矩阵的压缩存储
数组相关术语
**数组:**按一定格式排列起来的具有相同类型的数据元素的集合。
一维数组:若线性表中的数据元素为非结构的简单元素,则称为一维数组。
一维数组的逻辑结构:线性结构。定长的线性表。
声明格式:数据类型 变量名称[长度]
二维数组:若一维数组中的数据元素又是一维数组结构,则称为二维数组。
特点:1、结构中的元素本身可以是具有某种结构的数据
2、结构固定—定义后,维数和维界不再改变
与线性表的关系
数组是线性表的推广 一维数组可视为线性表,二维数组可视作元素是定长线性表的线性表
数组的抽象数据类型定义
数组的顺序储存
一维数组
二维数组
二维数组有两种存储方式:
1、以行序为主序(低下标优先)BASIC、COBOL、PASCAL
2、以列序为主序(高下标优先) FORTRAN
以行序为主序:
设数组开始存储位置LOC(0,0),存储每个元素需要L个存储单元,二维数组A中任一元素ai,j 的存储位置
LOC(i,j) = LOC(0,0) + (i×m+j)*L
三维数组
按页/行/列存放,页优先的顺序存储
若a[m1][m2] [m3] 各维元素个数为 m1, m2, m3 ,则下标为 i1, i2, i3的数组元素的存储位置:
n维数组
各维元素个数为 m1, m2, m3, …, mn
下标为 i1, i2, i3, …, in 的数组元素的存储位置:
矩阵的压缩存储
在数值分析中经常出现一些阶数很高的矩阵,同时在矩阵中有许多值相同的元素或者是零元素。有时为了节省存储空间,可以对这类矩阵进行压缩存储。
压缩存储: 为多个值相同的元只分配一个存储空间,对零元不分配空间。
特殊矩阵的压缩存储
1、对称矩阵
特点:在nn的矩阵A中,元素满足aij=aji ,1≤i,j≤n
存储方法: 只存储下(或者上)三角(包括主对角线)的数据元素。共占用n(n+1)/2个元素空间
2、上(下)三角矩阵
特点:上(下)三角矩阵是指矩阵的上(下)三角(不包括对角线)中的元均为常数c或零的n阶矩阵。
存储方法:重复元素c共享一个元素存储空间,共占用n(n+1)/2+1个元素空间: sa[0… n(n+1)/2]
上三角矩阵
下三角矩阵
3、对角矩阵
在nn的方阵中,非零元素集中在主对角线及其两侧共L(奇数)条对角线的带状区域内 — L对角矩阵
稀疏矩阵的压缩存储
稀疏矩阵:
1、顺序存储
- 三元组顺序表
定义
#define MAXSIZE 12500
typedef struct {
int i, j;
//该非零元的行下标和列下标
ElemType e;
// 该非零元的值
} Triple; // 三元组类型
typedef union {
Triple data[MAXSIZE + 1];
int mu, nu, tu;
} TSMatrix; // 稀疏矩阵类型
2、链式存储
- 十字链表
优点:它能够灵活地插入因运算而产生的的新的非零元素,删除因运算而产生的新的零元素,实现矩阵的各种运算。
十字链表的结构
实例