第十一章 高级线性表教案.pptVIP

  1. 1、本文档共108页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第十一章 高级线性表 任课教员:张 铭 /mzhang/DS/ mzhang@ 北京大学信息科学与技术学院 网络与信息系统研究所 ?版权所有,转载或翻印必究 主要内容 11.1 多维数组 11.2 广义表 11.3 存储管理技术 11.1 多维数组 数组(Array)是数量和元素类型固定的有序序列 静态数组必须在定义它的时候指定其大小和类型 动态数组可以在程序运行才分配内存空间 多维数组(Multi-array)是向量的扩充 向量的向量就组成了多维数组 可以表示为: ELEM A[c1..d1][c2..d2]…[cn..dn] ci和di是各维下标的下界和上界。所以其元素个数为: 数组的空间结构 数组的存储 内存是一维的,所以数组的存储也只能是一维的 以行为主序(也称为“行优先”) 以列为主序(也称为“列优先”) 一个3 × 3的数组X的行优先表示: 内存中的存放是:1,2,3,4,5,6,7,8,9 数组的存储(续) 一个二维m × n数组中元素X[i][j](第i行第j列元素)的内存地址可以这样来计算: X[0][0](数组首地址)+(n×i+j)× 元素的长度(如C++中int型为4字节) 例如,我们已知一个数组的A[0][0]元素在内存的644的位置,假设元素的长度为8,那么我们就可以求得其他任意元素A[x][y]的位置,为644+len×(n×x + y)。 例如,n = m = 3,由上面公式得到A[2][3]元素的地址:644 + 8×(3×2+2)= 708 Pascal语言的存储实现是按行优先处理的,先排最右的下标,从右向左,最后最左的下标。 例如对于三维数组a[1..k,1..m,1..n]的元素axyz可以如下排列: Pascal语言的行优先存储 a111 a112 a113 … a11n a121 a122 a123 … a12n ………………………… a1m1 a1m2 a1m3 … a1mn a211 a212 a213 … a21n a221 a222 a223 … a22n ………………………… a2m1 a2m2 a2m3 … a2mn ┇ ak11 ak12 ak13 … ak1n ak21 ak22 ak23 … ak2n ………………………… akm1 akm2 akm3 … akmn FORTRAN语言采用列优先存储。先排最左的下标,从左向右,最后最右的下标。 例如对于三维数组a[1..k, 1..m, 1..n]的元素axyz可以如下排列: FORTRAN语言的列优先存储 a111 a211 a311 … ak11 a121 a221 a321 … ak21 ………………………… a1m1 a2m1 a3m1 … akm1 a112 a212 a312 … ak12 a122 a222 a322 … ak22 ………………………… a1m2 a2m2 a3m2 … akm2 ┇ a11n a21n a31n … ak1n a12n a22n a32n … ak2n ………………………… a1mn a2mn a3mn … akmn 行优先存储公式 设数组元素占d个存储单元, 3维矩阵行优先存储公式为: n维矩阵行优先存储公式为: C++多维数组ELEM A[d1][ d2]…[dn]; 数组的声明 在编译的时候如果已经知道数组每一维的大小: 声明一个10 × 10的整型数组:int num[10][10]; 只知道数组一个维的大小,那么也可以动态地创建一个二维数组。例如我们只要一个组有10个整数,但是不知道有多少个组:int (*num)[10]; 最后在程序运行的时候,可以计算出或者由用户指定它的第一个维数是n: num= new int[n][10]; 数组的声明:动态的声明 数组的声明:动态的声明 这里要注意的是,内存被分配出去也必须加以回收,否则会造成内存泄漏(memory leak) for(int i=0;irow;i++) delete[] X[i]; delete []X; 对于3维或者更高维的数组,过程是类似的 用数组表示特殊

您可能关注的文档

文档评论(0)

沃爱茜 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档