数据结构第五章数组和广义表(1)

合集下载

数据结构第五章 数组与广义表

数据结构第五章 数组与广义表
an-1,n-1
压缩存储方法:只需要存储下三角 (含对角线)上的元素。可节省一 半空间。
可以使用一维数组Sa[n(n+1)/2]作为n阶对称矩阵A的存 储结构,且约定以行序为主序存储各个元素,则在Sa[k]和矩
阵元素aij之间存在一一对应关系: (下标变换公式)
i(i+1)/2 + j 当i≥j k = j(j+1)/2 + i 当i<j
q = cpot[col];
T.data[q].i = M.data[p].j; T.data[q].j = M.data[p].i; T.data[q].e = M.data[p].e; ++cpot[col]; }
分析算法FastTransposeSMatrix的时间 复杂度:
for (col=1; col<=M.nu; ++col) … … for (t=1; t<=M.tu; ++t) … … for (col=2; col<=M.nu; ++col) … … for (p=1; p<=M.tu; ++p) … …
//对当前行中每一个非零元

brow=M.data[p].j;

if (brow < N.nu ) t = N.rpos[brow+1];
M
else { t = N.tu+1 }

for (q=N.rpos[brow]; q< t; ++q) { ccol = N.data[q].j; // 乘积元素在Q中列号
一、三元组顺序表
对于稀疏矩阵,非零元可以用三元组表示, 整个稀疏矩阵可以表示为所有非零元的三元组所 构成的线性表。例如:

数据结构-第五章 数组与广义表-文档资料

数据结构-第五章 数组与广义表-文档资料

上 三 角 矩 阵 下 三 角 矩 阵
a00 a10 a 20 an10
0 1 2
a01 a11 a21 an11
3 4
a02 a12 a22 an12
5

6 7
a0 n1 a1n1 a2 n1 an1n1
行 列 值 (row) (col) (value) 0 4 91 1 1 11 2 5 28 3 0 22 3 2 -6 5 1 17 5 3 39 6 0 16
用三元组表表示的稀疏矩阵及其转置
行 列 值 (row) (col) (value) 0 3 22 0 6 15 1 1 11 1 5 17 2 3 -6 3 5 39 4 0 91 5 2 28 行 列 值 (row) (col) (value) 0 4 91 1 1 11 2 5 28 3 0 22 3 2 -6 5 1 17 5 3 39 6 0 16
4 5 6 7 8 9 10
B a00 a01 a10 a11 a12 a21 a22 a23 … an-1n-2 an-1n-1
三对角矩阵中除主对角线及在主对角线上 下最临 近的两条对角线上的元素外,所有其它元素均为 0。总共有3n-2个非零元素。 将三对角矩阵A中三条对角线上的元素按行存放在 一维数组 B 中,且a00存放于B[0]。 在三条对角线上的元素aij 满足 0 i n-1, i-1 j i+1 在一维数组 B 中 A[i][j] 在第 i 行,它前面有 3*i-1 个非零元素, 在本行中第 j 列前面有 j-i+1 个,所 以元素 A[i][j] 在 B 中位置为 k = 2*i + j。
三对角矩阵的压缩存储

数据结构:第5章 数组与广义表1-数组

数据结构:第5章 数组与广义表1-数组

中的元素均为常数。下三角矩阵正好相反,它的主对
数据结构讲义
第5章 数组与广义表
—数组
数组和广义表
数组和广义表可看成是一种特殊的 线性表,其特殊在于,表中的数据 元素本身也是一种线性表。
几乎所有的程序设计语言都有数组 类型。本节重点讲解稀疏矩阵的实 现。
5.1 数组的定义
由于数组中各元素具有统一的类型,并且 数组元素的下标一般具有固定的上界和下 界,因此,数组的处理比其它复杂的结构 更为简单。
nm
aa1221
aa2222
…………....
aam2n2 ………………..
aamm11 aamm22 ………….... aammnn LLoocc(a( iaj)ij=)L=Loco(ca(a111)1+)[+([j(-i1-)1m)n++((i-j1-1)])*]*l l
aa1mn 1 aa2mn2 …………....
其存储形式如图所示:
15137 50800 18926 30251
a00 a10 a 11 a20 a21 a23 ………………..
70613
an-1 0 a n-1 1 a n-1 2 …a n-1 n-1
图 5.1 对称矩阵
在这个下三角矩阵中,第i行恰有i+1个元素,元素总
数为:
n(n+1)/2
5.2 数组的顺序表示和实现
由于计算机的内存结构是一维的,因此用 一维内存来表示多维数组,就必须按某种 次序将数组元素排成一列序列,然后将这 个线性序列存放在存储器中。
又由于对数组一般不做插入和删除操作, 也就是说,数组一旦建立,结构中的元素 个数和元素间的关系就不再发生变化。因 此,一般都是采用顺序存储的方法来表示 数组。

数据结构第五章数组和广义表

数据结构第五章数组和广义表
typedef elemtype Array2[m][n]; 等价于
typedef elemtype Array1[n]; typedef Array1 Array2[m]; 同理,可以用 n-1 维数组的数据类型来定义 n 维数组。
8
第8页
5.2 数组的顺序存贮结构
一、数组的顺序表示和实现
(1) 类型特点 ① 只有引用型操作,一般不作插入或删除操作; ② 数组是多维的结构,而存储空间是一个一维的结构。
第 17 页
(2) 压缩存储的有关概念 ① 压缩存储:为多个值相同的元素分配一个存储空间,对零 元不分配空间。 ② 特殊矩阵:值相同的元素或零元素在矩阵中的分布有一定 规律。 ③ 稀疏矩阵:值相同的元素或者零元素在矩阵中的分布无规 律。
第 18 页
(3) 特殊矩阵
① 概念:若n阶矩阵 A 中的元满足:aij=aji 1≤i,j≤n,则 称为n 阶对称矩阵。
第1页
第五章 数组和广义表
5. 1 数组的定义 5.2 数组的顺序存储结构 5. 3 矩阵的压缩存储 5. 4 广义表的定义 5.5 广义表的存储结构
第2页
第五章 数组和广义表
前4章介绍的数据结构共同特点: ▲ 都属于线性数据结构; ▲ 每种数据结构中的数据元素,都作为原子数据, 不再进行分解; 本章讨论的两种数据结构:数组和广义表,其共 同特点是: ▲ 从逻辑结构上看它们,可看成是线性结构的一 种扩展; ▲ 数据元素本身也是一个数据结构;
4
第4页
(2) 二维数组的解释
二维数组中的每个元素都受两个 线性关系的约束,即行关系和列关系, 在每个关系中,每个元素aij都有且仅 有一个直接前趋,都有且仅有一个直 接后继。
aa … 00 01

《数据结构——用C语言描述(第二版)》第5章 数组和广义表

《数据结构——用C语言描述(第二版)》第5章  数组和广义表
是指矩阵的下三角(不含对角线)中的元素均为常数C或零的n阶矩阵,下 三角矩阵则与之相反,如图5.3所示。
第五章 数组和广义表
在压缩存储时,矩阵中值相同的元素C可共享一个存储空间,元素 为零则可不必分配空间,而其余的元素有 n(n+1)/2个,因此三角矩阵 可用一维数组M[n×(n+1)/2+1]来存储,其中常数C放在数组的最后一 个下标变量中。
假设A和B矩阵分别用matrix型指针变量a和b表示,矩阵的转置可以 按以下进行:由于B的行是A的列,所以可按照b->data三元组表的次序在 a->data中找到相应的三元组进行转置,即可按a->data的列序转置,所得 到的转置矩阵B的三元组表b->data必定是按行优先存放的。因此,可以对 三元组表a->data从第一行起扫描,找到A的每一列中所有的非零元素,就 可以实现转置。
LOC ( aij ) =LOC ( a00) +(i×n+j) × c 同理可推导出以列为主序优先存储时数据元素a i j 的存储地址,其计算公式 为:
LOC( a i j ) =LOC( a00 ) +( j × n +i ) × c 对于三维数组Am×n×p而言,若以行为主序优先存储时,则其数据元 素aijk的存储地址可为: LOC ( a i j k) =LOC ( a000) +[ i × m×p +j ×p +k] × c 对于一般的二维数组A[c1…d1,c2…d2]而言,此处c1,c2的值不一定是 0,a i j 的地址为: LOC ( a i j ) =LOC ( a c 1 c 2 ) +[ ( i – c 1 )* ( d 2 – c 2 +1) +j – c 2 ] * c

数据结构课件PPT数组和广义表

数据结构课件PPT数组和广义表
T.mu=M.nu; T.nu=M.mu; T.tu=M.tu; if (T.tu)
{ q=1; for (col=1;col<=T.mu;++col) for(p=1;p<=M.tu;++p) if ( M.data[p].j==col ) { T.data[q].i=M.data[p].j; T.data[q].j=M.data[p].i; T.data[q].e=M.data[p].e; ++q; } }
(row) (col) (value)
[0] 1 4 22
[0] 1 5 91
[1] 1 7 15
[1] 2 2 11
[2] 2 2 11
[2] 3 6 28
[3] 2 [4] 3来自6 17 4 -6[3] 4 [4] 4
1 22 3 -6
[5] 4 6 39
[5] 6 2 17
[6] 5 1 91
[6] 6 4 39
cpot[1]=1 cpot[col]=cpot[col-1]+num[col-1]
稀疏矩阵的快速转置(算法5.2)
Status FastTransposeSMatrix(TSMatrix M,TSMatrix &T) { T.mu=M.nu; T.nu=M.mu; T.tu=M.tu;
if (T.tu) { for (col=1;col<=M.nu;++col) num[col]=0; for (t=1;t<=M.tu;++t) ++num[M.data[t].j]; cpot[1]=1; for ( col=2;col<=M.nu;++col) cpot[col]=cpot[col-1]+num[col-1]; for (p=1;p<=M.Tu;++p) { col=M.data[p].j; q=cpot[col]; T.data[q].i=M.data[p].j; T.data[q].j=M.data[p].i; T.data[q].e=M.data[p].e; ++cpot[col]; } }

数据结构课后习题答案第五章数组与广义表

数据结构课后习题答案第五章数组与广义表

第五章数组与广义表一、假设有二维数组A6*8,每个元素用相邻的6个字节存储,存储器按字节编址。

已知A的起始存储位置(基地址)为1000。

计算:1、数组A的体积(即存储量);2、数组A的最后一个元素a57的第一个字节的地址;3、按行存储时,元素a14的第一个字节的地址;4、按列存储时,元素a47的第一个字节的地址;答案:1、(6*8)*6=2882、loc(a57)=1000+(5*8+7)*6=1282或=1000+(288-6)=12823、loc(a14)=1000+(1*8+4)*6=10724、loc(a47)=1000+(7*6+4)*6=1276二、假设按低下标(行优先)优先存储整数数组A9*3*5*8时第一个元素的字节地址是100,每个整数占四个字节。

问下列元素的存储地址是什么?(1)a0000(2)a1111(3)a3125 (4)a8247答案:(1)100(2)loc(a1111)=100+(1*3*5*8+1*5*8+1*8+1)*4=776(3) loc(a3125)=100+(3*3*5*8+1*5*8+2*8+5)*4=1784(4) loc(a8247)=100+(8*3*5*8+2*5*8+4*8+7)*4=4416五、设有一个上三角矩阵(aij)n*n,将其上三角元素逐行存于数组B[m]中,(m 充分大),使得B[k]=aij且k=f1(i)+f2(j)+c。

试推导出函数f1,f2和常数C(要求f1和f2中不含常数项)。

答:K=n+(n-1)+(n-2)+…..+(n-(i-1)+1)+j-i=(i-1)(n+(n-i+2))/2+j-i所以f1(i)=(n+1/2)i-1/2i2f2(j)=jc=-(n+1)九、已知A为稀疏矩阵,试从空间和时间角度比较采用两种不同的存储结构(二维数组和三元组表)完成∑aii运算的优缺点。

(对角线求和)解:1、二维数组For(i=1;i<=n;i++)S=s+a[i][i];时间复杂度:O(n)2、for(i=1;i<=m.tu;i++)If(a.data[k].i==a.data[k].j) s=s+a.data[k].value;时间复杂度:O(n2)二十一、当稀疏矩阵A和B均以三元组表作为存储结构时,试写出矩阵相加的算法,其结果存放在三元组表C中。

数据结构第5章数组与广义表

数据结构第5章数组与广义表
0 0 3 0 1 0 1 2 0 0 0 0 0 0 0 0 7 0 0 0 0 0 0 2 0
一个稀疏矩阵里存在大量的零元素,若 以常规方法,即以二维数组来存储稀疏矩 阵时产生如下问题: 1) 零值元素占了很多空间; 2) 如果进行计算,则会进行很多和零值 的运算,如是除法,还需判别除数是否为 零。
2 三角矩阵 以主对角线划分,三角矩阵有上三角 和下三角两种。如图所示。其中(a)图为下 三角矩阵:主对角线以上均为同一个常 数;(b)图为上三角矩阵,主对角线以下均 为同一个常数。
(1) 下三角矩阵 三角矩阵中的重复元素c可共享一个 存储空间,其余的元素正好有n(n+1)/2 个,因此,三角矩阵可压缩存储到向量 SA[0…n(n+1)/2]中,其中c存放在向量的 最后1个分量SA[n(n+1)/2]中。 该存储方式可节约n*(n-1)/2-1个存储 单元。
传统矩阵的转置算法为: for(col=1; col<=n ;++col) for(row=0 ; row<=m ;++row) b[col][row]=a[row][col] ;
时间复杂度为O(n×m) 当非零元素的个数tn和m×n同数量级时,算法 TransMatrix的时间复杂度为O(m×n2)。
以“行优先顺序”存储: (1) 第1行中的每个元素对应的(首)地址是: LOC[a1j]=LOC[a11]+(j-1) ×L (2) 第2行中的每个元素对应的(首)地址是: LOC[a2j]=LOC[a11]+n×L +(j-1) ×L (3) 第m行中的每个元素对应的(首)地址是: LOC[amj]=LOC[a11]+(m-1) n×L +(j-1) ×L

