![d7fadc0b9988e8fc230572f4b2b7b779.png](https://img-blog.csdnimg.cn/img_convert/d7fadc0b9988e8fc230572f4b2b7b779.png)
数组
数组是由相同类型的数据元素构成的有限集合。一维数组看作一个线性表。
![8d63472ba9c8a00d4384de9a0b5f6219.png](https://img-blog.csdnimg.cn/img_convert/8d63472ba9c8a00d4384de9a0b5f6219.png)
二维数组:
二维数组也可看作一个线性表
![a7131663d08d81008736edbd7dd24a84.png](https://img-blog.csdnimg.cn/img_convert/a7131663d08d81008736edbd7dd24a84.png)
二维数组也可以看作一个线性表
![437df53b6c0a394a0c59c3bf0666baed.png](https://img-blog.csdnimg.cn/img_convert/437df53b6c0a394a0c59c3bf0666baed.png)
数组存储:
数组一般采用顺序存储结构,因为存储单元是一维的,而数组可以是多维,如何用一位数组存储多位数组呢?以二维数组为例,可以按行存储,即先存第一行,再存第二行,...,;也可以按列存储,先存第一列,再存第二列,...;c语言和java都是按列存储的。
如果按行序存储,怎么找到
先看看存储
![f9fdd191ba4c9ac6d7d2c3920317b41c.png](https://img-blog.csdnimg.cn/img_convert/f9fdd191ba4c9ac6d7d2c3920317b41c.png)
在
按行序存储,
如果按列序存储,怎么找到
先看看存储
![f8fe95f8b6615c2b84809a3303bf6261.png](https://img-blog.csdnimg.cn/img_convert/f8fe95f8b6615c2b84809a3303bf6261.png)
在
按行序存储,
特别注意:二维数组的下标如果从1开始,那么情况就不一样了!!!!!!!
先看看,存储
![adb2f3c8f46880ea3f040ada61602a6a.png](https://img-blog.csdnimg.cn/img_convert/adb2f3c8f46880ea3f040ada61602a6a.png)
存储地址:
行数和列数都少了1,在
如果二维数组下标从1开始,按行序存储,
如果二维数组下标从1开始,按列序存储,
也就是说,如果下标是从1开始的,相应的公式需要行减1,列减1。
存储地址计算秘籍:
例题。
1.一个二维数组A,假设每个数组元素占3个存储单元,行下标为0~8,列下标为0~9,从首地址elem开始按行连续存储,那么
2.二维数组
解答:
1.由行下标和列下标可知,数组为
![f9fdd191ba4c9ac6d7d2c3920317b41c.png](https://img-blog.csdnimg.cn/img_convert/f9fdd191ba4c9ac6d7d2c3920317b41c.png)
由于按行存储,可类比为上图:
故:
2.由
![f8fe95f8b6615c2b84809a3303bf6261.png](https://img-blog.csdnimg.cn/img_convert/f8fe95f8b6615c2b84809a3303bf6261.png)
由于按列存储,可类比为上图,
故:
特殊矩阵压缩
什么是压缩存储?
把多个相同的元素分配一个存储空间,元素为0不分配空间。
什么样的矩阵能够压缩?
特殊矩阵,如:对称矩阵,对角矩阵,三角矩阵,稀疏矩阵等。
什么叫稀疏矩阵?
矩阵中非零元素的个数较少,一般认为非零元素个数小于5%的矩阵为稀疏矩阵。
对称矩阵:
对称矩阵比较特殊,其数据元素沿着对角线对称。对称矩阵根据对称性,只存储下三角或上三角即可。
![6e7bb5109f8bd556364bc9160cefb1f0.png](https://img-blog.csdnimg.cn/img_convert/6e7bb5109f8bd556364bc9160cefb1f0.png)
如果按行序存储下三角,怎么找到
![3ddf07622b83177180b93ab05bf7afa8.png](https://img-blog.csdnimg.cn/img_convert/3ddf07622b83177180b93ab05bf7afa8.png)
首先,确定
step1:
第一行: a11 1个元素
第二行: a21 a22 2个元素
第三行: a31 a32 a33 3个元素
... ............ .......
第i-1行 ........... i-1个元素
可以发现,前
step2: 由
可以得到,前
step3: 故
一维数组存储:
![d4399b3b5deb746a497215ce46e65de1.png](https://img-blog.csdnimg.cn/img_convert/d4399b3b5deb746a497215ce46e65de1.png)
上三角的元素
![25dd9ca4d63af19ebf5a089a94857e14.png](https://img-blog.csdnimg.cn/img_convert/25dd9ca4d63af19ebf5a089a94857e14.png)
存储下标计算秘籍:
如果用一维数组
例题:
一个
解:由按行存储,计算
可以计算出包括
画出
第一行: a11 1个元素
第二行: a21 a22 2个元素
第三行: a31 a32 a33 3个元素
... ............ .......
第i行 ........... i个元素
综上可得
三角矩阵:
三角矩阵比较特殊,分为下三角矩阵和上三角矩阵,下三角矩阵是指矩阵的下三角有数据,而其余的都是常数c或者为0.
![be0de362d3b70d0c979b97d8ee02ddbe.png](https://img-blog.csdnimg.cn/img_convert/be0de362d3b70d0c979b97d8ee02ddbe.png)
下三角矩阵按行存储在一维数组
![af8dd55b6ef45169efa7ee06de0697bc.png](https://img-blog.csdnimg.cn/img_convert/af8dd55b6ef45169efa7ee06de0697bc.png)
![94555696479eb66f7ccbdb1ad19fa480.png](https://img-blog.csdnimg.cn/img_convert/94555696479eb66f7ccbdb1ad19fa480.png)
下三角矩阵按行序存储时,
![ecda6da7c8184ae55fb3e2d3814c65b5.png](https://img-blog.csdnimg.cn/img_convert/ecda6da7c8184ae55fb3e2d3814c65b5.png)
上三角矩阵按行序存储时:
![103c14e1f1f820084c1953a2a3fc4963.png](https://img-blog.csdnimg.cn/img_convert/103c14e1f1f820084c1953a2a3fc4963.png)
![e4a20a6c50e15f81b0dad04bddb141db.png](https://img-blog.csdnimg.cn/img_convert/e4a20a6c50e15f81b0dad04bddb141db.png)
例:一个
解:由于按列存储,可得上三角矩阵:
第一列: a11 1个元素
第二列: a21 a22 2个元素
第三列: a31 a32 a33 3个元素
... ............ .......
第j-1列: ........... j-1个元素
综上,
对角矩阵:
对角矩阵又称为带状矩阵,是指在
![ee55f8dc5d3dae7dc6c83869ba769071.png](https://img-blog.csdnimg.cn/img_convert/ee55f8dc5d3dae7dc6c83869ba769071.png)
为了节省空间,第一行前面和最后一行后面的d个0可以不存储,“掐头去尾”,需要
![fa02bf85b7d114299e05b872dac6a352.png](https://img-blog.csdnimg.cn/img_convert/fa02bf85b7d114299e05b872dac6a352.png)
![60b1707ae6969b1b297c708bf5ad8574.png](https://img-blog.csdnimg.cn/img_convert/60b1707ae6969b1b297c708bf5ad8574.png)
![96e01d1e853db4cdb1906b6d97215829.png](https://img-blog.csdnimg.cn/img_convert/96e01d1e853db4cdb1906b6d97215829.png)
例题:一个1000阶的三对角矩阵A,将其按行存放在一维数组B中,
解:
由三对角矩阵得:
又|i-j|=0<d,故k=(30-1)*3=87