【数据结构与算法分析】数组

来源:互联网 发布:exel宏编程运用 编辑:程序博客网 时间:2024/05/29 08:57

一、基本定义

定义:一维数组(array)是有限个具有相同类型的变量组成的序列。若其中每个变量本身是一维数组,则构成二维数组。类似的,若每个变量本身为(n-1)维数组,则构成n维数组。


标识:在一维数组中,每个元素对应一个下标以标识该元素。类似的,在n维数组中,每个元素对应n个方向的下标以标识该元素。


特点:由于一维数组的线性关系,因此,一维数组中的每个元素最多有一个直接前驱和一个直接后继。类似的,在n维数组中,每个元素最多有n个直接前驱和n个直接后继。


运算:①给定一组下标,存取相应的数组元素。

②给定一组下标,修改相应的元素值。

由于这两个运算在内部实现时都需要计算出给定元素的实际存储地址,因此,计算数组元素地址这一运算就成了数组中最基本的运算。

二、存储结构

(1)顺序存储

1)以行序为主序的存储(行优先次序):逐行的存储各元素。序号:Num(i,j)=(i-1)*n+j

2)以列序为主序的存储(列优先次序):逐列的存储各元素。序号:Num(i,j)=(j-1)*m+i

地址:若给定存储区的起始地址为Addr0,每个元素占c个字节,则元素A[i,j]在内存中的地址为Loc(i,j)=Addr0+(Num(i,j)-1)*c

说明:此处所给出的数组的行列下标是按序号从1开始的


(2)压缩存储

1)特殊的压缩存储

①对称矩阵和三角矩阵

若矩阵An×n满足aji=aij(1≤i,j≤n),则称A为对称矩阵。序号:Num(i,j)=1+2+3+……(i-1)+j=i(i-1)/2+j(i≥j)

所谓三角矩阵是指对角线上或以下的元素全为0,或全为同一值。序号:Num(i,j)=1+2+3+……(i-1)+j=i(i-1)/2+j(i≥j)(下三角矩阵)

②对角矩阵

所谓对角矩阵,是指除了主对角线和紧靠主对角线的上下若干条对角线外,其余元素全为0。序号:Num(i,j)=[3(i-1)-1]+[j-i+2]=2i+j-2(|i-j|≤1)

2)稀疏矩阵的压缩存储

在对稀疏矩阵进行压缩存储时,除了要存储非零元素的值v之外,还要存储其行列号i和j,故每个非零元素需要一个三元组(i,j,v)来描述。

如果将这些三元组集合以线性表的形式组织起来,则可构成三元组表。

1 0
原创粉丝点击