最新多维数组和广义表PPT课件
合集下载
第6章多维数组和广义表[51页]
6.3 特殊矩阵及其压缩存储 6.3.1 特殊矩阵
1.对称矩阵
若一个n阶方阵A中元素满足下列条件:
aij=aji 其中 0 ≤i, j≤n-1 , 矩阵。
则称A为对称
例如,图5-1是一个3*3的对称矩阵。
1 23 A= 2 5 4
6.1.2 多维数组在计算机的存放
怎样将多维数组中元素存入到计算机内存中呢?由于 计算机内存结构是一维的(线性的),因此,用一维 内存存放多维数组就必须按某种次序将数组元素排成 一个线性序列,然后将这个线性序列顺序存放在存储 器中 。
6.2 多维数组的存储结构
由于数组一般不作插入或删除操作,也就是说,一旦建 立了数组,则结构中的数组元素个数和元素之间的关系 就不再发生变动,即它们的逻辑结构就固定下来了,不 再发生变化。因此,采用顺序存储结构表示数组是顺理 成章的事了。本章中,仅重点讨论二维数组的存储,三 维及三维以上的数组可以作类似分析。
2.二维数组 矩阵是很多科学与工程计算中常见的数学模型,用高 级语言编程时,通常将矩阵描述为一个二维数组。二 维数组可以看成是向量的推广。
例如,设A是一个有m行n列的二维数组,则A可以 表示为:
`
a00 a01 ……
a0n-1
a10 a11 ……
a1n-1
…………………………. A=
a a m-1 0 m-1 1 ……
a a m-1 0 m-1 1 ……
am-1 n-1
2.地址计算
由于多维数组在内存中排列成一个线性序列,因此,若 知道第一个元素的内存地址,如何求得其它元素的内存 地址?对于二维数组,以行为主序的优先存储。 假设每个元素占c个存储单元,元素aij 的存储地址应为 第一个元素的地址加上排在aij 前面的元素所占用的单元 数,而aij 的前面有i行(0~i-1)共i×n个元素,而本行前面 又有j个元素,故aij的前面一共有i×n+j个元素,设a00的 内 存 地 址 为 LOC(a00) , 则 aij 的 内 存 地 址 为 LOC(aij)=LOC(a00)+(i×n+j)×c。
数组和广义表PPT课件
❖ 设在矩阵A中,有s个非零元素。令 e=s/(m*n),称e为矩阵的稀疏因子。通常 认为e≤0.05时称之为稀疏矩阵。
第18页/共57页
5.3.2稀疏矩阵的压缩存储
❖在存储稀疏矩阵时,由于非零元素的分布一般 是没有规律的,因此在存储非零元素的同时,还 必须同时记下它所在的行和列的位置(i,j)。反 之,一个三元组(i,j,aij)惟一确定了矩阵A的一个 非零元。因此,稀疏矩阵可由表示非零元的三元 组及其行列数唯一确定。
a0,0 a0,1 a1,0 a1,1 a1,2
a2,1 a2,2 a2,3 …. ai,j …. an-2,n-3 an-2,n-2 an-2,n-1 an-1,n-2 an-1, n-1
k=? m=?
数组B
a0,0 a0,1 a1,0 ...
ai,j
...
下标
012
k k+1
m
第16页/共57页
k=? m=?
数组B 下标
a1,1 a2,1 a2,2 a3,1 … ai,j
1234
k
… an,n
m
第11页/共57页
5.3.1(续)三角矩阵的压缩存储
❖ 三角矩阵:上(下)三角矩阵是指矩阵的下(上)
三角(不包括对角线)中的元素均为常数或零的n
阶矩阵,即非零元素的分布在矩阵中呈现为三角
形。
❖ 例如:一个4*4的三角矩阵。
❖ 压缩存储:为多个值相同的非零元素只分配 一个存储空间;对零元素不分配空间。
第8页/共57页
5.3.1特殊矩阵的压缩存储
❖ 特殊矩阵:非零元素按照一定的规律分布。 ❖ 常见的特殊矩阵有对称矩阵、三角矩阵、对角矩
阵等。 ➢ 对称矩阵:元素的值按照主对角线对称
第18页/共57页
5.3.2稀疏矩阵的压缩存储
❖在存储稀疏矩阵时,由于非零元素的分布一般 是没有规律的,因此在存储非零元素的同时,还 必须同时记下它所在的行和列的位置(i,j)。反 之,一个三元组(i,j,aij)惟一确定了矩阵A的一个 非零元。因此,稀疏矩阵可由表示非零元的三元 组及其行列数唯一确定。
a0,0 a0,1 a1,0 a1,1 a1,2
a2,1 a2,2 a2,3 …. ai,j …. an-2,n-3 an-2,n-2 an-2,n-1 an-1,n-2 an-1, n-1
k=? m=?
数组B
a0,0 a0,1 a1,0 ...
ai,j
...
下标
012
k k+1
m
第16页/共57页
k=? m=?
数组B 下标
a1,1 a2,1 a2,2 a3,1 … ai,j
1234
k
… an,n
m
第11页/共57页
5.3.1(续)三角矩阵的压缩存储
❖ 三角矩阵:上(下)三角矩阵是指矩阵的下(上)
三角(不包括对角线)中的元素均为常数或零的n
阶矩阵,即非零元素的分布在矩阵中呈现为三角
形。
❖ 例如:一个4*4的三角矩阵。
❖ 压缩存储:为多个值相同的非零元素只分配 一个存储空间;对零元素不分配空间。
第8页/共57页
5.3.1特殊矩阵的压缩存储
❖ 特殊矩阵:非零元素按照一定的规律分布。 ❖ 常见的特殊矩阵有对称矩阵、三角矩阵、对角矩
阵等。 ➢ 对称矩阵:元素的值按照主对角线对称
数组与广义表PPT优秀资料
a10 a11 … a1n-1
稀疏矩阵:矩阵中具(a有)相同三值的元元组素的顺排列序没表有规:律。三元组构成的顺序表作为稀疏矩阵的压缩存储
(b) 对称矩阵:aij = aji
方式,便于矩阵的转置、相乘等操作。
#define maxsize struct node { int i, j;
datatype v; };
Struct matrix {
int mu, nu, tu; struct node data[maxsize]; };
(b) 十字链表:三元组构成的链表作为稀疏矩阵的压缩存储方式, 便于矩阵的加减等非空元素数目变化大的运算。
ijv 结点结构
down right
(i,j,v)三元组表达一个非空元素。 Down指针连接同列的下一个非空元素; Right指针连接同行的下一个非空元素。
存储:素存储排非成空元一素的个同线时,性存储序位列置辅。助信息:(i, j, aij)
Li存nOt储mC(方ua,i式jnu)=:,例Ltu这O; C如些(a三0:0元)+组(二i*如n+维何j)*组c数织,组方既便矩可阵的以运看算?作是由每一行的所有元素作为一个元素构成 L定例成O位如的C(: : 一a的i给二维j)=定维数一LO行数组C维列组。(a0,既0数)如可+(何以组j*m确看+,定作i)*在是c也线由性每可表一以中行的的看位所置有作?元是素作由为一每个一元素列构成的的所一维有数组元,素也可作以看为作一是由个每一元列素的所构有元成素的作为一一个元素构 }给a两(s存两(s(a#但ibbtt10;d,rr))00定种储种e是uuj,对对fcciatt线 不 : 不 ,ni称称nn维行列ej)aaoo性同存同由称10矩矩ddm11ee表结储的于优优数为a阵阵ddx中点非构数aa一s……::tti先先组aaz的:空造组个[[eaammaiia一原元得是jj三10aa。: :==nnxx个子素出多元--ssaa11iijj位结的数维zz从CFii组ee]]置点同组结O,;;,而,和时的构唯PR如子,两,一A导T何表存种而表SR确结储不存致达CA定点位同储一A两行置的单N个L列辅存元非等种等?助储是空信结一,不元,息构维素先同:。结先。构(i的存,存,j, a这储存i储j)样完储必完须一方一按照式列行某:中种中次行的的序将优所所数先有组有元元和元素排列素素成优,一,个先再再线性的存存序存储列储。储下下方一一式列行。。。 m行n列,每个元素占c个存储单元 SCa例成aa0m0t=r00如的u-(1ac,: 一0t(bmaa二维,ac00am,t11维数dri)-x)1数组2……组。…aa既00ann可m--11-以1aan看00-011作是由每一行的所有元素作为一个元素构成的一维数组,也可以看作是由每一列的所有aa0100元素作为一个元素构
数据结构第5章数组和广义表2广义表ppt课件PPT精品文档33页
所以在对应的存储结构中,其存储结点也有相应划分。 对于原子结点,应包含值域; 对于表结点,应包含指示表头的表头指针域(指向
表中的第一个元素)和指示表尾的表尾指针域(指向除 去原表头元素后的广义表)。
4)D=( A , B ,C )
n=3,3个元素都是子表
5)E=(a, E)
n=2,a 为原子,E为子表
D=(A,B,C)=(( ),(e),(a,(b,c,d))),共享表
E=(a,E)=(a,(a,E))= (a,(a,(a,…….))),E为递归表
§5.4 广义表的类型定义
❖试用图形表示下列广义表
§5.4 广义表的类型定义 ❖广义表的特点
▪ 可共享
广义表的元素可以为其他广义表所共享 A = ( a , B ) =( a , ( b , c , d ) )
§5.4 广义表的类型定义
❖例1:求下列广义表的长度
1)A =( )
n=0,因为A是空表
2)B = ( e )
n=1,表中元素e是原子
3)C =( a ,( b , c , d ) ) n=2,a 为原子,(b, c, d)为子表
6. GetHead{ ( ( ) ) }= ( ) .
7. GetTail{ ( ( ) ) }= ( ) .
(a, b)
§5.4 广义表的类型定义 ❖注意:( )和( ( ) )的区别
前者为空表,长度=0,深度=1; 后者长度=1,深度=2,表头、表尾均为( )
§5.5 广义表的存储结构
❖广义表的存储结构
§5.4 广义表的类型定义
❖广义表的特点
▪ 有深度
广义表的深度定义为广义表中括弧的最大重数
如: H = (d, (e,( )))深度为3 注意:(1)空表的深度为1;
表中的第一个元素)和指示表尾的表尾指针域(指向除 去原表头元素后的广义表)。
4)D=( A , B ,C )
n=3,3个元素都是子表
5)E=(a, E)
n=2,a 为原子,E为子表
D=(A,B,C)=(( ),(e),(a,(b,c,d))),共享表
E=(a,E)=(a,(a,E))= (a,(a,(a,…….))),E为递归表
§5.4 广义表的类型定义
❖试用图形表示下列广义表
§5.4 广义表的类型定义 ❖广义表的特点
▪ 可共享
广义表的元素可以为其他广义表所共享 A = ( a , B ) =( a , ( b , c , d ) )
§5.4 广义表的类型定义
❖例1:求下列广义表的长度
1)A =( )
n=0,因为A是空表
2)B = ( e )
n=1,表中元素e是原子
3)C =( a ,( b , c , d ) ) n=2,a 为原子,(b, c, d)为子表
6. GetHead{ ( ( ) ) }= ( ) .
7. GetTail{ ( ( ) ) }= ( ) .
(a, b)
§5.4 广义表的类型定义 ❖注意:( )和( ( ) )的区别
前者为空表,长度=0,深度=1; 后者长度=1,深度=2,表头、表尾均为( )
§5.5 广义表的存储结构
❖广义表的存储结构
§5.4 广义表的类型定义
❖广义表的特点
▪ 有深度
广义表的深度定义为广义表中括弧的最大重数
如: H = (d, (e,( )))深度为3 注意:(1)空表的深度为1;
数据结构课件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]; } }
{ 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]; } }
第五章 多维数组与广义表
单元,且以行为主序存储,则元素a[2,1]相对于数组
空间起始地址的偏移量是___(40)___。
(40)A.5
B.10
C.15
D.25
2019
设数组a[3..16,5..20]的元素以列为主序存放,每个元 素占用两个存储单元,则数组元素a[i,j](3≤i≤16, 5≤j≤20)的地址计算公式为___(11)___。
(11)A.a-118+2i+28j B.a-116+2i+28j
C.a-144+2i+28j
D.a-146+2i+28j
2019
二维数组 X 的行下标范围是0~5,列下标范围是1~8,每 个数组元素占六个字节,则该数组的体积为__(6)__个字节, 若已知 X 的最后一个元素的起始字节地址为382,则 X 的 首地址(即第一个元素的起始字节地址)为 __(7)__,记为 Xd 。若按行存储,则 X{1,5] 的起始地址是 __(8)__, 结束字节 地址是 __(9)__。若按列存储,则 X[4,8]的起始字节地址为 __(10)__。
120 030 040 006
Aij=Bji
1000 2340 0006
M=4 N=2
i j Ai
T=5
j
00 1
01 2
11 3
21 4
M=2 N=4
i j Bi
T=5
j
00 1
01 2
11 3
21 4
思想一:直接交换a.data中i和j的内容
在编程时,简单而又自然的方法,是将矩阵描述为 一个二维数组。矩阵在这种存储表示之下,可以对 其元素进行随机存取。
数据结构 多维数组及广义表
第1列
Байду номын сангаас
aij的地址为:LOC(aij)= LOC(a00)+(j×m+i)× d
二维数组的逻辑特征和存储方法可以很容易地推广到多维数 组。 例如三维数组可以看成是由二维数组组成的线性表,三维数 组中的每个元素最多有三个直接前趋和三个直接后继。 同样,行优先原则和列优先原则也可以推广到多维数组,按 行优先原则时先排最右的下标,按列优先原则时先排最左的下 标。 得到行优先或列优先序列后,可以把它们依次存放在连续的 存储空间中,这就是多维数组的顺序存储,同样可实现随机存 取。
a00 C C a01 a11 C a12 a22 a0,n-1 a1,n-1
……
C
……
C
an-1,n-1
若上三角阵以行优先顺序存储,则地址公式与对称矩阵的行 优先顺序存储上三角的地址公式相似,元素的下标k为:
k= i(2n-i+1)/2+j-i i≤j (上三角) n(n+1)/2 i>j (下三角)
(1)行优先顺序存储下三角 以图(a)所示的n阶方阵为例,行优先顺序存储下三角时 元素的排列顺序如图(b)所示,存储在一维数组中如图(c )所示。
a00 a10 a20 a01 a11 a21 a22 a0,n-1 a1,n-1 a00 a01 a10 a11 a20 a21 a22 a0,n-1 a1,n-1
1.三元组顺序表
将三元组表中的三元组按照行优先的顺序排列成一个序列, 然后采用顺序存储方法存储该线性表,称为三元组顺序表。矩 阵A的三元组顺序表为:
0 11 0 -3 A6×7= 0 0 0 0 0 0 0 0 0 0 0 0 0 5 0 0 0 6 0 0 0 0 0 0 0 0 0 0 7 0 0 0 0 0 0 0 0 0 B6×7= 4 0
维数组和广义表ppt课件
int i,j; datatype val;
//行号、列号 //元素值
a
2n
a m1
a m2
a
mn
a11
Amn
a21
am
1
a12
a22
am
2
a1n
a2n
am
n
a11
Amn
a21
am 1
a12 a1n
a22
a2n
am 2
am
n
•非线性:元素受多个线性关系(如行、列)的约束,可多个前 驱和后继。
•元素类型相同,元素个数和元素间关系在数组建立后一般不能
2
求出i后便可得j=k−i精选(课i件−1)/2。
14
(2) 三角矩阵
下三角(上三角)矩阵:矩阵A[n][n]主对线上方(或下方)的 元素全部相同,均为常数c。多数情况下,常数c为零。
a 11 c c
a
21
a 22
c
a
n1
a n2
a
nn
a 11 a 12 a 1n
c
a 22
精选课件
19
1 三元组表
三元组表:三元组按行序(或列序)排列的顺序存储结构。
•三元组表是稀疏矩阵的一种顺序存储结构。 •一般还要指出当前表的长度,即非零元的个数 。 •要唯一确定稀疏矩阵,还必须知道矩阵的行数和列数。
const int maxsizedef struct {
第4章 多维数组和广义表
4.1 多维数组 4.2 数组的存储结构 4.3 矩阵的压缩存储
➢特殊矩阵和特殊矩阵
4.4 广义表的基本概念
精选课件
1
线性表——具有相同类型的数据元素的有限序列。 限制插入、删除位置
数据结构课件 第4章数组和广义表
4
4.1 多维数组
数组(array)的定义 4.1.1 数组 的定义
是由一组类型相同的数据元素构成的有序集合, 是由一组类型相同的数据元素构成的有序集合, 类型相同的数据元素构成的有序集合 每个数据元素称为一个数组元素( 每个数据元素称为一个数组元素(简称为元 ),每个元素受 每个元素受n(n≥ 个线性关系的约束 的约束, 素),每个元素受 ≥1)个线性关系的约束, 每个元素在n个线性关系中的序号 个线性关系中的序号i 每个元素在 个线性关系中的序号 1、i2、…、in 、 称为该元素的下标,并称该数组为n维数组 维数组。 称为该元素的下标,并称该数组为 维数组。
12
4.2 矩阵的压缩存储▲
在矩阵中很多值相同的元素并且它们的分布有一定的规律, 在矩阵中很多值相同的元素并且它们的分布有一定的规律, 特殊矩阵, 我们将这样的矩阵称为特殊矩阵 我们将这样的矩阵称为特殊矩阵,如对角阵等 。 若矩阵中有很多零元素称为稀疏矩阵 若矩阵中有很多零元素称为稀疏矩阵 对于这些特殊的矩阵,怎样存储能节省存储空间, 对于这些特殊的矩阵,怎样存储能节省存储空间,同时也能 有效地进行运算
本章学习要求与重点难点
2
本章学习要求: 本章学习要求:
1)了解数组的两种顺序存储表示方法, 1)了解数组的两种顺序存储表示方法,掌握数组在以行 了解数组的两种顺序存储表示方法 为主序的存储结构中的地址计算方法 2)了解矩阵压缩存储的必要性, 2)了解矩阵压缩存储的必要性,掌握特殊矩阵压缩存储 了解矩阵压缩存储的必要性 时的下标变换公式 3) 理解稀疏矩阵的两种压缩存储方法的特点和适用范 围,理解三元组表示的稀疏矩阵在进行转置等运算处理 时使用的处理方法 4)掌握广义表的结构特点、 4)掌握广义表的结构特点、存储表示和基本逻辑运算 掌握广义表的结构特点 求表头、求表尾) (求表头、求表尾) 5)了解有关广义表的递归算法 5)了解有关广义表的递归算法
多维数组和广义表
图6-1是一个n行m列的数组。
在二维数组中的每一个元素最多可以有两个直接前驱 和两个直接后继(边界除外),在n维数组中的每一个元素 最多可以有n个直接前驱和n个直接后继。所以多维数组是 一种非线性结构。
数组是一个具有固定格式和数量的数据有序集,每一 个数据元素有唯一的一组下标来标识,通常在很多高级语言 中数组一旦被定义,每一维的大小及上下界都不能改变。因 此,在数组上一般不做插入或删除数据元素的操作。在数组 中经常做的两种操作如下。
第6章 树
➢ 知识点
多维数组的逻辑结构和存储结构 特殊矩阵的压缩存储 稀疏矩阵的三元组存储、十字链表存储 广义表的逻辑结构、存储结构及其基本算法
➢ 难点
➢要求
第 6 章 (4)D=(B,C),D是长度为2的广义表,其中每一项都是子表。
下面讨论三角矩阵的压缩存储方法。 len=strlen(s);
Head(B)=a
Tail(B)= b
while(q->down!=hd[j]&&(q->down->row)<i)// 按行号找位置
return NULL; 广义表的元素由键盘输入,假定全部为字母。
2.带行指针的链表存储
6-1 多维数组
数组作为一种数据结构,其特点是结构中的元素可以是 具有某种结构的数据,但属于同一数据类型。比如,一维数 组可以看作一个线性表,二维数组可以看作“数据元素是一 维数组”的一维数组,三维数组可以看作“数据元素是二维 数组”的一维数组。一般把三维以上的数组称为多维数组, n维的多维数组可以视为n1维数组元素组成的线性结构。其 中每一个一维数组又由m个单元组成。
(3)按行为主存储,计算a32的存储地址 LOC(aij)=LOC(a00)+(i*n+j)*d // n为总列数 LOC(a32)=2000+(3×6+2)×4=2080
在二维数组中的每一个元素最多可以有两个直接前驱 和两个直接后继(边界除外),在n维数组中的每一个元素 最多可以有n个直接前驱和n个直接后继。所以多维数组是 一种非线性结构。
数组是一个具有固定格式和数量的数据有序集,每一 个数据元素有唯一的一组下标来标识,通常在很多高级语言 中数组一旦被定义,每一维的大小及上下界都不能改变。因 此,在数组上一般不做插入或删除数据元素的操作。在数组 中经常做的两种操作如下。
第6章 树
➢ 知识点
多维数组的逻辑结构和存储结构 特殊矩阵的压缩存储 稀疏矩阵的三元组存储、十字链表存储 广义表的逻辑结构、存储结构及其基本算法
➢ 难点
➢要求
第 6 章 (4)D=(B,C),D是长度为2的广义表,其中每一项都是子表。
下面讨论三角矩阵的压缩存储方法。 len=strlen(s);
Head(B)=a
Tail(B)= b
while(q->down!=hd[j]&&(q->down->row)<i)// 按行号找位置
return NULL; 广义表的元素由键盘输入,假定全部为字母。
2.带行指针的链表存储
6-1 多维数组
数组作为一种数据结构,其特点是结构中的元素可以是 具有某种结构的数据,但属于同一数据类型。比如,一维数 组可以看作一个线性表,二维数组可以看作“数据元素是一 维数组”的一维数组,三维数组可以看作“数据元素是二维 数组”的一维数组。一般把三维以上的数组称为多维数组, n维的多维数组可以视为n1维数组元素组成的线性结构。其 中每一个一维数组又由m个单元组成。
(3)按行为主存储,计算a32的存储地址 LOC(aij)=LOC(a00)+(i*n+j)*d // n为总列数 LOC(a32)=2000+(3×6+2)×4=2080
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.存储方式
(1)以行为主(row major order)
以行为主的存储方式也称为按行优先顺序方式,实现时按行号 从小到大的顺序,先存储第0行的全部元素,再存放第1行的元素、 第2行的元素……
一个2×3二维数组的逻辑结构如图6-2所示,以行为主的内存 映象如图6-3(a)所示,其分配顺序为:a00,a01,a02,a10 ,a11, a12。
进 入 夏 天 ,少 不了一 个热字 当头, 电扇空 调陆续 登场, 每逢此 时,总 会想起 那 一 把 蒲 扇 。蒲扇 ,是记 忆中的 农村, 夏季经 常用的 一件物 品。 记 忆 中 的故 乡 , 每 逢 进 入夏天 ,集市 上最常 见的便 是蒲扇 、凉席 ,不论 男女老 少,个 个手持 一 把 , 忽 闪 忽闪个 不停, 嘴里叨 叨着“ 怎么这 么热” ,于是 三五成 群,聚 在大树 下 , 或 站 着 ,或随 即坐在 石头上 ,手持 那把扇 子,边 唠嗑边 乘凉。 孩子们 却在周 围 跑 跑 跳 跳 ,热得 满头大 汗,不 时听到 “强子 ,别跑 了,快 来我给 你扇扇 ”。孩 子 们 才 不 听 这一套 ,跑个 没完, 直到累 气喘吁 吁,这 才一跑 一踮地 围过了 ,这时 母 亲总是 ,好似 生气的 样子, 边扇边 训,“ 你看热 的,跑 什么? ”此时 这把蒲 扇, 是 那 么 凉 快 ,那么 的温馨 幸福, 有母亲 的味道 ! 蒲 扇 是 中 国传 统工艺 品,在 我 国 已 有 三 千年多 年的历 史。取 材于棕 榈树, 制作简 单,方 便携带 ,且蒲 扇的表 面 光 滑 , 因 而,古 人常会 在上面 作画。 古有棕 扇、葵 扇、蒲 扇、蕉 扇诸名 ,实即 今 日 的 蒲 扇 ,江浙 称之为 芭蕉扇 。六七 十年代 ,人们 最常用 的就是 这种, 似圆非 圆 , 轻 巧 又 便宜的 蒲扇。 蒲 扇 流 传 至今, 我的记 忆中, 它跨越 了半个 世纪, 也 走 过 了 我 们的半 个人生 的轨迹 ,携带 着特有 的念想 ,一年 年,一 天天, 流向长
具有某种结构的数据,但属于同一数据类型。比如,一维数 组可以看作一个线性表,二维数组可以看作“数据元素是一 维数组”的一维数组,三维数组可以看作“数据元素是二维 数组”的一维数组。一般把三维以上的数组称为多维数组, n维的多维数组可以视为n1维数组元素组成的线性结构。其 中每一个一维数组又由m个单元组成。
பைடு நூலகம்
以行为主序的分配规律是:最右边的下标先变化,即最右下标 从小到大,循环一遍后,右边第二个下标再变……,从右向左, 最后是左下标。
(2)以列为主序(column major order)
以列为主的存储方式也称为按列优先顺序方式,实现时按列号 从小到大的顺序,先存储第0列的全部元素,再存储第1列的元素、 第2 列的元素……
(1)取值操作:给定一组下标,读取其对应的数据元素。 (2)赋值操作:给定一组下标,存储或修改与其相对应的 数据元素。
6.1.2 存储结构
通常,数组在内存被映象为向量,即用向量作为数组的一种存 储结构,这是因为在计算机内存储结构是一维的。数组的行列固 定后,通过一个映象函数,就可以根据数组元素的下标得到它的 存储地址。对于一维数组只要按下标顺序分配即可;对多维数组 分配时,要把它的元素映象存储在一维存储器中。
长 的 时 间 隧 道,袅
多维数组和广义表
➢要求
第6章目录
➢ 6-1 多维数组 ➢ 6-2 特殊矩阵的压缩存储 ➢ 6-3 稀疏矩阵 ➢ 6-4 广义表 ➢小 结 ➢ 验证性实验6:稀疏矩阵和广义表子系统 ➢ 自主性实验6:稀疏矩阵十字链表的存储 ➢ 单元练习6
6-1 多维数组
6.1.1 逻辑结构 数组作为一种数据结构,其特点是结构中的元素可以是
LOC(aijk)=LOC(a000)+( (i×n×p+ j×p +k) ×d (0下标起始的语言)
【例6-1】设二维数组A5×6,每个元素占4个字节(Byte),存储 器按字节编址。已知A的起始地址为2000。计算
(1)数组的大小
n×m×d=5×6×4=120 Byte
(2)数组结点a45的存储地址 LOC(aij)=LOC(a00)+(i*n+j)*d // n为总列数 LOC(a45)=2000+(4×6+5)×4=2116
图6-2所示的逻辑结构,以列为主的内存映象如图6-3(b)所示, 其分配顺序为:a00,a10,a01,a11,a02,a12 。
以列为主分配的规律恰好与以行为主次序相反:最左边的下标 先变化,即最左下标从小到大,循环一遍后,左边第二个下标再 变……,从左向右,最后是右下标。
2.存储地址
“以行为主”次序分配存储单元为例看其地址的计算
(1)二维数组中aij的地址 在C语言中数组中每一维的下界定义为0,数组的基址为
LOC(a00),每个数组元素占据d个字节,那么aij 的物理地址 可用一个线性寻址函数计算:
LOC(aij) = LOC(a00) + ( i×n + j ) × d (0下标起始的语言)
(2)三维数组中aijk的地址 同理对于三维数组元素aijk的物理地址为:
图6-1是一个n行m列的数组。
在二维数组中的每一个元素最多可以有两个直接前驱 和两个直接后继(边界除外),在n维数组中的每一个元素 最多可以有n个直接前驱和n个直接后继。所以多维数组是 一种非线性结构。
数组是一个具有固定格式和数量的数据有序集,每一 个数据元素有唯一的一组下标来标识,通常在很多高级语言 中数组一旦被定义,每一维的大小及上下界都不能改变。因 此,在数组上一般不做插入或删除数据元素的操作。在数组 中经常做的两种操作如下。
(3)按行为主存储,计算a32的存储地址 LOC(aij)=LOC(a00)+(i*n+j)*d // n为总列数 LOC(a32)=2000+(3×6+2)×4=2080
(4)按列为主存储,计算a32的存储地址 LOC(aij)=LOC(a00)+(j*m+i)*d // m为总行数 LOC(a32)=2000+(2×5+3)×4=2052
(1)以行为主(row major order)
以行为主的存储方式也称为按行优先顺序方式,实现时按行号 从小到大的顺序,先存储第0行的全部元素,再存放第1行的元素、 第2行的元素……
一个2×3二维数组的逻辑结构如图6-2所示,以行为主的内存 映象如图6-3(a)所示,其分配顺序为:a00,a01,a02,a10 ,a11, a12。
进 入 夏 天 ,少 不了一 个热字 当头, 电扇空 调陆续 登场, 每逢此 时,总 会想起 那 一 把 蒲 扇 。蒲扇 ,是记 忆中的 农村, 夏季经 常用的 一件物 品。 记 忆 中 的故 乡 , 每 逢 进 入夏天 ,集市 上最常 见的便 是蒲扇 、凉席 ,不论 男女老 少,个 个手持 一 把 , 忽 闪 忽闪个 不停, 嘴里叨 叨着“ 怎么这 么热” ,于是 三五成 群,聚 在大树 下 , 或 站 着 ,或随 即坐在 石头上 ,手持 那把扇 子,边 唠嗑边 乘凉。 孩子们 却在周 围 跑 跑 跳 跳 ,热得 满头大 汗,不 时听到 “强子 ,别跑 了,快 来我给 你扇扇 ”。孩 子 们 才 不 听 这一套 ,跑个 没完, 直到累 气喘吁 吁,这 才一跑 一踮地 围过了 ,这时 母 亲总是 ,好似 生气的 样子, 边扇边 训,“ 你看热 的,跑 什么? ”此时 这把蒲 扇, 是 那 么 凉 快 ,那么 的温馨 幸福, 有母亲 的味道 ! 蒲 扇 是 中 国传 统工艺 品,在 我 国 已 有 三 千年多 年的历 史。取 材于棕 榈树, 制作简 单,方 便携带 ,且蒲 扇的表 面 光 滑 , 因 而,古 人常会 在上面 作画。 古有棕 扇、葵 扇、蒲 扇、蕉 扇诸名 ,实即 今 日 的 蒲 扇 ,江浙 称之为 芭蕉扇 。六七 十年代 ,人们 最常用 的就是 这种, 似圆非 圆 , 轻 巧 又 便宜的 蒲扇。 蒲 扇 流 传 至今, 我的记 忆中, 它跨越 了半个 世纪, 也 走 过 了 我 们的半 个人生 的轨迹 ,携带 着特有 的念想 ,一年 年,一 天天, 流向长
具有某种结构的数据,但属于同一数据类型。比如,一维数 组可以看作一个线性表,二维数组可以看作“数据元素是一 维数组”的一维数组,三维数组可以看作“数据元素是二维 数组”的一维数组。一般把三维以上的数组称为多维数组, n维的多维数组可以视为n1维数组元素组成的线性结构。其 中每一个一维数组又由m个单元组成。
பைடு நூலகம்
以行为主序的分配规律是:最右边的下标先变化,即最右下标 从小到大,循环一遍后,右边第二个下标再变……,从右向左, 最后是左下标。
(2)以列为主序(column major order)
以列为主的存储方式也称为按列优先顺序方式,实现时按列号 从小到大的顺序,先存储第0列的全部元素,再存储第1列的元素、 第2 列的元素……
(1)取值操作:给定一组下标,读取其对应的数据元素。 (2)赋值操作:给定一组下标,存储或修改与其相对应的 数据元素。
6.1.2 存储结构
通常,数组在内存被映象为向量,即用向量作为数组的一种存 储结构,这是因为在计算机内存储结构是一维的。数组的行列固 定后,通过一个映象函数,就可以根据数组元素的下标得到它的 存储地址。对于一维数组只要按下标顺序分配即可;对多维数组 分配时,要把它的元素映象存储在一维存储器中。
长 的 时 间 隧 道,袅
多维数组和广义表
➢要求
第6章目录
➢ 6-1 多维数组 ➢ 6-2 特殊矩阵的压缩存储 ➢ 6-3 稀疏矩阵 ➢ 6-4 广义表 ➢小 结 ➢ 验证性实验6:稀疏矩阵和广义表子系统 ➢ 自主性实验6:稀疏矩阵十字链表的存储 ➢ 单元练习6
6-1 多维数组
6.1.1 逻辑结构 数组作为一种数据结构,其特点是结构中的元素可以是
LOC(aijk)=LOC(a000)+( (i×n×p+ j×p +k) ×d (0下标起始的语言)
【例6-1】设二维数组A5×6,每个元素占4个字节(Byte),存储 器按字节编址。已知A的起始地址为2000。计算
(1)数组的大小
n×m×d=5×6×4=120 Byte
(2)数组结点a45的存储地址 LOC(aij)=LOC(a00)+(i*n+j)*d // n为总列数 LOC(a45)=2000+(4×6+5)×4=2116
图6-2所示的逻辑结构,以列为主的内存映象如图6-3(b)所示, 其分配顺序为:a00,a10,a01,a11,a02,a12 。
以列为主分配的规律恰好与以行为主次序相反:最左边的下标 先变化,即最左下标从小到大,循环一遍后,左边第二个下标再 变……,从左向右,最后是右下标。
2.存储地址
“以行为主”次序分配存储单元为例看其地址的计算
(1)二维数组中aij的地址 在C语言中数组中每一维的下界定义为0,数组的基址为
LOC(a00),每个数组元素占据d个字节,那么aij 的物理地址 可用一个线性寻址函数计算:
LOC(aij) = LOC(a00) + ( i×n + j ) × d (0下标起始的语言)
(2)三维数组中aijk的地址 同理对于三维数组元素aijk的物理地址为:
图6-1是一个n行m列的数组。
在二维数组中的每一个元素最多可以有两个直接前驱 和两个直接后继(边界除外),在n维数组中的每一个元素 最多可以有n个直接前驱和n个直接后继。所以多维数组是 一种非线性结构。
数组是一个具有固定格式和数量的数据有序集,每一 个数据元素有唯一的一组下标来标识,通常在很多高级语言 中数组一旦被定义,每一维的大小及上下界都不能改变。因 此,在数组上一般不做插入或删除数据元素的操作。在数组 中经常做的两种操作如下。
(3)按行为主存储,计算a32的存储地址 LOC(aij)=LOC(a00)+(i*n+j)*d // n为总列数 LOC(a32)=2000+(3×6+2)×4=2080
(4)按列为主存储,计算a32的存储地址 LOC(aij)=LOC(a00)+(j*m+i)*d // m为总行数 LOC(a32)=2000+(2×5+3)×4=2052