用十字链表和一般方法分别实现稀疏矩阵的乘法和加法(完整版)实用资料.doc
上传人:天马****23 上传时间:2024-09-10 格式:DOC 页数:63 大小:2.3MB 金币:10 举报 版权申诉
预览加载中,请您耐心等待几秒...

用十字链表和一般方法分别实现稀疏矩阵的乘法和加法(完整版)实用资料.doc

用十字链表和一般方法分别实现稀疏矩阵的乘法和加法(完整版)实用资料.doc

预览

免费试读已结束,剩余 53 页请下载文档后查看

10 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

用十字链表和一般方法分别实现稀疏矩阵的乘法和加法(完整版)实用资料(可以直接使用,可编辑完整版实用资料,欢迎下载)#include<stdio.h>#include<malloc.h>#defineSize2501#defineSize151typedefstruct{inti;intj;inte;//非零元的值}triple;//定义三元组typedefstruct{tripledata[Size+1];//矩阵中的元素introps[Size1+1];//rops[i]为第i行元素中的首非零元在data[]中的序号intmu;//行数intnu;//列数inttu;//非零元数}juzhen;//定义矩阵typedefstructnode//定义十字链表元素{inti,j,e;structnode*right,*down;//该非零元所在行表和列表的后继元素}node,*link;typedefstruct//定义十字链表对象结构体{link*rhead,*chead;//行和列的头指针intm,n,t;//系数矩阵的行数,列数,和非零元素个数}crosslist;voidcreatecross(crosslist&M)//建立十字链表{inti,j,e,k;node*p,*q;printf("输入行,列和非零元数,空格隔开:\n");scanf("%d%d%d",&M.m,&M.n,&M.t);M.rhead=(link*)malloc((M.m+1)*sizeof(link));//给行和列的头指针分配内存M.chead=(link*)malloc((M.n+1)*sizeof(link));for(k=1;k<=M.m;k++)//初始化行,列的头指针M.rhead[k]=NULL;for(k=1;k<=M.n;k++)M.chead[k]=NULL;printf("输入非零元的行,列和值,空格隔开:\n");for(k=1;k<=M.t;k++)//输入非零元{scanf("%d%d%d",&i,&j,&e);p=(node*)malloc(sizeof(node));p->i=i;p->j=j;p->e=e;if(M.rhead[i]==NULL||M.rhead[i]->j>j)//插入元素所在行无非零元或首非零元的列标大于插入元素的列标{p->right=M.rhead[i];M.rhead[i]=p;}else{for(q=M.rhead[i];(q->right)&&q->right->j<j;q=q->right);//空循环找到第一个列标大于或等于插入元素列标的元素p->right=q->right;q->right=p;}if(M.chead[j]==NULL||(M.chead[j]->i>i))//插入元素所在列无非零元或首非零元的行标大于插入元素的行标{p->down=M.chead[j];M.chead[j]=p;}else{for(q=M.chead[j];(q->down)&&q->down->i<i;q=q->down);//空循环找到第一个行标大于或等于插入元素行标的元素p->down=q->down;q->down=p;}}}voidprintcross(crosslistA)//输出十字链表{if(A.m==0)printf("十字链表为空!\n");else{printf("十字链表为:\n");inti,j;for(i=1;i<=A.m;i++){linkp=A.rhead[i];for(j=1;j<=A.n;j++){if((p)&&(j==p->j)){printf("%5d",p->e);p=p->right;}elseprintf("%5d",0);}printf("\n");}}printf("\n");}crosslistaddcross(){printf("十字链表加法:\n");crosslista,b;//创建两个十字链表对象,并初始化createcross(a);createcross(b);node*pre,*h[51],*p