欢迎来到天天文库
浏览记录
ID:60762863
大小:150.50 KB
页数:65页
时间:2020-12-15
《第6章-多维数组和广义表ppt课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、实用数据结构基础第6章多维数组和广义表第6章树多维数组和广义表可以看作是线性表的推广,其特点是线性表中的数据元素仍然是一个表。知识点多维数组的逻辑结构和存储结构特殊矩阵的压缩存储稀疏矩阵的三元组存储、十字链表存储广义表的逻辑结构、存储结构及其基本算法难点要求第6章目录6-1多维数组6-2特殊矩阵的压缩存储6-3稀疏矩阵6-4广义表小结验证性实验6:稀疏矩阵和广义表子系统自主性实验6:稀疏矩阵十字链表的存储单元练习66-1多维数组6.1.1逻辑结构数组作为一种数据结构,其特点是结构中的元素可以是具有某种结构的数据,但属于同一数据类型。比如
2、,一维数组可以看作一个线性表,二维数组可以看作“数据元素是一维数组”的一维数组,三维数组可以看作“数据元素是二维数组”的一维数组。一般把三维以上的数组称为多维数组,n维的多维数组可以视为n1维数组元素组成的线性结构。其中每一个一维数组又由m个单元组成。图6-1是一个n行m列的数组。在二维数组中的每一个元素最多可以有两个直接前驱和两个直接后继(边界除外),在n维数组中的每一个元素最多可以有n个直接前驱和n个直接后继。所以多维数组是一种非线性结构。数组是一个具有固定格式和数量的数据有序集,每一个数据元素有唯一的一组下标来标识,通常在很多高
3、级语言中数组一旦被定义,每一维的大小及上下界都不能改变。因此,在数组上一般不做插入或删除数据元素的操作。在数组中经常做的两种操作如下。(1)取值操作:给定一组下标,读取其对应的数据元素。(2)赋值操作:给定一组下标,存储或修改与其相对应的数据元素。6.1.2存储结构通常,数组在内存被映象为向量,即用向量作为数组的一种存储结构,这是因为在计算机内存储结构是一维的。数组的行列固定后,通过一个映象函数,就可以根据数组元素的下标得到它的存储地址。对于一维数组只要按下标顺序分配即可;对多维数组分配时,要把它的元素映象存储在一维存储器中。1.存储方
4、式(1)以行为主(rowmajororder)以行为主的存储方式也称为按行优先顺序方式,实现时按行号从小到大的顺序,先存储第0行的全部元素,再存放第1行的元素、第2行的元素……一个2×3二维数组的逻辑结构如图6-2所示,以行为主的内存映象如图6-3(a)所示,其分配顺序为:a00,a01,a02,a10,a11,a12。以行为主序的分配规律是:最右边的下标先变化,即最右下标从小到大,循环一遍后,右边第二个下标再变……,从右向左,最后是左下标。(2)以列为主序(columnmajororder)以列为主的存储方式也称为按列优先顺序方式,实
5、现时按列号从小到大的顺序,先存储第0列的全部元素,再存储第1列的元素、第2列的元素……图6-2所示的逻辑结构,以列为主的内存映象如图6-3(b)所示,其分配顺序为:a00,a10,a01,a11,a02,a12。以列为主分配的规律恰好与以行为主次序相反:最左边的下标先变化,即最左下标从小到大,循环一遍后,左边第二个下标再变……,从左向右,最后是右下标。2.存储地址“以行为主”次序分配存储单元为例看其地址的计算(1)二维数组中aij的地址在C语言中数组中每一维的下界定义为0,数组的基址为LOC(a00),每个数组元素占据d个字节,那么ai
6、j的物理地址可用一个线性寻址函数计算:LOC(aij)=LOC(a00)+(i×n+j)×d(0下标起始的语言)(2)三维数组中aijk的地址同理对于三维数组元素aijk的物理地址为:LOC(aijk)=LOC(a000)+((i×n×p+j×p+k)×d(0下标起始的语言)【例6-1】设二维数组A5×6,每个元素占4个字节(Byte),存储器按字节编址。已知A的起始地址为2000。计算(1)数组的大小n×m×d=5×6×4=120Byte(2)数组结点a45的存储地址LOC(aij)=LOC(a00)+(i*n+j)*d//n为总列数
7、LOC(a45)=2000+(4×6+5)×4=2116(3)按行为主存储,计算a32的存储地址LOC(aij)=LOC(a00)+(i*n+j)*d//n为总列数LOC(a32)=2000+(3×6+2)×4=2080(4)按列为主存储,计算a32的存储地址LOC(aij)=LOC(a00)+(j*m+i)*d//m为总行数LOC(a32)=2000+(2×5+3)×4=2052【例6-2】若矩阵An×m中存在某个元素aij,满足:aij是第i行中最小值且是第j列中的最大值,则称该元素为矩阵A的一个鞍点。试编写一个算法,找出A中的所有
8、鞍点。基本思想:在矩阵A中求出每一行的最小值元素,然后判断该元素是否是它所在列中的最大值。如果是则打印输出,接着处理下一行。设矩阵A用一个二维数组表示,其算法如下:voidsaddle(intA[][],i
此文档下载收益归作者所有