数据结构数组和广义表

数据结构数组和广义表

数据结构05数组与广义表数组与广义表可以看做是线性表地扩展,即数组与广义表地数据元素本身也是一种数据结构。

5.1 数组地基本概念5.2 数组地存储结构5.3 矩阵地压缩存储5.4 广义表地基本概念数组是由相同类型地一组数据元素组成地一个有限序列。

其数据元素通常也称为数组元素。

数组地每个数据元素都有一个序号,称为下标。

可以通过数组下标访问数据元素。

数据元素受n(n≥1)个线性关系地约束,每个数据元素在n个线性关系地序号 i1,i2,…,in称为该数据元素地下标,并称该数组为n维数组。

如下图是一个m行,n列地二维数组A矩阵任何一个元素都有两个下标,一个为行号,另一个为列号。

如aij表示第i行j列地数据元素。

数组也是一种线性数据结构,它可以看成是线性表地一种扩充。

一维数组可以看作是一个线性表,二维数组可以看作数据元素是一维数组(或线性表)地线性表,其一行或一列就是一个一维数组地数据元素。

如上例地二维数组既可表示成一个行向量地线性表: A1=(a11,a12,···,a1n)A2=(a21,a22, ···,a2n)A=(A1,A2, ···,Am) ············Am=(am1,am2, ···,amn)也可表示成一个列向量地线性表:B1=(a11,a21,···,am1)B2=(a12,a22, ···,am2)A=(B1,B2, ···,Bm) ············Bn=(a1n,a2n, ···,amn)数组地每个数据元素都与一组唯一地下标值对应。

