Java 第9讲 数组和矩阵
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
82957
如何压缩存储? 只存储下三角部分的元素。
四、特殊矩阵的压缩存储
特殊矩阵的压缩存储——三角矩阵
3 cc c c 6 2c c c 4 81 c c 7 46 0 c 8 29 5 7
(a) 下三角矩阵
34 8 1 0 c2 9 4 6 cc15 7 cc c 0 8 cc c c 7
(b) 上三角矩阵
如何压缩存储? 只存储上三角(或下三角)部分的元素。
四、特殊矩阵的压缩存储
特殊矩阵的压缩存储——对角矩阵 对角矩阵:所有非零元素都集中在以主对角线为中心 的带状区域中,除了主对角线和它的上下方若干条对 角线的元素外,所有其他元素都为零。
a00 a01 0 0 0
a10 a11 a12 0 0
A=
0 a21 a22 a23 0
数组的特点
元素可以是原子类型或数组类型,但数据类型必须 相同; 数组是一个具有固定格式和数量的数据集合。
一、数组的定义和特点
一维数组示例
int A[ ]={1,2,3,4,5};
一维数组的逻辑结构是线性表。 元素受线性关系的约束,每一个数据元素最 多有一个前驱和最多有一个后继。
一、数组的定义和特点
地址
int A[ ]={8,3,5,9,6};
1000
1001 1002
8
1003
假设该数组在内存中的首地址是 1000,该数组的类型是int,假设
1004
1005
3
1006
每个int型数据在内存中占4个字节,
1007
则该数组的存储状态如图所示。
1008
1009 1010
5
A[3]的地址=1000+3*4=1012
特殊矩阵
特殊矩阵:矩阵中很多值相同的元素并 且它们的分布有一定的规律。
36478 62842 48169 74605 82957
对称矩阵
3 cc c c 6 2c c c 4 81 c c 7 46 0 c 8 29 5 7
三角矩阵
特殊矩阵
a00 a01 0 0 0 a10 a11 a12 0 0 0 a21 a22 a23 0 0 0 a32 a33 a34 0 0 0 a43 a44
0 0 a32 a33 a34
0 0 0 a43 a44
四、特殊矩阵的压缩存储
对角矩阵的压缩存储
a00 a01 0 0 0
0 a00 a01
a10 a11 a12 0 0 将带状区
a10 a11 a12
A=
0 a21 a22 a23 0 域立起来
0 0 a32 a33 a34 0 0 0 a43 a44
二、数组的存储结构和基本操作
地址
364 B=
592
1000
1001 1002
3
1003
1004
1005
1006
假设该数组在内存中的首地址是1000, 1007
6
该数组的类型是int,假设每个int型数
1008
1009
据在内存中占4个字节,则该数组按行 1010
4
主序的存储状态如图所示。
1011
1012
B=
a21 a22 a23 a32 a33 a34 a43 a44 0
t=i 映射到二维数组B中,映射关系 s=j-i+1
四、特殊矩阵的压缩存储
稀疏矩阵的压缩存储
15 0 0 0 0 0 0 11 0 0 0 0 A= 0 0 0 6 0 0 0 0 00 0 0 9 0 00 0 0
如何只存储非零元素?
多维数组示例:一个3行4列的二 维数组
A=
a00 a01 a02 a03 a10 a11 a12 a13 a20 a21 a22 a23
例如,元素a12受两个线性关系的约束,在行上有
一个行前驱a11和一个行后继a13,在列上有一个列前 驱a02和和一个列后继a22。
二、数组的存储结构和基本操作
数组的基本操作
在数组中插入(或)一个元素有意义吗?
将元素 x 插入 到数组中第1行第2列。
x
a11 a12 … a1n
A=
a21 a22 … a2n … … ……
A=
am1 am2 … amn
删除数组中 第1行第2列元素。
a11 a12 … a1n a21 a22 … a2n … … …… am1 am2 … amn
数据结构 Data Structure
第九讲 数组和矩阵
本讲的基本内容是:
数组的逻辑结构特征 数组的存储方式及寻址方法 特殊矩阵和稀疏矩阵的压缩存储方法
线性表——具有相同类型的数据元素的有限序列。 限制插入、删除位置
特 栈——仅在表尾进行插入和删除操作的线性表。
殊 线 性
队列——在一端进行插入操作,而另一端进行 删除操作的线性表。
表 串——零个或多个字符组成的有限序列 。
限制元素类型为字符
线性表——具有相同类型的数据元素的有限序列。
线性表——具有相同类型的数据元素的有限序列。
将元素的类型进行扩充
(多维)数组——线性表中的数据元素可以是 线性表,但所有元素的类型必须相同。
一、数组的定义和特点
数组的定义
数组是由一组类型相同的数据元素构成的有序集 合,每个数据元素称为一个数组元素(简称为元 素。
3
1003
1004
1005
1006
假设该数组在内存中的首地址是1000, 1007
5
该数组的类型是int,假设每个int型数
1008
1009
据在内存中占4个字节,则该数组按列 1010
6
主序的存储状态如图所示。
1011
1012
1013 1014
9
A[0][2]的地址=1000+(2*2+0)*4=1016 1015
二、数组的存储结构和基本操作
一维数组:
int A[ ]={8,3,5,9,6};
一维数组的存储采用顺序存储结构。
对一维数组的元素进行存取:数组名[下标值]
例如:A[2]=3;
int i=A[4];
要存取的单元内存地址的计算方法:
数组存储首地址+下标*每个元素占用字节数
二、数组的存储结构和基本操作
在对特殊矩阵进行存储时,为了节省存储空间,可以对 这类矩阵进行压缩存储。压缩存储的基本思想是: • ⑴ 为多个值相同的元素只分配一个存储空间; • ⑵ 对零元素不分配存储空间。
四、特殊矩阵的压缩存储
特殊矩阵的压缩存储——对称矩阵
36478
A=
62842 48169
对称矩阵特点:aij=aji
74605
1011
1012
1013 1014
9
1015
1016
1017 1018
6
1019
1020
二、数组的存储结构和基本操作
B= 3 6 4 592
二维数组的存储结构有以下两种方式:
行主序:先行后列,先存储行号较小的元素,行号 相同者先存储列号较小的元素。 列主序:先列后行,先存储列号较小的元素,列号 相同者先存储行号较小的元素。
1013 1014
5
A[0][2]的地址=1000+(0*3+2)*4=1008 1015
A[1][1]的地址=1000+(1*3+1)*4=1016
1016 1017
1018
9
1019
1020
1021 1022
2
1023
1024
二、数组的存储结构和基本操作
地址
364 B=
592
wenku.baidu.com
1000
1001 1002
注意:稀疏矩阵中的非零元素的分布没有规律。
四、特殊矩阵的压缩存储
将稀疏矩阵中的每个非零元素表示为: (行号,列号,非零元素值)——三元组 三元组表:将稀疏矩阵的非零元素对应的三元组所构成的集合,按行优先
的顺序排列成一个线性表。
15 0 0 0 0 0 0 11 0 0 0 0 A= 0 0 0 6 0 0 0 0 00 0 0 9 0 00 0 0
三元组表=( (0,0,15), (1,1,11), (2,3,6), (4,0,9) )
二、数组的存储结构和基本操作
数组的基本操作
⑴ 存取(取值):给定一组下标,读出对应的数组 元素; ⑵ 修改(赋值):给定一组下标,存储或修改与其 相对应的数组元素。 存取和修改操作本质上只对应一种操作——寻址
数组应该采用何种方式存储?
数组没有插入和删除操作,所以,不用预留空间, 适合采用顺序存储。
对角矩阵
稀疏矩阵
稀疏矩阵:矩阵中有很多零元素,而且零元素的分布 式没有规律的。
15 0 0 0 0 0 0 11 0 0 0 0 0 0 06 0 0 0 0 00 0 0 9 0 00 0 0
稀疏矩阵
四、特殊矩阵的压缩存储
在对矩阵进行存储时,当矩阵阶数较大时,矩阵所占用的存储 空间容量是巨大的,因此,需要研究矩阵的压缩存储问题,根 据不同矩阵的特点设计不同的存储方法,节省存储空间,同时 保证压缩之后的矩阵能正确进行各种矩阵运算。
A[1][1]的地址=1000+(1*2+1)*4=1012
1016 1017
1018
4
1019
1020
1021 1022
2
1023
1024
三、矩阵的定义
矩阵是一个具有m行n列的数表,共包 含有m*n 个数(元素),每个元素处在确定 行和列的交点位置上,与一对行号和列号唯 一对应。
矩阵是很多科学与工程计算问题中研究 的数学对象,在用高级语言编程时,一般采 用二维数组来存储矩阵。