- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
南开大学数据结构课件4
第4章 数组和矩阵 学习内容 多维数组:行主描述、列主描述 更强大的数组:类Array1D、Array2D 矩阵类:Matrix 特殊结构矩阵 稀疏矩阵 4.1 数组 4.1.1 抽象数据类型 抽象数据类型Array{ 实例 形如(index,value)的数据对集合,其中任意两对数据的index值都各不相同 操作 Create():创建一个空的数组 Store(index,value):添加数据(index,value),并删除具有相同index值的数据对(若存在) Retrieve(index):返回索引值为index的数据对 } 例4.1 上个星期每天的高温(华氏度数): high={(sunday, 82), (monday, 79), (tuesday, 85), (wednesday, 92), (thursday, 88), (friday, 89), (saturday,91)} 数据对:(日期名—索引,当天温度—值) 将monday的温度改为83:Store(monday, 83) 获得friday的温度:Retrieve(friday) 另一种描述:high={(0,82), (1,79), (2,85), (3,92), (4,88), (5,89), (6,91)}日期名?数值 4.1.2 C++中的数组 索引(下标)形式: [i1][i2][i3]...[ik] ij——非负整数 k=1——一维数组,k=2——二维数组… 数组的声明 int score[u1][u2][u3]...[uk] ui——ij的取值范围,0≤ij<uj,1≤j≤k。 数组最多可以容纳n=u1u2u3...uk个值 C++编译器预留sizeof(score)=n*sizeof(int)个字节 start~start+size(score)-1——连续空间 4.1.3 多维数组的保存方式 计算机内存——一维,多维数组? 多维数组元素?start~start+size(score)-1 实现映射[i1][i2][i3]...[ik]?[0, n-1]map(i1, i2, i3, ..., ik)存储位置:start+map(i1, i2, i3, ..., ik)*sizeof(int) 一维数组:map(i1) = i1 多维数组的保存方式 二维数组就有些难度 第一维下标:行 第二维下标:列 到底按什么顺序来存储? 行主映射 行主映射:存储顺序为 第一行、第二行、… 每行内:位于第一列的那个元素、第二列、… 列主映射 二维数组的映射函数 行主次序 map (i1, i2) = i1u2 + i2u2——列的数目 如上例u2=6,map(i1, i2) = 6i1 + i2map(1, 3)=6+3=9map(2,5)=6*2+5=17 扩展至三维数组 a[3][2][4] [0][0][0], [0][0][1], [0][0][2]], [0][0][3], [0][l][0], [0][l][l], [0][1][2], [0][1][3],[1][0][0], [l][0][l], [1][0][2], [1][0][3], [1][1][0], [1][1][1], [1][1][2], [1][1][3],[2][0][0], [2][0][1], [2][0][2], [2][0][3], [2][1][0], [2][1][1], [2][l][2], [2][1][3] 映射函数: map(i1, i2 , i3) = i1u2u3 + i2u3 + i3 多维类似 4.1.4 类Array1D C++数组的缺陷 越界问题:int a[9]——a[-3]、a[9]、a[90]都允许出现在程序中,可能造成系统崩溃 输出问题:不支持cout a endl; 不支持对数组进行算术操作(当作向量对待) 类Array1D——功能更强的数组 封装动态一维数组 通过成员函数(操作),实现一维数组功能,同时解决上述缺陷 Array1D类定义 templateclass T class Array1D { friend ostream operator (ostream, const Array1DT); public: Array1D(int size = 0); Array1D(const Array1DT v); // copy constructor ~Array1D() {delete [] element;} T operator[](int i) const;
原创力文档


文档评论(0)