数据结构讲义第5章-数组和广义表

数据结构讲义第5章-数组和广义表
对于一个矩阵结构,显然用一个二维数组来表示是非常 恰当的.但有时会遇到这样一类矩阵:在这种矩阵中有 许多值相同的元素或者是零元素,为了节省存储空间, 可以对这类矩阵进行压缩存储. 压缩存储是:为多个值相同的元素只分配一个存储空间: 对零元素不分配存储空间. 特殊矩阵:值相同的元素或者零元素在矩阵中的分布有 一定规律,则称此类矩阵为特殊矩阵,反之,称为稀疏 矩阵.
5.4 广义表
5)若广义表不空,则可分成表头和表尾,反之,一对表头和表尾 可唯一确定广义表 对非空广义表:称第一个元素为L的表头,其余元素组成的表称 为LS的表尾; B = (a,(b,c,d)) 表头:a 表尾 ((b,c,d)) 即 HEAD(B)=a, C = (e) D = (A,B,C,f ) 表头:e 表尾 ( ) TAIL(B)=((b,c,d)),
5.4 广义表
4)下面是一些广义表的例子; A = ( ) 空表,表长为0; B = (a,(b,c,d)) B的表长为2,两个元素分别为 a 和子表(b,c,d); C = (e) C中只有一个元素e,表长为1; D = (A,B,C,f ) D 的表长为4,它的前三个元素 A B C 广义表, 4 A,B,C , 第四个是单元素; E=( a ,E ) 递归表.
以二维数组为例:二维数组中的每个元素都受两个线性关 系的约束即行关系和列关系,在每个关系中,每个元素aij 都有且仅有一个直接前趋,都有且仅有一个直接后继. 在行关系中 aij直接前趋是 aij直接后继是 在列关系中 aij直接前趋是 aij直接后继是
a00 a01 a10 a11
a0 n-1 a1 n-1
a11 a21 ┇ a12 a22 ┇ ai2 ┇ … amj … amn … aij … ain … … a1j a2j … … a1n a2n β1 β2 ┇ βi ┇ βm

