4-第四章.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
4-第四章

第四章 数组和串 数组可以看成是一种特殊的线性表,即线性表中数据元素本身也是一个线性表 4.1 数组的定义和特点 定义 4.2 数组的顺序存储结构和实现 次序约定 以行序为主序 以列序为主序 4.3 矩阵的压缩存储 三角矩阵 稀疏矩阵的压缩存储方法 顺序存储结构 三元组顺序表 问题描述:已知一个稀疏矩阵的三元组表,求该矩阵转置矩阵的三元组表 问题分析 常规的二维数组表示时转置的算法: 设行指针数组和列指针数组,分别指向每行、列第一个非零元 结点定义 4)下面是一些广义表的例子; A = ( ) 空表,表长为0; B = (a,(b,c,d)) B的表长为2,两个元素分别为 a 和子表(b,c,d); C = (e) C中只有一个元素e,表长为1; D = (A,B,C,f ) D 的表长为4,它的前三个元素 A,B, C 广义表,第四个 f 是单元素; E=( a ,E ) 递归表. 5)若广义表不空,则可分成表头和表尾,反之,一对表头和表尾可唯一确定广义表 5.3.4 广义表的基本操作的递归算法 广义表是递归结构,所以广义表的许多操作可以用递归算法实现, 从键盘接收信息建立十字链表算法 算法分析:此算法对非零元输入的先后次序没任何要求 T(n)=o(t?s) 其中:t——非零元个数 s= max(m,n) 1、初始化头指针向量 2、初始化各行列链表 3、动态生成结点,输入非零元 4、将结点插入行 5、将结点插入列 4 1 8 ^ ^ 2 3 4 ^ ^ m=4,n=3 1,1,3 2,2,5 2,3,4 4,1,8 2,1,7 1 1 3 ^ ^ 2 1 7 ^ ^ 2 2 5 ^ ^ Status CreateSMatrix_OL(CrossList M) { //创建稀疏矩阵M。采用十字链表存储表示 if (M) free(M); scanf(m,n,t); //输入M的行数、列数和非零元个数 M.mu=m; M.nu=n; M.tu=t; 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); i!=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]-jj) {p-right=M.rhead[I];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]-ii) {p-down=M.chead[j];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; }//CreateSMatrix_OL 算法思路: 假设非空指针pa和pb分别指向矩阵A和B中行值相同的两个结点: 则主要处理过程为: 1、若pa==NULL或pa-jpb-j,则需要在A矩阵的链表中插入一个值为bij的结点。此时,需改变同一行中前一结点的right域值,以及同一列中前一结点的down域值。 2、若pa-jpb-j,则只要将pa指针往右推进一步。 3、若pa-j=

文档评论(0)

f8r9t5c + 关注
实名认证
文档贡献者

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

版权声明书
用户编号:8000054077000003

1亿VIP精品文档

相关文档