5.1数组的定义
定义:
由一组类型相同的数据元素构成的有序集合,每个数据元素称为一个数据元素(简称元素),每个元素受n(n>=1)个线性关系的约束,每个元素在n个线性关系中的序号i1、i2…in称为元素的下标,并称为n元数组
二维数组是数据元素为线性表的线性表
数组没有插入和删除操作:因为数组一旦被定义,它的维数和维界就不再改变
数组的基本操作:
1.存取:给定一组下标,读出对应的数组元素
2.修改:给定一组下标,存储或修改与其相对应的数组元素
存取和修改操作本质上只对应一种操作:寻址
存储方式:没有插入删除操作,故不用预留空间,不适合采用顺序存储
5.2数组的顺序表示和实现----- 一维数组
设一维数组的下标范围为闭区间[l,h],每个数组元素占用c个存储单元,则其任一元素ai的存储地址为: Loc(ai)=Loc(aL)+(i-L)*c
由于内存空间是一维的,将二维数组表示为一维结构的方法有:
1.按航有线:先行后列,先存储行号较小的元素,行号相同者先存储列号较小的元素
2.按列优先:先列后行,先存储列号较小的元素,列号相同者先存储行号较小的元素
第aij个元素前面的元素个数
=整行数每行表示的元素个数+本行中aij前面的元素个数
=(i-L1)(h2-L2+1)+(j-L2)
寻址:
按行优先存储的寻址:
Loc(aij)
=Loc(L1L2)+aij之前的元素个数L // Loc(L1L2)为存储的第一个元素的位置
=Loc(L1L2)+((i-L1)(h2-L2+1)+(j-L2) )*c //每个元素占c个单元
三维数组:
a[m1][m2][m3]: //m1为页数,m2 m3分别为行数和列数
LOC(i1,i2,i3)
=起始地址+前i1页总元素个数+第i1页的前i2行总元素个数+第i2行前i3列元素个数
= a + i1m2m3 + i2*m3+i3
n维数组
5.3矩阵的压缩存储
*特殊矩阵:包括对称矩阵,三角矩阵,对角矩阵,和稀疏矩阵
*系数矩阵:矩阵中有很多零元素
压缩矩阵的基本思想:
为多个值相同的元素只分配一个存储空间
对0元素不分配存储空间
压缩对称矩阵: 特点:aij=aji
只存储下三角部分的元素**【默认】**
令数组下标从0开始时:aij在一维数组的下标就是该元素前面元素的个数,即ak中k=i*(i+1)/2+j
对下三角中的元素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 // 【i和j谁大谁在前面