数据结构—第五章_数组和广义表1

数据结构—第五章_数组和广义表1
初始条件: 是 维数组 为元素 维数组, 初始条件:A是n维数组,e为元素 变量,随后是n 个下标值. 变量,随后是 个下标值. 操作结果:若下标不超界,则将e的 操作结果:若下标不超界,则将 的 值赋给所指定的A的元 值赋给所指定的 的元 素,并返OK. 并返 .
二维数组的定义: 二维数组的定义
初始条件: 是 维数组 为元素变量 维数组, 为元素变量, 初始条件:A是n维数组,e为元素变量, 随后是n 个下标值. 随后是 个下标值. 操作结果:若各下标不超界, 赋值为 操作结果:若各下标不超界,则e赋值为 所指定的A 的元素值, 所指定的 的元素值,并返 回OK. .
Assign(&A, e, index1, ..., indexn)
§5.1 数组的类型定义
ADT Array { 数据对象: 数据对象 D={aj ,j , ...,,j ,j | ji =0,...,bi -1, i=1,2,..,n } 数据关系: 数据关系 R={R1, R2, ..., Rn} Ri={<aj ,... j ,... j , aj , ...j +1, ...j > | 0 ≤ jk ≤ bk -1, 1 ≤ k ≤ n 且k ≠ i, 0 ≤ ji ≤ bi -2, i=2,...,n }
…………………. an1 an2 an3……..
按行序为主序: 按行序为主序: a11 a21 a22 a31 a32
k=0 1 2 3 4 …... …... ann n(n-1)/2 n(n+1)/2-1
an1
Loc( aij)=Loc(a11)+[ i*(i-1)/2 +(j-1)]*L
对角矩阵
a11 a12 0
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
i 1 n n 1
k i 1
b
n
k
jn ) L
LOC (0,0, 0) ci ji
i 1
数组的存储方式
★ 上式称为n维数组的映像函数
◆ ci的计算公式(参见P93分析) ◆ 容易看出,数组元素的存储位置是其下标的 线性函数
二、 数组的顺序存储表示和实现

