数据结构——基于Python语言(微课版) 课件T10_数组与广义表(矩阵).pptx

数据结构——基于Python语言(微课版) 课件T10_数组与广义表(矩阵).pptx

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

矩阵;回顾;预习检查;本章目标;数组;二维数组中有(p-m+1)(q-n+1)个数据元素。数组中的元素分别受行列关系的约束,在行关系约束中,ai,j+1是aij的直接后继元素,ai,j-1是aij的直接前驱元素;在列关系中,ai+1,j是aij的直接后继元素,ai-1,j是aij的直接前驱元素。

;二维数组也可以看作是一个一维数组,只不过这个一维数组的元素,也是一维数组。

同样的,三维数组可以看作是元素为二维数组的一维数组,或者是元素为一维数组的二维数组。

………

N维数组可以看作是元素为m维数组的N-m维数组

(m0,N0,m,N∈N+)。

;对于数组,通常只有两种操作:

查询:将一组类型相同的元素放入一个数组,根据下标进行访问

修改:给定一个数组,根据其下标对相应位置的数据元素进行修改

;存储结构有两种:行序优先存储和列序优先存储

(1)所谓行序优先,就是按行号递增的顺序一行一行地存取数据

(2)列序优先就是按列号递增的顺序一列一列地存取数据

;特殊矩阵的元素分布有一定规律,常见的特殊矩阵分为对称矩阵、三角矩阵和对角矩阵。

;对称矩阵:

若n阶方阵中的元素满足:aij=aji,1≤i,j≤n。则称其为对称矩阵。

如果按照行序优先存储的存储方式,将n阶对称矩阵M下三角中的元素(ij)或者上三角中的元素(ij)存储到一维数组A[0]~A[n(n+1)/2]中(A[0]不存储数据),那么A[k]与矩阵元素aij之间存在着如下的一一对应关系:

;对角矩阵:

若n阶方阵的元素满足:方阵中所有的非零元素都集中在以主对角线为中心的带状区域中,则称之为n阶对角矩阵。

若方阵主对角线上下方各有b条次对角线,则称b为矩阵半带宽,(2b+1)为矩阵带宽。

;稀疏矩阵的定义:

矩阵的非零元素较零元少,且分布没有规律,通常称这样的矩阵为稀疏矩阵。

;稀疏矩阵的压缩存储与特殊矩阵的压缩存储不同:

第一,其数据元素分布没有规律,无法根据下标直接获得数组中某个位置对应的元素,所示无法实现随机存储。

第二,它只存储非零元素,因此,除了存储非零元素的数值(value)之外,还要存储元素在矩阵中的行列数据(row,col),所以我们需要可以唯一确定矩阵中??个非零元素的三元组(row,col,value)。

;稀疏矩阵的创建:

创建稀疏矩阵与线性表或者堆栈的思路都大同小异:

(1)定义一个struct来存储结点信息;

(2)创建头结点,初始化稀疏矩阵容量;

(3)将头结点地址返回。

;稀疏矩阵的创建:

上述代码创建的只是一个空矩阵,需要住其中插入非0元素。

为了判断插入元素的位置,根据行序优先的原则,首先将当前元素的行值M-data[p].row与三元组数组的row进行比较,找到合适的插入位置。

然后再对列值进行比较,找到合适的插入位置

不同的比较结果流向不同的分支。

;稀疏矩阵的转置:

;稀疏矩阵的转置:

方案1:根据矩阵M中的列序进行转置。每查找M中的一列,都要完整地扫描其三元组数组A。因为A中存储的数据行列是有序的,所以得到的B也是有序的。

;稀疏矩阵的转置:

方案2:此方案需要事先知道M中每一列非零元素的个数,进而求得每一列的第一个元素在数组B中的位置,然后按照数组A中数据元素的顺序进行转置,将数据放到B中合适的位置。

;稀疏矩阵的十字链表表示:

用十字链表存储矩阵,存储数据的结点结构如下所示:

现有一个矩阵:

;稀疏矩阵的十字链表表示:

用M的十字链表存储:

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档