数据结构第4章 广义线性表(数组与广义表.ppt

数据结构第4章 广义线性表(数组与广义表.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
类似于线性表,一个二维数组的逻辑结构可定义为: 2_Array =(D,R) 其中D={aij|i=c1,c1+1,…,d1,j=c2,c2+1,…,d2,aij∈D0} R={ROW,COL} ROW={ aij,ai,j+1|c1≤i≤d1,c2≤j≤d2-1,aij,ai,j+1∈D0} COL={aij,ai+1,j|c1≤i≤d1-1,c2≤j≤d2, aij,ai+1,j∈D0} D0为某个数据对象,c1,c2,d1,d2均为整数。 通常取c1= c2=0。二维数组中含有(d1-c1+1)*(d2-c2+1)个数据元素,每一个数据元素ai,j均受到行关系ROW和列关系COL的制约:ai,j+1 称为ai,j在行关系ROW下的直接后继,而ai+1,j 则称为ai,j在列关系COL下的直接后继。与线性表一样,二维数组中所有的元素都必须属于同一数据类型, 且数组的每个元素都对应着一组下标(i,j)。 例5.1 对二维数组float a[10][8];计算 数组a中的元素数目; 若数组a的起始地址为1000,且每个数组元素长度为32位(即4个字节),数组元素a[6][4]的内存地址。 解:(1) 由于C语言中数组的行、列下界均为0,该数组行上界为10-1=9,列上界为8-1=7,所以该数组共有10*8=80个元素。 (2) 由于C语言采用行序为主序的存贮方式,因此有: LOC(a[6][4])= LOC(a[0][0])+(i﹡n +j)﹡c =1000+(6﹡8+4)﹡4 =1000+208=1208 所以,数组元素a[6][4]的内存地址为1208 假设以一维数组Sa[n﹡(n+1) /2]作为n阶对称矩阵A的存贮结构,则A中任一元素aij( i,j=1,2,….)和Sa[k]之间存在着如下对应关系: 当i≥j时 当 i<j时 End(50分钟) 三元组表存贮结构可定义如下: #define NUM 矩阵中非零元素最大个数 typedef struct { int i; // 行号 int j; // 列号 ElemType v; // 非零元素值 } TupleType // 三元组定义 若有: Spmatrix a; 则: a.data[0].i=0; a.data[0].j=0; a.data[0].item=15; a.m=5 a.n=6 a.tu=7 算法5.1求稀疏矩阵的转置矩阵 void transmat (spmatrix a, spmatrix b) { //a是稀疏矩阵M的三元组表示,由a求M的转置矩阵N的三元组表示b int p, q=0; b .m = a.n; b. n = a.m; b. t = a.t; if (b.t != 0) { for(col =0; col <= a.n-1; col++) // 以b.data[q]的i域次 序搜索 for (p = 0; p<= a.t; p++) // p为a.data的下标 if (a.data[p].j = = col ) { b . data[q].i = a.data[p].j; b . data[q].j = a.data[p].i; b. data[q].v = a.data[p].v; q++; } i j v i j v 0 1 12 0 2 -3 0 2 9 0 5 15 2 0 -3 1 0 12 2

文档评论(0)

wpxuang12 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档