数据结构——数组与矩阵

为君一笑 提交于 2019-12-19 22:06:15

数组

线性表的一种推广,由相同类型的数据元素组成,存储在一组连续的存储单元中。
一维数组又称向量,二维数组可以称,m个行向量或n个列向量。
基本运算:
读——>给定一组下标,返回该位置的元素内容。
写——>给定一组下标,修改该位置的元素内瓤
————————————————————————————————————
存储结构:
一维:内存单元地址是连续的。
二维,以列序为主序,或以行序为主序(类C语言的编译程序是该存储方法)

矩阵的压缩存储

特殊矩阵:值相同的元素或者零元素在矩阵中的分布由一定规律。

1.对称矩阵:

aija_{ij}=ajia_{ji} i>=0,j<=n-1

存储方式:有近一半的元素可以通过其对称元素获得,为每一对对称元素只分配一个存储单元。n2n^2个元素存储到含有n(n+1)2\frac{n(n+1)}{2}个元素的 一维数组中。

矩阵元素aija_{ij}在数组M中的位置为k,(i,j)和K存在如下对应关系:k的范围(0~n(n+1)2\frac{n(n+1)}{2} - 1))

当i>=j时 当i<j时
k=i(i+1)2\frac{i(i+1)}{2} +j k=j(j+1)2\frac{j(j+1)}{2} + i

任意的给定的一组下标(i,j)均可在M中找到矩阵元素 aija_{ij},反之亦然。

2.三角矩阵:

以主对角线为界的上(下)半部分是一个固定的值C或者零,也称下(上)三角矩阵。

存储方式:采用数组M[n(n+1)/2],把矩阵中上(下)三角部分的n(n+1)2\frac{n(n+1)}{2}个元素存储在M[0]~M[n(n+1)2\frac{n(n+1)}{2} - 1]的n(n+1)2\frac{n(n+1)}{2}个单元中。

M[K]和aija_{ij}的对应关系:

上三角:前i行的元素个数为 i=0n1ni\sum_{i=0}^{n-1} {n-i}=i2\frac{i}{2}(2n-i+1)

当i<=j 当i>j
k = i(2ni+1)2\frac{i(2n-i+1)}{2} + j - i k = n(n+1)2\frac{n(n+1)}{2}

下三角:

当i>=j 当i<j
k = i(i+1)2\frac{i(i+1)}{2} + j k = n(n+1)2\frac{n(n+1)}{2}

3.稀疏矩阵:

假设m行n列矩阵中有t个非零元素,当t远远小于m*n,即为稀疏矩阵。

存储方式:三元组结点(行号,列号,非零元素)。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!