多维数组与广义表课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《多维数组与广义表课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 多维 数组 广义 课件
- 资源描述:
-
1、第五章第五章 多维数组与广义表多维数组与广义表5.1 多维数组5.1.1多维数组的定义5.1.2多维数组的存储5.2 矩阵的压缩存储 5.2.1 特殊矩阵 5.2.2 稀疏矩阵5.3 广义表5.15.1 多维数组多维数组5.1.15.1.1多维数组的定义多维数组的定义一维数组一维数组可以看成是一个线性表或一个向量,它在计算机内是存放在一块连续的存储单元中,适合于随机查找。有一个直接前驱和一个直接后继二维数组二维数组可以看成是向量的推广。有两个直接前驱和两个直接后继a00 a01 a0n-1 a10 a11 a1n-1.A=am-1 0 am-1 1 am-1 n-1 三维数组最多可有三个直接前
2、驱和三个直接后继多维数组把三维以上的数组称为多维数组,可有多个直接前驱和多个直接后继是一种非线性结构。在在C C语言中的描述语言中的描述typedef int datatype;datatype array1N;datatype array2MN;datatype array3XYZ;数组一旦被定义,它的维数和维界就不再改变。因此,数组只有存取元素和修改元素值的操作。考虑问题的基本出发点:计算机的内存结构是一维的。因此用一维内存来存多维数组,就必须按某种次序将数组元素排成线性序列。数组一旦建立,结构中的元素个数和元素间的关系就不再发生变化。因此,一般都是采用顺序存储的方法来表示数组。5.2 5
3、.2 多维数组的存储多维数组的存储两种顺序存储方式两种顺序存储方式行优先顺序将数组元素按行排列在PASCAL、C语言中,数组就是按行优先顺序存储的。列优先顺序将数组元素按列向量排列在FORTRAN语言中,数组就是按列优先顺序存储的。推广到多维数组的情况:行优先顺序:先排最右下标,从右到左,最后排最左下标列优先顺序:先排最左下标,从左向右,最后排最右下标。计算机如何实现数组元素的随机存取?计算机如何实现数组元素的随机存取?按上述两种方式顺序存储的序组,只要知道:开始结点的存放地址(即基地址),维数每维的上、下界每个数组元素所占用的单元数,就可以将数组元素的存放地址表示为其下标的线性函数。因此,数
4、组中的任一元素可以在相同的时间内存取,即顺序存储的数组是一个随机存取结构。如何计算数组元素的地址?如何计算数组元素的地址?一维数组二维数组三维数组如何计算数组元素的地址?如何计算数组元素的地址?内存0ListSize-1a0a1a2an a00 a01 a0n-1 a10 a11 a1n-1.am-1 0 am-1 1 am-1 n-1 a00 a01 a0n-1 a10 a11 a1n-1.am-1 0 am-1 1 am-1 n-1 a0a1an内存a00a0na10a1n假设数组各维的下界是1,按“行优先顺序”存储,假设每个元素占用d个存储单元。二维数组Amn,aij的地址计算函数为:L
5、OC(aij)=LOC(a11)+(i-1)*n+j-1*d三维数组Amnp,aijk的地址计算函数为:LOC(aijk)=LOC(a111)+(i-1)*n*p+(j-1)*p+(k-1)*d更一般的二维数组是Ac1.d1,c2.d2,这里c1,c2不一定是1。aij的地址计算函数为:LOC(aij)=LOC(ac1c2)+(i-c1)*(d2-c2+1)+j-c2)*d 例如,在C语言中,数组各维下标的下界是0,因此在C语言中,二维数组的地址计算公式为:LOC(aij)=LOC(a00)+(i*(d2+1)+j)*d 最基本的原理最基本的原理Ai1in的起始地址=第一个元素的起始地址该元素
6、前面的元素个数单位长度程序员试题程序员试题2006-12006-1对于二维数组a04,15,设每个元素占1个存储单元,且以行为主序存储,则元素a2,1相对于数组空间起始地址的偏移量是_(40)_。(40)A5 B10 C15D25 20032003设数组a3.16,5.20的元素以列为主序存放,每个元素占用两个存储单元,则数组元素ai,j(3i16,5j20)的地址计算公式为_(11)_。(11)Aa-118+2i+28jBa-116+2i+28j Ca-144+2i+28j Da-146+2i+28j20012001二维数组 X 的行下标范围是05,列下标范围是18,每个数组元素占六个字节,
7、则该数组的体积为_(6)_个字节,若已知 X 的最后一个元素的起始字节地址为382,则 X 的首地址(即第一个元素的起始字节地址)为 _(7)_,记为 Xd。若按行存储,则 X1,5 的起始地址是 _(8)_,结束字节地址是 _(9)_。若按列存储,则 X4,8的起始字节地址为_(10)_。(6):A.210 B.240 C.288 D.294(7):A.0 B.6 C.94 D.100(8):A.Xd+24 B.Xd+72 C.Xd+78 D.Xd+144(9):A.Xd+29 B.Xd+77 C.Xd+83 D.Xd+147(10):A.Xd+186 B.Xd+234 C.Xd+270 D
8、.Xd+276(6)C(7)D(8)B(9)B(10)D5.25.2 矩阵的压缩存储矩阵的压缩存储在编程时,简单而又自然的方法,是将矩阵描述为一个二维数组。矩阵在这种存储表示之下,可以对其元素进行随机存取。但是在一些特殊矩阵中,非零元素呈某种规律分布或者矩阵中有大量的零元素,如果仍用二维数组存,会造成极大的浪费,尤其是处理高阶矩阵的时候。为了节省存储空间,我们可以对这类矩阵进行压缩存储。5.2.15.2.1 几种常见的特殊矩阵几种常见的特殊矩阵1 12 23 34 45 52 23 34 45 56 63 34 45 56 67 74 45 56 67 78 85 56 67 78 89 9对
9、称矩阵在一个n阶方阵A中,若元素满足下述性质:aij=aji 0i,jn-1,则称A为对称矩阵。特征:元素关于主对角线对称压缩存储的办法:只存矩阵中上三角或下三角中的元素。所需空间:2)1()1(10nniNni三角矩阵三角矩阵特征:上三角矩阵中,主对角线的下三角中的元素均为常数。在大多数情况下,常数为零。下三角矩阵正好相反。压缩方法:只存上(下)三角阵中上(下)三角中的元素常数c可共享一个存储空间所需空间:1 12 23 34 45 50 03 34 45 56 60 00 05 56 67 70 00 00 07 78 80 00 00 00 09 91 12 23 34 45 54 43
10、 34 45 56 64 44 45 56 67 74 44 44 47 78 84 44 44 44 49 91 10 00 00 00 02 23 30 00 00 03 36 65 50 00 04 47 79 97 70 05 58 81 12 29 91 14 44 44 44 42 23 34 44 44 43 36 65 54 44 44 47 79 97 74 45 58 81 12 29 912)1(nnN对角矩阵对角矩阵特征:所有的非零元素集中在以主对角线为中心的带状区域中,即除了主对角线和主对角线相邻两侧的若干条对角线上的元素之外,其余元素皆为零。压缩存储的办法:只存对角
11、线上的元素。存三对角矩阵三对角矩阵所需的空间:1 11 10 00 00 02 23 37 70 00 00 04 45 53 30 00 00 06 67 75 50 00 00 08 89 9三对角矩阵三对角矩阵23 nN特征:只有少量非零元素,且非零元素的分布没有规律。压缩存储的办法:只存非零元素。所需空间:与非零元素的个数和存储方式有关。稀疏矩阵稀疏矩阵1 12 20 00 05 50 03 30 00 00 00 04 40 00 00 00 00 06 60 00 00 00 00 08 80 05.2.25.2.2 特殊矩阵的压缩存储特殊矩阵的压缩存储矩阵类型对称矩阵三角矩阵对角
12、矩阵压缩的基本思想:只存有用的元素由用二维数组改为用一维数组来存放说明:按C语言中规定,下标从0开始不失一般性,按“行优先顺序”存储关键问题如何确定一维数组的大小?如何确定矩阵元素在一维数组中的位置?从而保证对矩阵元素的随机存取Aij的位置=该元素前的元素个数=所需空间12334545671 12 23 34 45 52 23 34 45 56 63 34 45 56 67 74 45 56 67 78 85 56 67 78 89 91 1 .对称矩阵对称矩阵如何确定一维数组的大小?2)1(nnN设:存放下三角阵中的元素,则:如何确定元素Aij在一维数组中的位置?12334545671 1
13、2 2 3 3 4 4 5 52 2 3 3 4 4 5 5 6 63 3 4 4 5 5 6 6 7 74 4 5 5 6 6 7 7 8 85 5 6 6 7 7 8 8 9 9在下三角阵中当根据在上三角阵中当ijjiijijAjijiiAAjiijjijALoc,2)1()A(,2)1()(2.2.三角矩阵三角矩阵1 14 44 44 44 42 23 34 44 44 43 36 65 54 44 44 47 79 97 74 45 58 81 12 29 912)1(nnN1233654如何确定一维数组的大小?设:在下三角阵中,则:如何确定元素Aij在一维数组中的位置?即下三角阵中的
14、元素,当即下三角阵中的常数,当,2)1(2)1()(jijiijinnijALoc3.3.三对角矩阵三对角矩阵1 11 10 00 00 02 23 37 70 00 00 04 45 53 30 00 00 06 67 75 50 00 00 08 89 923 nN如何确定一维数组的大小?如何确定元素Aij在一维数组中的位置?1123745367589)(ijALoc在Aij之前有i行,共有3*i-1个非零元素,在第i行,aij之前有j-i+1个非零元素,3*i-1+(j-i+1)=2*i+j程序员试题程序员试题2004-1 对矩阵压缩存储的主要目的是_(5)_。(5)A方便运算B节省存储
15、空间 C降低计算复杂度D提高运算速度2003 将一个三对角矩阵Al.100,1.100中的元素按行存储在一维数组Bl.298中,矩阵A中的元素A66,65在数组B中的下标为_(4)_。(4)A195 B196C197D1985.2.3 5.2.3 稀疏矩阵的压缩存储稀疏矩阵的压缩存储顺序存储:三元组表链式存储:十字链表1.1.三元组表存稀疏矩阵三元组表存稀疏矩阵考虑:只存非零元素一个非零元素的必需信息有:(i,j,aij)记录一个稀疏矩阵的必需信息有:行数M,列数N,非零元素个数T1 12 20 00 05 50 03 30 00 00 00 04 40 00 00 00 00 06 60 0
展开阅读全文