- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构(第5章)讲解
第五章 数组、特殊矩阵和广义表;5.1 多维数组;5.1.1 数组的逻辑结构; 数组是一个具有固定格式和数量的数据有序集,每一个数据元素有唯一的一组下标来标识,因此,在数组上不能做插入、删除数据元素的操作。通常在各种高级语言中数组一旦被定义,每一维的大小及上下界都不能改变。在数组中通常做下面两种操作:
(1) 取值操作:给定一组下标,读其对应的数据元素。
(2) 赋值操作:给定一组下标,存储或修改与其相对应的数据元素。
我们着重研究二维和三维数组,因为它们的应用是广泛的,尤其是二维数组。; 5.1.2 数组的内存映象; 以行为主序的分配规律是:最右边的下标先变化,即最右下标从小到大,循环一遍后,右边第二个下标再变,…,从右向左,最后是左下标。以列为主序分配的规律恰好相反:最左边的下标先变化,即最左下标从小到大,循环一遍后,左边第二个下标再变,…,从左向右,最后是右下标。
; 例如一个2×3二维数组,逻辑结构可以用左图表示。以行为主序的内存映象如右图(a)所示。 分配顺序为:a11 ,a12 ,a13 ,a21 ,a22 ,a23 ;以列为主序的分配顺序为:a11 ,a21 ,a12 ,a22 ,a13 ,a23 ;它的内存映象如右图(b)所示。
; 设有m×n二维数组Amn,下面我们看按元素的下标求其地址的计算:
以“以行为主序”的分配为例:设数组的基址为LOC(a11),每个数组元素占据l个地址单元,那么aij 的物理地址可用一线性寻址函数计算:
LOC(aij) = LOC(a11) + ( (i-1)*n + j-1 ) * l
在C语言中,数组中每一维的下界定义为0,则:
LOC(aij) = LOC(a00) + ( i*n + j ) * l
推广到一般的二维数组:A[c1..d1] [c2..d2],则aij的物理地址计算函数为:
LOC(aij)=LOC(a c1 c2)+( (i- c1) *( d2 - c2 + 1)+ (j- c2) )*l; 同理对于三维数组Amnp,即m×n×p数组,对于数组元素aijk其物理地址为:
LOC(aijk)=LOC(a111)+( ( i-1) *n*p+ (j-1)*p +k-1)*l
推广到一般的三维数组:A[c1..d1] [c2..d2] [c3..d3],则aijk的物理地址为:
LOC(i,j)=LOC(a c1 c2 c3)+( (i- c1) *( d2 - c2 + 1)* (d3- c3 + 1)+ (j- c2) *( d3- c3 + 1)+(k- c3))*l;三维数组的逻辑结构和以行为主序的分配示意图如图所示。;例5.1 若矩阵Am×n 中存在某个元素aij满足:aij是第i行中最小值且是第j列中的最大值,则称该元素为矩阵A的一个鞍点。试编写一个算法,找出A中的所有鞍点。
基本思想:在矩阵A中求出每一行的最小值元素,然后判断该元素它是否是它所在列中的最大值,是则打印出,接着处理下一行。矩阵A用一个二维数组表示。;void saddle (int A[ ][ ],int m, int n) /*m,n是矩阵A的行和列*/
{ int i,j,min;
for (i=0;im;i++) /*按行处理*/
{ min=A[i][0]
for (j=1; jn; j++)
if (A[i][j]min ) min=A[i][j]; /*找第i行最小值*/
for (j=0; jn; j++) /*检测该行中的每一个最小值是否是鞍点*/
if (A[i][j]==min )
{ k=j; p=0;
while (pm A[p][j]=min) p++;
if ( p=m) printf ("%d,%d,%d\n", i ,k,min);
}
}
}
算法的时间性能为O(m*(n+m*n))。 ;5.2 特殊矩阵的压缩存储;5.2.1 对称矩阵; 对称矩阵关于主对角线对称,因此只需存储上三角或下三角部分即可。比如,只存储下三角中的元素aij,其特点是中j≤i且1≤i≤n,对于上三角中的元素aij ,它和对应的aji相等,因此当访问的元素在上三角时,直接去访问和它对应的下三角元素即可,这
文档评论(0)