- 1、本文档共84页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Ch的_5_数组和广义表(数据结构)
数组可以看成是一种特殊的线性表,即线性表中数据元素本身也是一个线性表 数组的定义和特点 定义 练习 二维数组A[12][18]采用列优先的存储方法,若每个元素各占3个存储单元,且第1个元素的地址为150,则元素A[9][7]的地址为( ) 问题: 假设以一维数组sa[n(n+1)/2]作为n阶对称阵的存储结构,则sa[k]和矩阵元素aij存在怎样的对应关系? 知识回顾2011-10-11 (10) 数组的定义 特殊矩阵的压缩 稀疏矩阵的压缩 按照b.data中三元组的次序依次在a.data中找到相应的三元组进行转置。 即:按照矩阵a的列序来进行转置。 算法分析: 时间复杂度:O(nu.tu) 一般算法复杂度:O(mu.nu) 若tu和mu.nu是同一数量级,则O(mu.nu2) 因此,此算法仅适用于tumu.nu 知识回顾 Homework(1) 5.1、5.2、5.8 Homework(2) 5.10 5.13 5.24 Status CreateSMtrix_OL(CrossList M){//创建稀疏矩阵M if(M) free(M); Scanf(m, n, t); M.mu:=m; M.nu:=n; M.tu:=t;//输入M的行数,列数和非零元个数 if(!(M.rhead=(OLink *)malloc((m+1)*sizeof(OLink))))exit(OVERFLOW); if(!(M.chead=(OLink *)malloc((n+1)*sizeof(OLink))))exit(OVERFLOW); M.rhead[]=M.chead[]=NULL; //初始化行列头指针向量;各行列链表为空链表 for(scanf(i,j,e);j!=0;scanf(i,j,e)){ if(!(p=(OLNode*)malloc(sizeof(OLNode))))exit(OVERFLOW); p-i=i; p-j=j; p-e=e;//生成结点 if(M.rhead[i]==NULL) M.rhead[i]=p; else{//寻查在行表中的插入位置 for(q=M.rhead[i];(q-right)q-right-jj;q=q-right); p-right=q-right;q-right=p;}//完成行插入 if(M.chead[j]==NULL)M.chead[j]=p; else{//寻查在列表中的插入位置 for(q=M.chead[j];(q-down)q-down-ii;q=q-down); p-down=q-down;q-down=p;} //完成列插入 } Return OK: } 矩阵B加到矩阵A上的运算(自学) 假设两个矩阵相加后的结果为A’,则和矩阵A’中的非零元aij’只能有三种情况:(1)bij(aij=0时);(2)aij(bij=0时);(3)aij+bij; 由此,当将B加到A上去时,对A矩阵的十字链表来说,或者插入一个新的结点,或者不变,或者是改变结点的val域值.还有一种可能,和矩阵A中的某个非零元相对应,和矩阵A’中是零元,即对A的操作是删除一个结点(aij+bij =0). 由此,整个运算过程可从矩阵的第一行起逐行进行.对每一行都从行表头出发分别A和B在该行中的第一个非零元结点后开始比较,按上述4种情况分别处理. 假设非空指针 pa和 pb分别指向矩阵A和B中行值相同的两个结点,pa == NULL 表明矩阵A在该行中没有非零元,则上述四种情况的处理过程为:1)若pa==NULL或pa-j pb-j,则需要在A矩阵的链表中插入一个值为bij的结点。此时,需改变同一行中前一结点的right域值,以及同一列中前一结点的down域值。2) 若pa-j pb-j,则只要将pa指针往右推进一步。3) 若pa-j == pb-j且pa-e+pb-e !=0,则只要将ai,j+bi,j 的值送到pa所指结点的e域即可,其它所有域的值都不变。4) 若pa-j == pb-j且pa-e+pb-e == 0,则需要在A矩阵的链表中删除pa所指的结点。此时,需改变同一行中前一结点的right域值,以及同一列中前一结点的down域值。 bij(aij=0) aij(bij=0) 稀疏矩阵的压缩存储方法: 一、三元组顺序表 二、行逻辑链接的顺序表 三、 十字链表 2011-10-14(12) 5.4 广义表的类型定义 ADT Glist { 数据对象:D={ei | i=1,2,..,n; n≥0; ei∈AtomSet 或 ei∈GList,
文档评论(0)