版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第五章 数组与广义表,教学目标: 掌握数组与广义表的基本概念 掌握顺序数组与广义表的存储原理 数组与广义表的应用 重点: 数组与广义表的存储 难点: 数组与广义表的操作及其应用,5.2.1 数组的定义,数组是一组偶对(下标值,数据元素值)的集合。在数组中,对于一组有意义的下标,都存在一个与其对应的值。一维数组对应着一个下标值,二维数组对应着两个下标值,如此类推。 数组是由n(n1)个具有相同数据类型的数据元素a1,a2,an组成的有序序列,且该序列必须存储在一块地址连续的存储单元中。,数组的定义, 数组中的数据元素具有相同数据类型。 数组是一种随机存取结构,给定一组下标,就可以访问与其对应的数
2、据元素。 数组中的数据元素个数是固定的。,数组的抽象数据类型定义,ADT Array 数据对象:ji= 0,1,bi-1 , 1,2, ,n ; D = aj1j2jn | n0称为数组的维数, bi是数组第i维的长度,ji是数组元素第i维的下标,aj1j2jnElemSet 数据关系:R = R1, R2, , Rn Ri=|0jkbk-1 , 1kn且ki,0jibi-2, aj1j2 ji+1jnD 基本操作: ADT Array,在每个关系中,元素aj1j2jn(0jibi-2)都有一个直接后继。因此,就单个关系而言,这n个关系仍是线性表。 显然当n=1时, n维数组就退化为定长的线性
3、表。反之, n维数组也可以看成是线性表的推广。,直观的n维数组,以二维数组为例讨论。将二维数组看成是一个定长的线性表,其每个元素又是一个定长的线性表。 设二维数组A=(aij)mn,则 A=(1,2,p) (p=m或n) 其中每个数据元素j是一个列向量(线性表) : j =(a1j ,a2j ,amj) 1jn 或是一个行向量: i =(ai1 ,ai2 ,ain) 1im 如下图所示。,数组的顺序表示和实现,数组一般不做插入和删除操作,也就是说,数组一旦建立,结构中的元素个数和元素间的关系就不再发生变化。因此,一般都是采用顺序存储的方法来表示数组。,数组的顺序表示和实现,问题:计算机的内存结
4、构是一维(线性)地址结构,对于多维数组,将其存放(映射)到内存一维结构时,有个次序约定问题。即必须按某种次序将数组元素排成一列序列,然后将这个线性序列存放到内存中。 二维数组是最简单的多维数组,以此为例说明多维数组存放(映射)到内存一维结构时的次序约定问题。,通常有两种顺序存储方式 行优先顺序(Row Major Order) : 列优先顺序(Column Major Order) :, 行优先顺序(Row Major Order),将数组元素按行排列,第i+1个行向量紧接在第i个行向量后面。对二维数组,按行优先顺序存储的线性序列为: a11,a12,a1n, a21,a22,a2n , am
5、1,am2,amn 如图5-2(b)示。,将数组元素按列向量排列,第j+1个列向量紧接在第j个列向量之后,对二维数组,按列优先顺序存储的线性序列为: a11,a21,am1, a12,a22,am2, , an1,an2,anm 如图5-2(c)。, 列优先顺序(Column Major Order),对一个有n个数据元素的一维数组,设a0是下标为0的数组元素,LOC(a0)表示元素a0的内存单元地址,即数组的首地址,k是每个数据元素所需的字节个数,则有,Loc(ai)=Loc(a0)+i*k (i=0,1n-1),对一个m行n列的二维数组A=(aij)mn,若每个元素占用的存储单元数为k,L
6、OCa00表示元素a00的首地址,即数组的首地址,则有:,Loc(aij)=Loc(a00)+(i*n+j)*k (i=0,1m-1, j=0,1n-1),double array=new double45; 数组array中的数据元素个数是多少? 存放数组array至少需要多少个字节? 如果按行为主序的存储方式,并且假设数组array的起始地址为4000,则数据元素array22的存储地址是多少?,5.2.2 矩阵的压缩存储,在科学与工程计算问题中,矩阵是一种常用的数学对象,在高级语言编程时,通常将一个矩阵描述为一个二维数组。这样,可以对其元素进行随机存取,各种矩阵运算也非常简单。 对于高阶
7、矩阵,若其中非零元素呈某种规律分布或者矩阵中有大量的零元素,若仍然用常规方法存储,可能存储重复的非零元素或零元素,将造成存储空间的大量浪费。对这类矩阵进行压缩存储: 多个相同的非零元素只分配一个存储空间; 零元素不分配空间。,特殊矩阵,特殊矩阵:是指非零元素或零元素的分布有一定规律的矩阵。 对称矩阵 三角矩阵 稀疏矩阵,1. 对称矩阵,若一个n阶方阵A=(aij)nn中的元素满足性质: aij=aji 1i,jn且ij 则称A为对称矩阵,如图5-3所示。,对称矩阵中的元素关于主对角线对称,因此,让每一对对称元素aij和aji(ij)分配一个存储空间,则n2个元素压缩存储到n(n+1)/2个存储
8、空间,能节约近一半的存储空间。,对称矩阵元素ai j保存在向量sa中时的下标值k与(i,j)之间的对应关系是:,不失一般性,假设按“行优先顺序”存储下三角形(包括对角线)中的元素。 设用一维数组(向量)sa0n(n+1)/2存储n阶对称矩阵,如图5-4所示。为了便于访问,必须找出矩阵A中的元素的下标值(i,j)和向量sak的下标值k之间的对应关系。,图5-4 对称矩阵的压缩存储示例,若ij:ai j在下三角形中,直接保存在sa中。ai 1之前的i-1行共有元素个数: 1+2+(i-1)=i(i-1)/2 而在第i行上,ai j之前恰有j-1个元素,因此,元素ai j保存在向量sa中时的下标值k
9、之间的对应关系是: k=i(i-1)/2+j-1 ij 若ij:则aij是在上三角矩阵中。因为aij=aji,在向量sa中保存的是aji 。依上述分析可得: k=j(j-1)/2+i-1 ij,对称矩阵元素ai j保存在向量sa中时的下标值k与(i,j)之间的对应关系是:,根据上述的下标对应关系,对于矩阵中的任意元素aij,均可在一维数组sa中唯一确定其位置k;反之,对所有k=1,2, ,n(n+1)/2,都能确定sak中的元素在矩阵中的位置(i,j)。 称sa0n(n+1)/2为n阶对称矩阵A的压缩存储。,以主对角线划分,三角矩阵有上三角和下三角两种。 上三角矩阵的下三角(不包括主对角线)中
10、的元素均为常数c(一般为0)。下三角矩阵正好相反,它的主对角线上方均为常数,如图5-5所示。,2. 三角矩阵,三角矩阵中的重复元素c可共享一个存储空间,其余的元素正好有n(n+1)/2个,因此,三角矩阵可压缩存储到向量sa0n(n+1)/2中,其中c存放在向量的1个分量中。,下三角矩阵元素ai j保存在向量sa中时的下标值k与(i,j)之间的对应关系是:,3. 稀疏矩阵,稀疏矩阵(Sparse Matrix):其非零元素的个数远小于零元素个数。对于稀疏矩阵,目前还没有一个确切的定义。设矩阵A是一个nm的矩阵中有s个非零元素,设=s/(nm),称为稀疏因子,如果某一矩阵的稀疏因子满足0.05时称
11、为稀疏矩阵,如图5-8所示。,稀疏矩阵的压缩存储,对于稀疏矩阵,采用压缩存储方法时,只存储非0元素。 必须存储非0元素的行下标值、列下标值、元素值。因此,一个三元组(i, j, aij)唯一确定稀疏矩阵的一个非零元素。 如图5-8的稀疏矩阵A的三元组线性表为: ( (1,2,12), (1,3,9), (3,1,-3), (3,8,4), (4,3,24), (4,6,2), (5,2,18), (6,7,-7), (7,4,-6) ),稀疏矩阵的压缩存储,稀疏矩阵的压缩存储结构主要有三元组的数组结构存储和三元组的链表结构存储两大类型。,图 稀疏矩阵示例,用三元组表示为:(1,2,3),(2,
12、3,7),(3,1,2),(4,4,5),三元组顺序表,三元组顺序存储结构如上所示,三元组链表,三元组链表,头结点,行数列数,十字链表,对于稀疏矩阵,当非0元素的个数和位置在操作过程中变化较大时,采用链式存储结构表示比三元组的线性表更方便。 矩阵中非0元素的结点所含的域有:行、列、值、行指针(指向同一行的下一个非0元)、列指针(指向同一列的下一个非0元)。其次,十字交叉链表还有一个头结点,结点的结构如图所示。,图5-11 稀疏矩阵及其十字交叉链表,(b) 稀疏矩阵的十字交叉链表,5.2.3 广义表,广义表是线性表的推广和扩充,在人工智能领域中应用十分广泛。 在第2章中,我们把线性表定义为n(n
13、0 )个元素a1, a2 , an的有穷序列,该序列中的所有元素具有相同的数据类型且只能是原子项(Atom)。所谓原子项可以是一个数或一个结构,是指结构上不可再分的。若放松对元素的这种限制,容许它们具有其自身结构,就产生了广义表的概念。,5.2.3 广义表,广义表(Lists,又称为列表 ):是由n(n 0)个元素组成的有穷序列: LS=(a1,a2,an) 其中ai或者是原子项,或者是一个广义表。LS是广义表的名字,n为它的长度。若ai是单个元素,则ai是广义表的原子,若ai是广义表,则称为LS的子表。,习惯上:原子用小写字母,子表用大写字母。 若广义表LS非空时: a1(表中第一个元素)称
14、为表头; 其余元素组成的子表称为表尾;(a2,a3,an) 广义表中所包含的元素(包括原子和子表)的个数称为表的长度。 广义表中括号的最大层数称为表深度。,A=(a,b) /线性表,长度为2,深度为1 B=(c,A)=(c,(a,b) /A为B的子表,B的长度位2,深度为2 C=(d,A,B)=(d,(a,b),(c,(a,b) /A、B为C的子表,C的长度为3,深度为3 D=() /空表,长度为0,深度为1 D1=(D)=() /非空表,元素是一个空表,长度为1,深度为2 E=(f,E)=(f,(f,(f,() /递归表,E的长度为2,深度是无穷值,表5-2 广义表及其示例, 广义表的元素可
15、以是原子,也可以是子表,子表的元素又可以是子表, 。即广义表是一个多层次的结构。 (2) 广义表可以被其它广义表所共享,也可以共享其它广义表。广义表共享其它广义表时通过表名引用。 (3) 广义表本身可以是一个递归表。 (4) 根据对表头、表尾的定义,任何一个非空广义表的表头可以是原子,也可以是子表, 而表尾必定是广义表。空表无表头表尾。,广义表的重要结论:,业务实现1,古代某法官要判决n个犯人的死刑,他有一条荒唐的法律,将n个犯人站成一个圆圈,其编号从1n,从第1个人开始数起,数到m的犯人就拉出来处决,然后再从出列的下一个犯人开始报数,数到m的人拉出来处决,直到n个犯人都出列被处决,输出n个犯
16、人 出列的顺序。,5.2.2.2业务实现,java代码如下: /数到m出列,n为总人数 public void ysf(int m,int n) int i,j,k = 0; int p = new intn;/p存放人的编号 for(i =0;i=1;i-)/出列10次 k=(k+m-1)%i;/出列人编号值对应的下标 System.out.print(pk+ ); /删除pk for(j=k+1;ji;j+) pj-1 = pj; ,业务实现2,将数组中的数按降序排序;,public void desc(int input) int temp,max; for (int i=0;iinpu
17、tmax) max=j; if (max!=i) temp=inputmax; inputmax=inputi; inputi=temp; for (int i=0;iinput.length;i+) System.out.print(inputi+ ); ,业务实现3,给定一个数组input ,如果数组长度n为奇数,则将数组中最大的元素 放到output数组最中间的位置,如果数组长度n偶数,则将数组中最大的元素放到 output数组中间两个位置偏右的那个位置上,然后再按从大到小的顺序,依次在第一个位置的两边,按照一左一右的顺序,依次存放剩下的数。,业务实现3,给定一个数组input ,如果数组长度n为奇数,则将数组中最大的元素放到output数组最中间的位置,如果数组长度n偶数,则将数组中最大的元素放到output数组中间两个位置偏右的那个位置上,然后再按从大到小的顺序,依次在第一个位置的两边,按照一左一右的顺序,依次存放剩下的数。,业务实现3,例如: input = 3, 6, 1, 9, 7 output = 3, 7, 9, 6, 1; input = 3, 6, 1, 9, 7, 8 output
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 医院前台考试题库及答案
- 2026二年级数学下册 数感培养
- 智能微某著名企业分布式电源的综合控制策略
- 2026九年级上语文比较阅读技巧训练
- 2026六年级数学上册 分数乘法计算技巧
- 保安员工守责制度
- 武汉乐理考级试题及答案
- 县农业农村局奖惩制度
- 人员安全管理奖惩制度
- 设备运维人员奖惩制度
- 幼儿园中班语言《春节是个百音盒》课件
- CQI-17锡焊系统评估第二版(2021年发布-含记录)
- 酒店前台培训内容课件
- GJB3243A-2021电子元器件表面安装要求
- 《骨科外固定支架针道护理规范》征求意见稿
- 渠道销售业务汇报
- 2025年上海军转安置考试题及答案
- 小学学校管理课件教学
- 化工厂消防设施培训课件
- 俄语写作教学课件
- 2025年中考地理复习二轮专题七区域分析课件
评论
0/150
提交评论