数据结构-第五章.ppt

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

数 据 结 构 第五章 数组和广义表 引言 前面章节介绍的数据元素都是非结构的原子类型,如:int、char。 本节介绍的数据元素不再是一个简单类型。 5.1 数组的定义 一维数 定义:相同类型的数据元素的集合。 5.1 数组的定义 5.1 数组的定义 多维数组是一维数组的推广 如: 其中n为数组的维数,ji称为第i维的长度。 如:a235 5.1 数组的定义 如果我们把一维数组看作是一个数据元素,则我们可以把多维数组看成是一个线性表。 可以是列向量,也可以是行向量。 5.1 数组的定义 5.2 数组的顺序表示和实现 对于一个数组一旦定义,维数和维界确定,不会改变。 将多维数组存储到一维的结构中,我们多采用: 列优先:以列序为主序 行优先:以行序为主序 5.2 数组的顺序表示和实现 5.2 数组的顺序表示和实现 二维数组a[m][n],按照行优先存放。 设数组开始存放位置 LOC( 0, 0 ), 每个元素占用 l 个存储单元,则a[i][j]的地址: LOC ( i, j ) = LOC( 0, 0 ) + ( i * n + j ) * l 5.2 数组的顺序表示和实现 同理,可以推得多维数组的地址计算公式: 5.3 矩阵的压缩存储 压缩存储:为多个元素分配一个存储空间;零元不分配空间。 特殊矩阵:如果相同的元素或零元的分配有一定的规律。 稀疏矩阵:0比较多、且分布没有什么规律的矩阵。 5.3 矩阵的压缩存储 有一些比较特殊的矩阵,如:上三角矩阵(下)、对称矩阵、对角矩阵等,我们可以利用它们的特殊性来压缩存储矩阵。 实质:为节省存储空间,对可以不存储的元素,如零元素或对称元素,不再存储。 5.3.1 特殊矩阵——对称矩阵 设有一个 n?n 的矩阵,满足aij = aji,则为对称矩阵。 如果用一维数组sa存放该对称矩阵的下三角,并 按照行优先存放。 则sa[k]存放的元素有以下关系: 5.3.1 特殊矩阵——三角矩阵 5.3.1 特殊矩阵——对角矩阵 5.3.2 稀疏矩阵 稀疏矩阵:m*n的矩阵中,有t个元素不为零。 为了节省空间,我们只存储非0元。用三元组(i,j,aij)来存放数据。但还需要说明维数和维界。 5.3.2 稀疏矩阵——三元组顺序表 #define MAXSIZE 12500 typedef struct{ int i,j; ElemType e; }Triple; typedef union{ Triple data[MAXSIZE+1]; int mu,nu,tu; }TSMatrix; 5.3.2 稀疏矩阵——三元组顺序表 操作:矩阵的转置。 m*n - n*m T(i,j) - M(j,i) aij与aji互换 用三元组表表示的稀疏矩阵及其转置 if (T.tu){ q=1; for(col=1;col=M.nu;++col) for(p=1;p=M.tu;++p) if(M.data[p].j==col) { T.data[q].i=M.data[p].j; T.data[q].j=M.data[p].i; T.data[q].e=M.data[p].e; ++q; } } 5.3.2 稀疏矩阵——十字链表 5.3.2 稀疏矩阵——十字链表 例题: 5.4 广义表 广义表: n ( ? 0 )个表元素组成的有 限序列,记作LS = (a0, a1, a2, …, an-1)。 LS是表名,ai是表元素,它可以是表 (称 为子表),可以是数据元素(称为原子)。 n为表的长度。n = 0 的广义表为空表。 n 0时,表的第一个表元素称为广义表 的表头(head),除此之外,其它表元素组 成的表称为广义表的表尾(tail)。 5.4 广义表 练习: 1、A=(), B=(()) 2、B=(e) n=? GetHead(B)=? GetTail(B)=? 3、C=(a,(b,c,d)) n=? GetHead(C)=? GetTail(C)=? 4、D=(A,B,C) n=? GetHead(D)=? GetTail(D)=? 5、E=(a,E) n=? GetHead(E)=? GetTail(E)=? 5.5 广义表的存储结构 由于广义表的特殊结构,所以难以用顺序存储结构表示,通常用链表存储结构。 5.5 广义表的存储结构 练习: A=() B=(e) C=(a,(b,c,d)) D=(

您可能关注的文档

文档评论(0)

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

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

版权声明书
用户编号:5024214302000003

1亿VIP精品文档

相关文档