详见P93分析
DestroyArray(&A);
操作结果:销毁数组A
Status Value(Array A,Elemtype &e,…);
// A是n维数组,e为元素变量,随后是n个下标值 // 若各下标不超界,则e赋值为所指定的A的元素值, 并返回OK
Status Assign( Array &A,Elemtype e,… );
sizeof( ElemType )); if(!A.base) exit(OVERFLOW);
// 求映像函数的参数ci,并存入A.constants[i-1]
i=1,2, … ,dim A.constans=(int *)malloc(dim*sizeof(int)); if(!A.constants) exit(OVERFLOW); // L=1,指针的增减以元素的大小为单位
第五章 数组和广义表

数组和广义表可以看成是线性表在下述含义上的 扩展

表中的数据元素本身也是一个数据结构
第一节 数组的定义

类似于线性表,抽象数据类型数组可以形式地 定义为下列形式

详见P90分析
ADT Array
{ 数据对象:ji= 0, … bi-1 , i=1,2, … ,n D={ | n>0} ∈ElemSet,
◆ 它可以看成是一个线性表
A=(a0,a1, … ,ap) (p=m-1或n-1)
数组的定义
◆ 其中每个数据元素aj是一个列向量形式的线性表 aj=(a0j,a1j, … , am-1,j) 0≤j≤n-1
◆ 或者ai是一个行向量形式的线性表
ai=(ai0,ai1, … , ai,n-1) 0≤i≤m-1
return ERROR;
A.dim=dim;
A.bounds=(int *)malloc(dim*sizeof(int));
if(!A.bounds) exit(OVERFLOW);
// 若各维长度合法,则存入A.bounds; 并求出A的元素总数elemtotal
elemtotal=1;
va_list ap; // ap为va_list类型,是存放变长
◆ 而在FORTRAN语言中,用的是以列序为主序
的存储结构
数组的存储方式
★ 因此,对于数组,一旦规定了它的维数和各维的 长度,便可以为它分配存储空间
◆ 反之,只要给出一组下标便可求得相应数组元素
的存储位置
数组的存储方式
★ 下面仅用以行序为主序的存储结构为例说明
◆ 假设每个数据元素占L个存储单元, 则二维
// 用于存放每维的长度
int *constants; // 数组映像函数常量基址,
由InitArray分配
// 用于存放系数ci } HString;
// 基本操作的函数原型说明
Status InitArray(Array &A,int dim,…); // 如果维数dim和随后的各维长度合法,则构造相应的 数组A,并返回OK
// 数组的顺序存储表示
# include <stdarg.h> // 标准头文件,提供宏va_start、va_arg和va_end // 用于存取变长参数表
# define MAX_ARRAY_DIM
8
// 假设数组维数的最大值为8
typedef struct
{ ElemType int dim; int *bounds; *base; // 数组元素基址,由InitArray分配 // 数组维数 // 数组维界基址,由InitArray分配
◆ 思路:参见上面的分析
数组的存储方式
★ 二维数组可由两种存储方式
◆ 以列序为主序(column major order)的存储方式
◆ 以行序为主序(row major order)的存储方式
数组的存储方式
◆ 在扩展BASIC、PL/1、COBOL、PASCAL和 C语言中,用的都是以行序为主序的存储结构
数组A中任一元素aij 的存储位置可由下式来
确定
数组的存储方式
LOC( i,j )= LOC(0,0)+(b2*i+j)×L ◆ 其中,LOC(i,j)是aij的存储位置 ◆ LOC(0,0)是a00的存储位置,即二维数组A 的起始存储地址,也称为基地址或基址
LOC ( j1 , j2 , jn ) LOC (0,0, 0) (b2 * bn * j1 b3 * bn * j2 bn * jn 1 j n ) L LOC (0,0, 0) ( ji
第二节 数组的顺序表示和实现
一、 数组的存储方式

数组一般不作插入或删除操作
数组的存储方式
◆ 即一旦建立了数组,则结构中的数据元素个数和 元素之间的关系就不再发生变动
◆ 因此,采用顺序存储结构表示数组是很自然的事
数组的存储方式
★ 由于存储单元是一维的结构,而数组是个多维的 结构,则利用一组连续存储单元存放数组的数据 元素就有个次序的约定问题
参数表信息的数组 va_start(ap,dim);
for(i=0,i<dim,++i)
{ A.bounds[i]=va_arg(ap,int); if( A.bounds[i] <0) return UNDERFLOW;
elemtotal*= A.bounds[i];
}
va_end(ap);
A.base=(ElemType *)malloc(elemtotal*
操作结果:如果各个下标不超界,则将e赋给所指定的A的
元素,并返回OK
数组的定义
★ 显然当n=1时,n维数组就退化为定长的线性表
★ 反之,n维数组也可以看是线性表的推广
◆ 由此,我们也可以从另一个角度来定义n维数组
数组的定义
★ 我们可以把二维数组看成是这样一个定长的 线性表
◆ 它的每个数据元素也是一个定长的线性表
DestroyArray(&A)
操作结果:销毁数组A
Value(A,&e,index1,…,indexn)
初始条件:A是n维数组,e为元素变量,随后是n个下标值 操作结果:如果各个下标不超界,则e赋值为所指定的A的 元素值,并返回OK
Assign( &A,e,index1,…,indexn )
初始条件:A是n维数组,e为元素变量,随后是n个下标值
// A是n维数组,e为元素变量,随后是n个下标值
// 若各下标不超界, 则将e赋给所指定的A的元素,
并返回OK
// 基本操作的算法说明
Status InitArray(Array &A,int dim,…) // 如果维数dim和随后的各维长度合法,则构造相应的 数组A,并返回OK
{
if(dim<1 || dim>MAX_ARRAY_DIM)
◆ 详见P91图5.1分析
Amn
a00 a01 a02 a0,n 1 a10 a11 a12 a1,n 1 am 1,0 am 1,1 am1, 2 a0,n 1
数组的定义
★ 如上图所示,A是一个二维数组,以m行n列 的矩阵形式表示
A.constants[dim-1]=1;
for(i=dim-2,i>=0,--i)
A.constants[i]=A.bounds[i+1]*A.constants[i+1];
return OK; }
// n称为数组的维数, bi是数组第i维的长度
// ji是数组元素的第i维下标
数据关系:
R={R1,R2, …Rn} Ri={< , >|
0≤jk≤bk-1, 1≤k≤n且k≠i 0≤ji≤bi-2

i=1,2, … ,n}
∈D
基本操作:
InitArray(&A,n,bound1,…,boundn) 操作结果:如果维数n和各维长度合法,则构造相应的 数组A,并返回OK
相关文档
最新文档