数据结构(C描述)电子教案第5章.ppt
《数据结构(C描述)电子教案第5章.ppt》由会员分享,可在线阅读,更多相关《数据结构(C描述)电子教案第5章.ppt(52页珍藏版)》请在三一办公上搜索。
1、第5章多维数组和广义表,数据结构(C+描述),5.5 广义表,5.1多维数组,5.2多维数组的存储结构,5.3 特殊矩阵及其压缩存储,5.4 稀疏矩阵,退出,目录,5.1多维数组,多维数组的概念,1一维数组,一维数组可以看成是一个线性表或一个向量(第二章已经介绍),它在计算机内是存放在一块连续的存储单元中,适合于随机查找。这在第二章的线性表的顺序存储结构中已经介绍。,2二维数组,二维数组可以看成是向量的推广。,例如,设A是一个有m行n列的二维数组,则A可以表示为:,在此,可以将二维数组A看成是由m个行向量X0,X1,Xm-1T组成,其中,Xi=(ai0,ai1,.,ain-1),0im-1;也
2、可以将二维数组A看成是由n个列向量y0,y1,yn-1组成,其中 yi=(a0i,a1i,.,am-1i),0in-1。,由此可知二维数组中的每一个元素 最多可有二个直接前驱和两个直接后继(边界除外),故是一种典型的非线性结构。,3多维数组,同理,三维数组最多可有三个直接前驱和三个直接后继,三维以上数组可以作类似分析。因此,可以把三维以上的数组称为多维数组,多维数组可有多个直接前驱和多个直接后继,故多维数组是一种非线性结构。,5.1.2 多维数组在计算机内的存放怎样将多维数组中元素存入到计算机内存中呢?由于计算机内存结构是一维的(线性的),因此,用一维内存存放多维数组就必须按某种次序将数组元素
3、排成一个线性序列,然后将这个线性序列顺序存放在存储器中,5.2多维数组的存储结构,由于数组一般不作插入或删除操作,也就是说,一旦建立了数组,则结构中的数组元素个数和元素之间的关系就不再发生变动,即它们的逻辑结构就固定下来了,不再发生变化。因此,采用顺序存储结构表示数组是顺理成章的事了。本章中,仅重点讨论二维数组的存储,三维及三维以上的数组可以作类似分析。,多维数组的顺序存储有两种形式:5.2.1 行优先顺序,1存放规则,行优先顺序也称为低下标优先或左边下标优先于右边下标。具体实现时,按行号从小到大的顺序,先将第一行中元素全部存放好,再存放第二行元素,第三行元素,依次类推,在BASIC语言、PA
4、SCAL语言、C/C+语言等高级语言程序设计中,都是按行优先顺序存放的。例如,对刚才的Amn二维数组,可用如下形式存放到内存:a00,a01,a0n-1,a10,a11,.,a1 n-1,am-1 0,am-1 1,am-1 n-1。即二维数组按行优先存放到内存后,变成了一个线性序列(线性表)。,因此,可以得出多维数组按行优先存放到内存的规律:最左边下标变化最慢,最右边下标变化最快,右边下标变化一遍,与之相邻的左边下标才变化一次。因此,在算法中,最左边下标可以看成是外循环,最右边下标可以看成是最内循环。,2地址计算,由于多维数组在内存中排列成一个线性序列,因此,若知道第一个元素的内存地址,如何
5、求得其它元素的内存地址?我们可以将它们的地址排列看成是一个等差数列,假设每个元素占l个字节,元素aij 的存储地址应为第一个元素的地址加上排在aij 前面的元素所占用的单元数,而aij 的前面有i行(0i-1)共in个元素,而本行前面又有j个元素,故aij的前面一共有in+j个元素,设a00的内存地址为LOC(a00),则aij的内存地址按等差数列计算为LOC(aij)=LOC(a00)+(in+j)l。同理,三维数组Amnp按行优先存放的地址计算公式为:LOC(aijk)=LOC(a000)+(inp+jp+k)l。,5.2.2 列优先顺序,1存放规则,列优先顺序也称为高下标优先或右边下标优
6、先于左边下标。具体实现时,按列号从小到大的顺序,先将第一列中元素全部存放好,再存放第二列元素,第三列元素,依次类推,在FORTRAN语言程序设计中,数组是按列优先顺序存放的。例如,对前面提到的Amn二维数组,可以按如下的形式存放到内存:a00,a10,am-10,a01,a11,am-1 1,a0 m-1,a1m-1,.,am-1 n-1。即二维数组按列优先存放到内存后,也变成了一个线性序列(线性表)。,因此,可以得出多维数组按列优先存放到内存的规律:最右边下标变化最慢,最左边下标变化最快,左边下标变化一遍,与之相邻的右边下标才变化一次。因此,在算法中,最右边下标可以看成是外循环,最左边下标可
7、以看成是最内循环。,2地址计算,同样与行优先存放类似,若知道第一个元素的内存地址,则同样可以求得按列优存放的某一元素aij的地址。对二维数组有:LOC(aij)=LOC(a00)+(jm+i)l对三维数组有:LOC(aijk)=LOC(a000)+(kmn+jm+i)l,5.3 特殊矩阵及其压缩存储,5.3.1 特殊矩阵,若一个n阶方阵A中元素满足下列条件:aij=aji 其中 0 i,jn-1,则称A为对称矩阵。例如,图5-1是一个3*3的对称矩阵。,1对称矩阵,2三角矩阵,(1)上三角矩阵即矩阵上三角部分元素是随机的,而下三角部分元素全部相同(为某常数C)或全为0,具体形式见图5-2(a)
8、。,(2)下三角矩阵即矩阵的下三角部分元素是随机的,而上三角部分元素全部相同(为某常数C)或全为0,具体形式见图5-2(b)。,3对角矩阵,若矩阵中所有非零元素都集中在以主对角线为中心的带状区域中,区域外的值全为0,则称为对角矩阵。常见的有三对角矩阵、五对角矩阵、七对角矩阵等。,例如,图5-3为77的三对角矩阵(即有三条对角线上元素非0)。,5.3.2 压缩存储,1对称矩阵,若矩阵Ann是对称的,对称的两个元素可以共用一个存储单元,这样,原来n 阶方阵需 n2个存储单元,若采用压缩存储,仅需 n(n+1)/2个存贮单元,将近节约一半存贮单元,这就是实现压缩的好处。但是,将n阶对称方阵存放到一个
9、向量空间s0到s-1 中,我们怎样找到sk与aij的一一对称应关系呢?使我们在sk中直接找到aij。,我们仅以行优先存放分两种方式讨论:,(1)只存放下三角部分由于对称矩阵关于主对角线对称,故我们只需存放主对角线及主对角线以下的元素。这时,a00存入s0,a10 存入s1,a11存入 s2,具体参见图5-4。这时sk与aij的对应关系为:,i(i+1)/2+j 当 ij k=j(j+1)/2+i 当 ij,上面的对应关系读者很容易推出:当ij 时,aij在下三角部分中,aij前面有i行,共有1+2+3+i个元素,而aij是第i行的第j个元素,即有k=1+2+3+i+j=i(i+1)/2+j;当
10、ij时,aij在上三角部分中,但与aji对称,故只需在下三角部分中找aij即可,故只需将i与j交换即可,即k=j(j+1)/2+i。,(2)只存放上三角部分对于对称阵,除了用下三角形式存放外,还可以用上三角形式存放,这时a00存入 s0,a01存入s1,a02存入 s2,具体参见图5-5。这时sk与aij的对应关系可以按下面方法推出:,当ij时,aij在上三角部分中,前面共有i行,共有n+n-1+n-(i-1)=i*n-个元素,而aij是本行第j-i个元素,故k=i*n-+j-i,当ij时,交换i与j即可。故sk与aij的对应关系为:,i*n-+j-i 当ij k=j*n-+i-j 当ij,2
11、三角矩阵,(1)下三角矩阵下三角矩阵的压缩存放与对称矩阵用下三角形式存放类似,但必须多一个存储单元存放上三角部分元素,使用的存储单元数目为n(n+1)/2+1。故可以将nn的下三角矩阵压缩存放到只有n(n+1)/2+1个存储单元的向量中,假设仍按行优先存放,这时sk与aij的对应关系为:,i(i+1)/2+j ij k=n(n+1)/2 ij,(2)上三角矩阵和下三角矩阵的存储类似,共需 n(n+1)/2+1个存贮单元,假设仍按行优先顺序存放,这时sk与aij的对应关系为:,i*n-i(i-1)/2+j-i 当ij k=n(n+1)/2 ij,3对角矩阵,我们仅讨论三对角矩阵的压缩存贮,五对角
12、矩阵,七对角矩阵等读者可以作类似分析。在一个nn的三对角矩阵中,只有n+n-1+n-1个非零元素,故只需3n-2个存储单元即可,零元已不占用存储单元。故可将nn三对角矩阵A压缩存放到只有3n-2个存储单元的s向量中,假设仍按行优先顺序存放,则:sk与aij的对应关系为:,3i-1 当 i=j+1k=3i 当i=j 3i+1 当i=j-1,5.4 稀疏矩阵,在上节提到的特殊矩阵中,元素的分布呈现某种规律,故一定能找到一种合适的方法,将它们进行压缩存放。但是,在实际应用中,我们还经常会遇到一类矩阵:其矩阵阶数很大,非零元个数较少,零元很多,但非零元的排列没有一定规律,我们称这一类矩阵为稀疏矩阵。,
13、按照压缩存储的概念,要存放稀疏矩阵的元素,由于没有某种规律,除存放非零元的值外,还必须存贮适当的辅助信息,才能迅速确定一个非零元是矩阵中的哪一个位置上的元素。下面将介绍稀疏矩阵的几种存储方法及一些算法的实现。,5.4.1 稀疏矩阵的存储,1三元组表,在压缩存放稀疏矩阵的非零元同时,若还存放此非零元所在的行号和列号,则称为三元组表法,即称稀疏矩阵可用三元组表进行压缩存储,但它是一种顺序存贮(按行优先顺序存放)。一个非零元有行号、列号、值,为一个三元组,整个稀疏矩阵中非零元的三元组合起来称为三元组表。,此时,数据类型可描述如下:const int maxsize=100;/定义非零元的最大数目st
14、ruct node/定义一个三元组 int i,j;/非零元行、列号int v;/非零元值;struct sparmatrix/定义稀疏矩阵 int rows,cols;/稀疏矩阵行、列数int terms;/稀疏矩阵非零元个数node data maxsize;/三元组表;,稀疏矩阵M和N的三元组表见图5-8。,2带行指针的链表,把具有相同行号的非零元用一个单链表连接起来,稀疏矩阵中的若干行组成若干个单链表,合起来称为带行指针的链表。例如,图5-6 的稀疏矩阵M的带行指针的链表描述形式见图5-9。,3十字链表,当稀疏矩阵中非零元的位置或个数经常变动时,三元组就不适合于作稀疏矩阵的存储结构,此
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 描述 电子 教案

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