数组
数组的概念
从逻辑结构上看,一维数组A是n(n>1)个相同类型数据元素a1、a2、......、An构成的有限序列,其逻辑表示为:
从A=(a1、a2、....、An)
其中,a1(1≤i≤n)表示数组A的第i个元素。一个m行m列的二维数组A可以看作是每个数据元素都是相同类型的一维数组的一维数组。
由此看出,多维数组是线性表的推广
数组的抽象数据类型+运算描述
数组的基本运算如下:Value(A,index1,index2,.....,indexD)即A(index,index2,...,indexD)=e,元素赋值
Assign(A,e,inex1,index2,....,indexD):取元素值。
ADisp(A,b1,b2,.....,bD):输出d维数组A的所有元素值
数组的存储结构
将数组的所有元素存储在一块地址连续的内存单元中,这是一种顺序存储结构
几乎所有的计算机语言都支持数组类型,以C/C++语言为例,其中数组数据类型具有以下性质:- 数组中的数据元素数目固定
数组中所有数据元素具有相同的数据类型
数组中每个数据元素都有唯一的下标
数组是一种随机存储结构。可随机存取数组中的任意数据元素
一维数组:一旦a1的存储地址LOC(a1)确定,并假设每个数据元素占用K个存储单元,则任一数据元素aI的存储地址LOC(ai)就可以下公式求出:
LOC(ai)=LOC(a1)+(i-1)*k (0=<i=<n)
存储方式
- 以行序为主的存储
- 以列序为主的存储
以行为主序的存储
LOC(Ai,j)=LOC(Ai,j)+[(i-1)*n+(j-1)]*k
以列序为主的存储
LOC(Ai,j)=LOC(Ai,j)+[(j-1)*m+(i-1)]*k 其中m为行数。特殊矩阵压缩存储
特殊矩阵的主要形式有:
对称矩阵
上三角矩阵/下三角矩阵
对角矩阵
它们都是方阵,即行数和列数相同
对称矩阵压缩存储
若一个n阶方阵A【n】[n]中的元素满足Ai,j=Aj,i(0<=i,j<=n-i),则称其为n阶对称矩阵
上三角:Ai,j(i小于j,行小于列)
下三角:Ai,j(i大于j,行小于列)
对角线:Ai,j(i等于j,行等于列,i大于等于0,小于等于n减一)
以行序为主序存储其下三角+主对角线的元素
元素个数为:
A0,0、A1,0、A1,1…、An-1,0,An-1,1…An-1,n-1;
对于对称矩阵A,采用一维数组B存储,并提供A的所有运算。
三角矩阵的压缩存储
上三角矩阵:
下三角矩阵
对角矩阵的压缩存储
特殊矩阵为什么要采用压缩存储,需要注意什么问题
采用压缩存储只需要在算法中按公式做映射即可实现特殊矩阵元素的随机存取。