- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构与程序设计 南开大学软件学院 2008 李耀国 Chapter4 Arrays and Matrices 4.1 Arrays 4.2 Matrices 4.3 Special Matrices 4.4 Sparse Matrices Chapter4 Arrays and Matrices 首先我们讨论多维数组的行主描述形式和列主描述形式,并把多维数组映射成一维数组。 由于C++无法保证数组下标的合法性。同时,C++也未能提供数组的输入、输出以及简单的算术运算。我们针对一维数组和二维数组分别设计了类Array 1D和类Array 2D。 矩阵通常被描述成一个二维数组。不过,矩阵的索引通常从1开始,而不是像数组那样从0开始,并且通常使用A(i,j)而不是A[i][j]来引用矩阵中的元素(i,j)。为此,设计了另一个类Matrix以便更好地描述矩阵。 本章还考察了一些具有特殊结构的矩阵,如对角矩阵、三对角矩阵和对称矩阵。与采用二维数组描述矩阵相比,采用公式化的方法来描述这些特殊矩阵所需要的空间将大大减小,同时,公式化的描述方法还可以显著地节省矩阵操作所需要的运行时间。我们在最后一节给出了稀疏矩阵的公式化描述和链表描述。 4.1 Arrays 数组(Array)是数据结构中最基本的类型,是一种循序的结构,是存储同一类数据的数据结构。 4.1.1 ADT ADT4-1 数组的抽象数据类型描述 抽象数据类型Array { 实例 形如(index,value)的数据对集合,其中任意两对数据的index值都各不相同 操作 Create():创建一个空的数组 Store( index, value):添加数据(index, value),同时删除具有相同index值的数据对(如果存在) Retrieve( index):返回索引值为index的数据对 } 4.1.2 C++ Array C++数组的索引(也称为下标)须采用如下形式:[i1][i2][i3]...[ik];其中ij为非负整数。 如果k为1,则数组为一维数组,如果k为2,则为二维数组。i1是索引的第一个坐标,i2是第二个,ik是第k个。 在C++中,值为整数类型的k维数组score可用如下语句来创建:int score[u1][u2][u3]...[uk]; 其中ui是正的常量或表达式。对于这样一个数组描述,索引ij的取值范围为:0≤ij<uj, 其中1≤j≤k。因此,该数组最多可以容纳n=u1u2u3...uk个值。整个数组所需要的内存空间为sizeof(score)=n*sizeof(int)个字节。 C++编译器将为数组预留这么多空间。假如预留空间的开始地址为start,则该空间将延伸至start+size(score)-1。 4.1.2 C++ Array 在C++语言中,数组声明的长度,索引值都从0开始计数,有些程序语言从1开始计数,如VB。 Pascal语言可以由用户指定数组的索引值的启始值和终止值: Pascal数组声明格式: type 数据类型 = array[数组范围] of 数据类型 Pascal数组程序范例: type RealArray = array[3..9] of real; Var NumberA : RealArray; 4.1.3 Row and Column Major Mappings 为了实现与数组相关的函数Store和Retrieve,需要确定索引值在[start, start+n*sizeof(score)-1]中的相应位置。实际上就是把数组索引[i1][i2][i3]...[ik];映射到[0,n-1]中的某个数map(i1, i2, i3, …ik),使得该索引所对应的元素值存储在以下位置: start+map(i1, i2, i3, …ik)*sizeof(int) 当数组维数为1时(即k=1),使用以下函数:map(i1)=i1 4.1.3 Row and Column Major Mappings 我们可以用二维空间来比喻二维数组;二维数组的每个数据由行和列来确定其位置。 二维数组的声明: int Data[5][4]; C++语言会在内存中为我们分配出一个大小为5*4的二维空间,如右图: 4.1.3 Row and Column Major Mappings 内存位置: 我们假设数组的第一个元素启始地址为X Data[i][j]的内存位置=数组的第一个元素位置+[(i*每一行元素的个数)+j]*(所声明数据类型所站的大小) 我们用LOC(i,j)来表示Data[i][j]的内存位置 4.1.3 Row and Column Major Mappings 以前,
您可能关注的文档
最近下载
- 安徽省合肥市第四十六中学2024-2025学年八年级下学期期中考试数学卷[含答案].pdf VIP
- 《教师安全培训》ppt课件完整版.pptx VIP
- 蒂森823扶梯图纸.pdf VIP
- GB50169-2016 电气装置安装工程接地装置施工及验收规范附条文.docx VIP
- 字典电子版.doc VIP
- 铁总工电〔2018〕125号普速铁路桥隧建筑物修理规则.docx VIP
- 男性私密项目培训.pptx
- 宁波市2025年小学生科普知识学习体验活动-高段组(参考答案) .pdf VIP
- 安徽省合肥市2024-2025学年八年级下学期期中教学质量检测数学试卷(含详解).pdf VIP
- 2024届山东潍坊高三高考模拟训练物理卷 .pdf VIP
文档评论(0)