- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第五章数组
数组也是一种常用的数据结构, 是线性表的推广,大多数的程序设计语言都提供数组来描
述数据。书中的其它数据结构的顺序存储结构多是以数组形式来描述的。 本章将讨论数组的逻
辑结构和它的存储方式及几种特殊矩阵的压缩存储方法。
5?1数组的概念
一、 定义
数组是由下标与值组成的数偶的有序集合。 即它的每一个元素是由一个值与一组下标所确
二、 说明
对于每组有定义的下标总有一个相应的数值与之对应,并且这些值都是同一类型的;
2?下标决定了元素的位置,数组中各元素之间的关系是由下标体现出来,下标的个数决 定了数组的维数;
3.因为由下标所决定的位置之间的关系可以看成是一种有序的线性关系,因此也可以说
数组是有限个相同类型数据元素组成的有序序列。 从这个角度看,数组是线性的推广,它的逻
辑结构实际是一种线性结构。
三、 实例
1?一维数组[a o, a !,…,a n-i]由n个元素组成,每个元素除具有相同类型的值外, 还有一个下标以确定元素的位置,显然一维数组是一个线性表。
二维数组 如图5.1.1所示。
a0 0 a0 1 …a0n4 I
a1 0 a1 1 …a1 n —
am40 amJ1 am 4 n 4
图5.1.1 mx n的二维数组
由mxn个元素组成,元素之间是有规则的排列。 每个元素由值及一对能确定元素位置的下标
组成。按数组的行关系的描述,
(a00 , a0 1 ,…,a0n-1 , 同理,按数组的列关系的描述,
(a0 0 , a 1 0 , , am -1 0 ,
也可以把二维数组写成:
aij是aij+1的直接后继;那么A mn可看成是线性表:
a10 , a 11 , , a1n-1 , , am-10 , am- 11 , , am-1 n-1)
aij的直接后继是 a+1 j;对应的线性表为:
a01 , a 11 , , am-11 , , a0n-1 , a1n-1 , , am-1 n-1)
[[a 00 , a°1 ,…,a°n -1] , [a10 , a11 ,…,a1n-1],
,[am-10 , am-11 ,…,am-1 n-1]]
或 [[a 0 0 , a 1 0 , , a m-1 o], [a 0 1 , a1 1 , , a m -11 ] , , [a 0 n -1 , a 1 n- 1 , , am -1 n-1]]
那么,二维数组就是一个具有 m个(或n个)元素的特殊线性表,其元素为一维数组。
3?对于n维数组,每个元素由值及 n个能确定元素位置的下标组成,按数组的 n个下标
变化次序关系的描述,可以确定数组元素的前驱和后继关系并写出对应的线性表。 n维数组也
可以由元素为(n- 1)维数组的特殊线性表来定义, 这样维数大于一的多维数组是由线性表结
构辗转合成得到的,是线性的推广。
5.2数组的存储
从定义可知多维数组中的元素之间的关系, 是一种线性关系;但是多维数组不能象一般线
性表那样做插入和删除运算。多维数组一旦建立,其中元素的个数和它们之间的关系也就不会 发生变化。因此,很自然采用顺序存储结构, 即把数组中各元素的值按某种次序存放在计算机
的一组连续存储单元中。采用数组的顺序存储可以进行随机存取或对数组元素的值进行修改, 那么如何通过数组下标值计算出该元素的存放地址是实现数组的顺序存储方式首先要解决的 问题,下面将详细推倒出二维数组的存储地址的计算公式并给出一般的 n维数组的存储地址的
计算公式。
5.2.1 一维数组顺序存储结构
一维数组a[t]是由元素a[0], a[1],…,a[t-1]组成的有限系列,若数组的每个元素占 s个
存储单元,并且从地址 a开始依此分配数组各元素,则分配情况如图 5.2.1所示。
a[0]
a[1]
a[i]
a[t-1]
f a
图5.2.1 一维数组各元素存储分配情况
若用a[i]来表示数组的第i个元素的存储位置,则 a[i]可由下式确定:
a[i] = a[0] + i . s = a+ i . s 0 v i w t — 1
5.2.2二维数组顺序存储结构
—、二维数组直观表示形式 二维数组a[t 1][t 2],可直观写成如图 5.2.2所示的矩阵形式。
a。。 a。1 …a°t24 I
a10 a11 …112 4
,8^40 ^41 at1 ^t2
图5.2.2二维数组的表示形式
、二维数组顺序存储的两种方式
二维数组顺序存储有两种方式:一种是以行序为主序,另一种是以列序为主序。
1以行序为主序进行存储分配的方法 首先存储行号为0的t2个元素,对于这t2个元素
按列号从小到大依次存储;紧接着存储行号为 1的t2个元素;… 最后存储行号为(t2- 1 )的
t2个元素。若从地址a开始依此分配数组各元素,
文档评论(0)