严蔚敏数据结构 chap0005数组,广义表.ppt

  1. 1、本文档共27页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
严蔚敏数据结构 chap0005数组,广义表

数组性质 二维数组的基本操作 矩阵的压缩存储 定义 在高级语言(C, C++)编程中,通常用二维数组来存 储矩阵元素当矩阵里有很多0或者相同元素时,可以 考虑这些相同元素或0元素共用一个存储单元,也就 是要进行矩阵压缩。 特殊矩阵 对称矩阵、上三角阵、下三角阵和对角阵 稀疏矩阵 特殊矩阵 对称矩阵 特殊矩阵 特殊矩阵 特殊矩阵 系数矩阵 系数矩阵的基本操作 广义表 定义 广义表是线性表的推广,也称为列表(Lists),一般 记作: 广义表的存储结构 常采用链式存储结构。需要两种结构的结点:一种是原 子结点,另一种是表结点,用以表示列表。 广义表的基本运算 广义表的建立 统计广义表的长度 统计广义表的深度 递归运算 返回广义表表头(尾) 广义表遍历 下课了。。。 * * 第五章 数组 广义表 数 据 结 构 5.1 数组的定义 定义 第 5 章 数组和广义表 mn m m n n n m A a .... a a .... .... .... .... a .... a a a .... a a 2 1 2 22 21 1 12 11 = × n m × 也可以看成是m个行向量 可以看成是 个列向量 n 可看成是一种特殊的线性表,其特殊在 于表中的数据元素本身也是一个线性表。 数组是一组有固定个数的元素的集合。 元素个数固定 一旦定义了一个数组,它的维数和维界就不能再改变 只能对数组进行存取元素和修改元素的操作。 元素具有相同的数据类型 每个元素都和唯一的下标对应 随机存储结构 可随机存取数组中的任意数据元素。 数 据 结 构 5.2 数组的顺序存储 类型特点: 第 5 章 数组和广义表 1)不考虑插入和删除操作; 2)数组是多维的结构,而存 储空间是一个一维的结构。 数 据 结 构 5.1 数组的定义 运算 第 5 章 数组和广义表 获得特定位置的元素值; 修改特定位置的元素值。 主要操作是数据元素的定位,即给定元素 的下标,得到该元素在计算机中的存放位置。 其本质是地址计算问题。 有两种顺序映象的方式: 以行序为主序; 以列序为主序。 数 据 结 构 5.2 数组的顺序存储和实现 以行序为主序 第 5 章 数组和广义表 例如: a1,2 a1,1 a1,3 a2,1 a2,2 a2,3 a1,2 a1,1 a1,3 a2,1 a2,2 a2,3 L 二维数组Amxn中任一元素ai,j 的存储位置 LOC(i,j)=LOC(1,1) + (n×(i-1)+(j-1))× 称为基地址或基址。 L 数 据 结 构 5.2 数组的顺序存储和实现 以列序为主序 第 5 章 数组和广义表 例如: L 二维数组Amxn中任一元素ai,j 的存储位置 LOC(i,j)=LOC(1,1) + (m×(j-1)+(i-1))× 称为基地址或基址。 L a1,2 a1,1 a1,3 a2,1 a2,2 a2,3 a2,1 a1,1 a1,2 a2,2 a1,3 a2,3 数 据 结 构 5.2 数组的顺序存储 第 5 章 数组和广义表 例如: 设有二维数组A[10][20],其每个元素占2 个字节,第一个元素A1,1的存储地址为100, 则按行优先顺序存储时元素A6,6的存储地址为? 若按列优先顺序存储时元素A6,6的存储地址为? A 6,6=100+[(6-1)*20+(6-1)]*2=310 按行优先 按列优先 A 6,6=100+[((6-1)*10+(6-1)]*2=210 二维数组的显示 读取二维数组中的元素 二维数组的加法 二维数组的减法 二维数组的点乘 二维数组的点除 【算法5-4】 二维数组的加法 (两个二维数组A+B)。 思路:两个数组之间对应位置的元素值相加的结果再存储到结果数组的同一位置上。 void MatrixADD(int A[maximum][maximum], int B[maximum][maximum], int result[maximum][maximum]) /* 两个二维数组相加 */ { int i,j; for(i=0;imaximum;i++) for(j=0;jmaximum;j++) result[i][j]=A[i][j]+B[i][j]; } 两个数组必须是同样大小,否则无法完成操作,结果数组也是相同的大小。

文档评论(0)

wyjy + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档