数组和广义表 .ppt
《数组和广义表 .ppt》由会员分享,可在线阅读,更多相关《数组和广义表 .ppt(49页珍藏版)》请在三一办公上搜索。
1、第5章 数组和广义表,主要内容,数组的定义 数组的顺序表示和实现 矩阵的压缩存储及典型算法 广义表及其应用(选讲),主要内容,数组的逻辑特征一个数据元素可能有多个直接前趋和多个直接后继,重点与难点,本章的重点二维数组的存储方式、几种特殊矩阵的存储方式(对称矩阵、上/下三角矩阵、稀疏矩阵)、稀疏矩阵的快速转置算法 本章的难点稀疏矩阵的三元组表示及其三元组表示下的快速转置、相乘算法,5.1 数组的定义,数组的特点数组中各元素具有统一的类型。数组元素的下标一般具有固定的上界和下界。可以看成是由m个行向量组成的向量,也可以看成是n个列向量组成的向量。二维数组Amn每个数据元素可以又是一个线性表结构。,
2、5.1 数组的定义,每个数据元素可以又是一个线性表结构。,5.1 数组的定义,在C语言中,一个二维数组类型可定义为其分量类型为一维数组类型的一维数组类型 elemtype array2mn;等价于:elemtype array1n;array1 array2m;,5.1 数组的定义,数组的定义若线性表中的数据元素为非结构的简单元素,则称为一维数组,即为向量;若一维数组中的数据元素又是一维数组结构,则称为二维数组;依次类推,若二维数组中的元素又是一个一维数组结构,则称作三维数组。线性表结构是数组结构的一个特例,而数组结构又是线性表结构的扩展。,5.1 数组的定义,抽象数据类型数组的ADT定义AD
3、T Array 数据对象:ji=0,.,bi-1,i=1,2,.,n;D=aj1j2.jn|n(0)称为数组的维数,bi是数组第i维的长度,ji是数组元素的第i维下标,aj1j2.jn(-ElemSet 数据关系:R=R1,R2,.Rn Ri=|0i,0=ji=bi-2,aj1.ji.jn,aj1.ji+1.jn(-D,i=2,.n),5.1 数组的定义,抽象数据类型数组的ADT定义基本操作:InitArray(&A,n,bound1,.,boundn)操作结果:若维数和各维长度合法,则构造相应数组A,返回OK。DestroyArray(&A)操作结果:销毁数组A。Value(A,&e,ind
4、ex1,.,indexn)初始条件:A是n维数组,e为元素变量,随后是n个下标值。操作结果:若各下标不超界,则e赋值为所指定A的元素值,返回OK。Assign(&A,e,index1,.,indexn)初始条件:A是n维数组,e为元素变量,随后是n个下标值。操作结果:若下标不超界,则将e的值赋给 所指定的A的元素,并返回OK。ADT Array,5.2 数组的顺序表示和实现,存储结构顺序存储:(多)对数组一般不做插入和删除操作链式存储:(少)对稀疏矩阵计算机的存储结构是一维的,而数组一般是多维的,怎样存放?事先约定按某种次序将数组元素排成一列序列,然后将这个线性序列存入存储器中。二维数组行优先
5、顺序(Row Major Order)BASIC、PL/1、COBOL、PASCAL和C语言列优先顺序(Column Major Order)FORTRAN语言,5.2 数组的顺序表示和实现,列优先 行优先,5.2 数组的顺序表示和实现,无论规定行优先或列优先,只要知道以下三要素便可随时求出任一元素的地址(这样数组中的任一元素便可以随机存取!):开始结点的存放地址(即基地址);维数和每维的上、下界;每个数组元素所占用的单元数二维数组Ac1.d1,c2.d2,行优先存储LOC(aij)=LOC(ac1,c2)+(i-c1)*(d2-c2+1)+j-c2)*L 列优先存储LOC(aij)=LOC(
6、ac1,c2)+(j-c2)*(d1-c1+1)+i-c1)*L,5.2 数组的顺序表示和实现,例:一个二维数组A,行下标的范围是1到6,列下标的范围是0到7,每个数组元素用相邻的6个字节存储,存储器按字节编址。那么,这个数组的体积是 个字节。例:设数组a160,170的基地址为2048,每个元素占2个存储单元,若以列序为主序顺序存储,则元素a32,58的存储地址为。,288,8950,LOC(a32,58)=2048+(58-1)*(60-1+1)+32-1)*2,5.3 矩阵的压缩存储,如何存储矩阵的元,从而使矩阵的各种运算能有效地进行?用高级语言编制程序时,用二维数组来存储矩阵元,可以随
7、机存取元素,存储的密度为1。在数值分析中经常出现一些阶数很高的矩阵,同时在矩阵中非零元素呈某种规律分布或者出现大量的零元素,看起来存储密度仍为1,但实际上占用了许多单元存储重复的非零元素或零元素,这对高阶矩阵会造成极大的浪费,为了节省存储空间,可对这类矩阵进行压缩存储:为多个相同的非零元素只分配一个存储空间;对零元素不分配空间。,5.3 矩阵的压缩存储,两种矩阵的压缩存储特殊矩阵值相同的元素或者零元素在矩阵中的分布有一定规律。对称矩阵:不存相同元素三角矩阵:不存相同元素对角矩阵:只存非0元素稀疏矩阵存在大量的零元素,但分布没有规律。三元组顺序表:存非0元素的位置和值行逻辑链接的顺序表:存非0元
8、素的位置、值和每行非零元素在三元组表中的起始位置,5.3 矩阵的压缩存储特殊矩阵,对称矩阵n阶方阵A若满足下述性质,则称A为对称矩阵。aij=aji 0i,jn-1,只要存储矩阵中上三角或下三角中的元素,让每两个对称的元素共享一个存储空间,能节约近一半的存储空间。元素总数为:1+2+3+n=n(n+1)/2,5.3 矩阵的压缩存储特殊矩阵,对称矩阵A的压缩存储san(n+1)/2 aij和sak之间的对应关系。,当ij,5.3 矩阵的压缩存储特殊矩阵,三角矩阵 分为上三角、下三角,a00 a01 a 0 n-1 a00 c cc a11 a 1 n-1 a10 a11 c.c c a n-1
9、n-1 an-10 an-11 an-1n-1,三角矩阵中的重复元素c可共享一个存储空间,其余的元素正好有n(n+1)/2个,因此,三角矩阵可压缩存储到向量sa0.n(n+1)/2中,其中c存放在向量的最后一个分量中。元素总数为:1+2+3+n+1=n(n+1)/2+1,5.3 矩阵的压缩存储特殊矩阵,下三角矩阵 A的压缩存储san(n+1)/2 下三角矩阵 A中aij和sak之间的对应关系。,当ij,n(n-1),5.3 矩阵的压缩存储特殊矩阵,对角矩阵所有的非零元素集中在以主对角线为中心的带状区域中,即除了主对角线和主对角线相邻两侧的若干条对角线上的元素之外,其余元素皆为零。如:三对角矩阵
10、,5.3 矩阵的压缩存储稀疏矩阵,稀疏矩阵设矩阵A中有s个非零元素,若s远远小于矩阵元素的总数(即smn),则称A为稀疏矩阵稀疏因子 e 0.05(e=s/(m*n)如果只存储稀疏矩阵中的非零元素,那这些元素的位置信息该如何表示?对每个非零元素增开若干存储单元,例如存放其所在的行号和列号,便可准确反映该元素所在位置。具体实现:将每个非零元素用一个三元组(i,j,aij)来表示,则每个稀疏矩阵可用一个三元组表来表示。,5.3 矩阵的压缩存储稀疏矩阵,稀疏矩阵A67 0 12 9 0 0 0 0 0 0 0 0 0 0 0-3 0 0 0 0 14 0 0 0 24 0 0 0 0 0 18 0
11、0 0 0 015 0 0-7 0 0 0表示方法三元组顺序表用线性表表示:不能随机存取用三元组矩阵表示:不能随机存取行逻辑链接的顺序表可随机存取,5.3 矩阵的压缩存储稀疏矩阵,稀疏矩阵的三元组顺序表表示 0 12 9 0 0 0 0 0 0 0 0 0 0 0-3 0 0 0 0 14 0 0 0 24 0 0 0 0 0 18 0 0 0 0 015 0 0-7 0 0 0用线性表表示:(1,2,12),(1,3,9),(3,1,-3),(3,6,14),(4,3,24),(5,2,18),(6,1,15),(6,4,-7),用三元组矩阵表示:,5.3 矩阵的压缩存储稀疏矩阵,稀疏矩阵的
12、三元组顺序表存储结构#define maxsize 12500 typedef struct int i,j;ElemType e;Triple;typedef struct Triple datamaxsize+1;/data0未用 int mu,nu,tu;TSMatrix;,5.3 矩阵的压缩存储稀疏矩阵,稀疏矩阵的转置一个mn的矩阵M,它的转置T是一个nm的矩阵,且aij=bji,0im,0jn 0 12 9 0 0 0 0 0 0-3 0 0 15 0 0 0 0 0 0 0 12 0 0 0 18 0-3 0 0 0 0 14 0 9 0 0 24 0 0 M 0 0 24 0 0
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数组和广义表 数组 广义

链接地址:https://www.31ppt.com/p-4519904.html