数据结构——数组和广义表
1.数组的定义
n个相同数据类型的的数据元素组成的有限序列,且该有限序列必须存储在一块地址连续的存储单元中
注意: 数组长度固定,元素类型一致,没有链式映像,因为不能保证地址连续
数组与线性表的区别与联系:
相同点: 都是相同数据类型的的数据元素组成的有限序列
不同点:①数组要求地址连续,而线性表则无此要求
②线性表的元素是逻辑意义上不可再分的,而数组中每一个元素还可以是一个数组(多维数组可分)
③操作上的不同,数组一旦被定义,它的维数和维界就不再改变。因此,除了结构的初始化和销毁之外,数组只有存取元素和修改元素值的操作
2.数组的顺序表示和实现
二维数组的两种存储方式:行优先、列优先
由于计算各个元素存储位置的时间相等,所以存取数组中任一元素的时间也相等,称为随机存取
3.矩阵的压缩存储
5.3.1 特殊矩阵
①对称矩阵
定义:n阶矩阵A中aij=aji 则称为n阶对称矩阵
压缩存储方案:1.只存上三角 2.只存下三角
上三角与此类似
②三角矩阵
与对称矩阵的存储相类似,但是一半的元素为常数,统一存到k=0的位置
③三对角矩阵
k=2i+j-2,其它k=0
④稀疏矩阵
稀疏矩阵的定义:其矩阵阶数很大,非零元个数较少,零元很多,但非零元的排列没有规律
1.三元组顺序表存储
//稀疏矩阵的三元组顺序表存储表示
#define MAXSIZE 12500//假设非零元个数最大为12500
typedef struct{
int i,j;
ElemType e;
}Triple;
typedef struct{
Triple data[MAXSIZE+1];//非零元三元组表,data[0]未用
int mu,nu,tu;//矩阵的行数、列数和非零元的个数
}TSMatrix;
//采用三元组表存储表示,求稀疏矩阵的转置矩阵
Status TransposeSMatrix(TSMatrix M,TSMatrix &T)<