- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第五章数组和广义表汇
作为抽象数据类型的数组 一维数组 一维数组的示例 一维数组的特点 连续存储的线性聚集(别名 向量) 除第一个元素外,其他每一个元素有一个且仅有一个直接前驱。 除最后一个元素外,其他每一个元素有一个且仅有一个直接后继。 一维数组(Array)类的定义 #include iostream.h #include stdlib.h template class Type class Array { Type *elements; //数组存放空间 int ArraySize; //当前长度 void getArray ( ); //建立数组空间 public: Array(int Size=DefaultSize ); Array(const ArrayType x ); 一维数组公共操作的实现 二维数组 三维数组 行向量 下标 i 页向量 下标 i 列向量 下标 j 行向量 下标 j 列向量 下标 k 数组的ADT定义 5.2数组的顺序表示和实现 一维数组 二维数组 n维数组 各维元素个数为 m1, m2, m3, …, mn 下标为 i1, i2, i3, …, in 的数组元素的存储地址: 1 设二维数组A5,6的每个元素占4个字节,已知Loc(a00)=1000,A共占多少个字节? A的终端结点a45的起始地位为何?按行和按列优先存储时,a25的起始地址分别为何? 请按行及按列优先顺序列出四维数组A2*3*2*3的所有元素在内存中的存储次序,开始结点为a0000 . 数组的顺序存储表示和实现 p93-94 5.3矩阵的压缩存储 特殊矩阵 值相同的元素或零元素在矩阵中的分布有规律 对称矩阵 三角矩阵 对角矩阵 稀疏矩阵 值相同的元素或零元素在矩阵中的分布无规律,且零元素个数/矩阵所有元素个数 = 0.05 5.3.1 特殊矩阵的压缩存储 特殊矩阵的压缩存储 小结 特殊矩阵(如对称矩阵、三角矩阵、对角矩阵等)中,非零元素的分布有明显的规律,因此我们可以将其压缩存储到一维数组中,并找到每个非零元素在一维数组中的对应关系 5.3.2 稀疏矩阵 (Sparse Matrix) 1 用三元组表表示的稀疏矩阵及其转置 稀疏矩阵转置算法5.1思想p99A的列序 B的行序 设矩阵列数为Cols,对矩阵三元组表扫描Cols次。第k次检测列号为k的项。 第k次扫描找寻所有列号为k的项,将其行号变列号、列号变行号,顺次存于转置矩阵三元组表。 设矩阵三元组表总共有Terms项,其时间代价为 O ( Cols* Terms )。 若矩阵有200行,200列Cols ,10,000个非零元素Terms ,总共有2,000,000次处理。 快速转置算法5.2 p100 建立辅助数组rowSize和rowStart,记录矩阵转置后各行非零元素个数和各行元素在转置三元组表中开始存放位置。(转置前为列) 扫描矩阵三元组表,根据某项的列号,确定它转置后的行号,查rowStart表,按查到的位置直接将该项存入转置三元组表中。 转置时间代价为 O(max(Terms, Cols))。若矩阵有200列,10000个非零元素,总共需10000次处理。 快速转置算法 例 广义表的特性 有次序性 有长度 有深度 可递归 可共享 广义表的分类 广义表的表示方法 广义表结点定义 标志域 utype, 表明结点类型。0为表头结点,1 为整型原子结点,2为字符型原子结点,3为子表结点。 值域 value。当 utype = 0 时为表引用计数,= 1时为整数值,= 2 时为字符值, = 3 时为指向子表的表头结点的指针。 尾指针域 tlink。当 utype = 0 时为指向该表表头元素的指针;当 utype ? 0 时为指向同一层下一个表结点的指针。 广义表的深度 深度为广义表中括号的重数或()的层数,是广义表的一种量度。 Depth (E) = 1+Max { Depth (B), Depth (D) } Depth (B) = 1+Max { Depth (a), Depth (b) } = 1 Depth (D) = 1+Max { Depth (B), Depth (C),Depth (A)} Depth (C) = 1+Max { Depth (u), Depth ((x, y, z)) } Depth (A) = 1
文档评论(0)