数据结构课件05.pptVIP

  • 3
  • 0
  • 约5.03千字
  • 约 43页
  • 2017-06-09 发布于湖北
  • 举报
数据结构课件05

用“三元组”表示时如何实现? M矩阵 T矩阵 1 2 14 1 5 -5 2 2 -7 3 1 36 3 4 28 2 1 14 data[2] 2 2 -7 data[3] 为此,需要知道矩阵M的每一列的非零元个数。 如何确定矩阵M中的每一列的第一个非零元在data中的位置? * * 第五章 数组和广义表 精英专升本 5.1 数组的类型定义 5.3 稀疏矩阵的压缩存储 5.2 数组的顺序表示和实现 5.4 广义表的类型定义 5.5 广义表的存储结构 本节所讨论的数组与高级语言中的数组区别:  高级语言中的数组是顺序结构;  而本章的数组既可以是顺序的,也可以是链式结构,用户可根据需要选择。 一、数组的概念 5.1 数组的定义 1.一维数组 一维数组可以看成是一个线性表,但操作简单,一般不进行插入和删除操作,只定义给定下标读取元素和修改元素的操作。 2.二维数组 二维数组可以看成是线性表的推广。 例如,设A是一个有m行n列的二维数组,则A可以表示为: 可以把二维数组看成是一个定长线性表,该线性表的每一个元素也是一个定长线性表 可以将二维数组A看成是由n个列向量A=[α1, α2, ……, αn]组成,其中 αi=(a1i, a2i, …..,ami), 0≤i≤n。 Am×n=((a11a21…am1),(a12a22…am2),…,(a1na2n…amn)) n个元素的线性表 也可以将二维数组A看成是由m个行向量B=[β1,β2, …,βm]T组成,其中,βi=( ai1, ai2, ….,ain), 0≤i≤m Am×n=((a11a12…a1n),(a21a22…a2n),…,(am1am2…amn)) m个元素的线性表 3.多维数组 可以把三维以上的数组称为多维数组。 n维数组中,每个数据元素对应n个下标。可看作是数据元素为n-1维数组的一维数组。 数组的抽象数据类型 ADT 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={aj1…ji…jn,aj1…ji+1…jn| 0≤jk≤bk-1, 1≤k≤n 且k≠i,0≤ji≤bi-2, aj1…ji…jn,aj1…ji+1…jn∈D,i=2,…n} 基本操作: (1) InitArray (A,n,bound1, ?boundn) //构造数组A (2) DestroyArray (A) // 销毁数组A (3) Value(A,e,index1,…,indexn) //取数组元素值 (4) Assign (A,e,index1,…,indexn) //给数组元素赋 }ADT Array 举例:二维数组的定义: 数据对象: D = {aij | 0≤i≤b1-1, 0 ≤j≤b2-1} 数据关系: R = { ROW, COL } ROW = {ai,j,ai+1,j| 0≤i≤b1-2, 0≤j≤b2-1} COL = {ai,j,ai,j+1| 0≤i≤b1-1, 0≤ j≤b2-2} 5.2 数组的顺序表示和实现 由于数组一般不作插入或删除操作,数组元素个数和元素之间的关系不发生变动,逻辑结构固定。因此,采用顺序存储结构表示数组是顺理成章的事了。 数组的顺序存储结构有两种:一种是按行序存储,如高级语言BASIC、 COBOL和PASCAL语言都是以行序为主;另一种是按列序存储,如高级语言中的FORTRAN语言就是以列序为主显然。 由于计算机的内存结构是一维的,因此用一维内存来表示多维数组,就必须按某种次序将数组元素排成一列序列,然后将这个线性序列存放在存储器中。 一维数组的元素位置(下标从0开始) 35 27 49 18 60 54 77 83 41 02 0 1 2 3 4 5 6 7 8 9 l l l l l LOC(i) = LOC(i-1)+l = a+i*l LOC(i) = LOC(i-1)+l

文档评论(0)

1亿VIP精品文档

相关文档