5-数据结构-数组的学习

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谁大谁在前面

eg:一十阶对称矩阵A,采用压缩方式存储,以行序为主存储,a11为第一元素,其存储地址为1,每个元素占一个地址空间,则a68的地址为实际上是a86,因为下三角形矩阵的上半部分为空