数据结构关于稀疏矩阵相加问题
来源:互联网 发布:算法流程图用什么画 编辑:程序博客网 时间:2024/05/21 11:03
今天下午也就那出来想了想,写了写
#include<stdio.h>#define MAX 100 struct Triple{int i,j;int e;}; struct TSMatrix{Triple date[MAX+1];//非零三元组表,date[0]不用 int mu,nu,tu;//矩阵的行数,列数和非零圆个数 };/*创建稀疏矩阵*/int CreatSMatrix(TSMatrix &M){int i;Triple T;int flag=0;printf("please input the TSMatrix's line low and amount\n");scanf("%d %d %d",&M.mu,&M.nu,&M.tu);if(M.tu>MAX)//如果非零圆太多,退出 return 0;M.date[0].i=0;for(i=0;i<M.tu;i++){do{printf("请按行输入第%d个非零元素在的行,列,元素值\n");scanf("%d %d %d ",&T.i,&T.j,&T.e);if(T.i<1||T.i>M.mu||T.j<1||T.j>M.nu)flag=1;}while(flag);//输入值范围不对重新输入 M.date[i]=T; }return 0; } /*比较函数*/int comp(int a,int b){if(a<b)return -1;if(a==b)return 1; } /*稀疏矩阵加法运算函数*/ int AddSMatrix(TSMatrix M,TSMatrix N,TSMatrix &Q)//M+N=Q { int m=1,n=1,q=0;//m,n,q 是矩阵元素个数 if(M.mu!=N.mu||M.nu!=N.nu)//如果行列不相等 return 0; Q.mu=M.mu; Q.nu=M.nu; //设置Q的行数和列数 while(m<=M.tu&&n<=N.tu)//当两个矩阵的元素都没有处理完的时候 { switch (comp(M.date[m].i,N.date[n].i))//比较两行当前元素的行值关系 { case -1:Q.date[++q]=M.date[m++];//矩阵M的行值小,将M的值赋给Q break; case 0:switch(comp(M.date[m].j,N.date[n].j))//,行值相等。继续比较当前元素的列值关系 { case -1:Q.date[++q]=M.date[m++]; //矩阵M的列值较小,将M赋给Q break; case 0:Q.date[++q]=M.date[m++];//MN矩阵当前非零元的行列军相等,将其想加赋给Q Q.date[q].e+=N.date[n++].e;//想加M+N if(Q.date[q].e==0)//两元素之和为0,不存入稀疏矩阵 { q--; }case 1:Q.date[++q]=N.date[n++];//矩阵N的列值小,将N的值赋给矩阵Q } break; case 1:Q.date[++q]=N.date[n++];//矩阵N的行值小,将N的行值赋给矩阵Q }//以下循环最多执行一个,,, while(m<=N.tu)//矩阵N的元素已经全部处理完毕,开始处理N的元素 Q.date[++q]=M.date[m++];while(n<=N.tu)//矩阵M的元素已经全部处理完毕,开始处理M的元素 Q.date[++q]=N.date[n++];if(q>MAX)//非零元太多 return -1;elseQ.tu=q; //矩阵Q的非零元个数 return 0; } } /*输出函数*/ void ShowSMatrix(TSMatrix M) { int i,j,k=1;//非零元的计数器k Triple *p=M.date+1;// 创建一个指向M第一个元素的指针 for(i=1;i<M.mu;i++) for(j=1;j<M.nu;j++)//循环 { if(k<M.tu&&p->i==i&&p->j==j)//如果p指向的非零元为当前循环所在处理的非零元 { printf("%5d",(p++)->e);//输出 k++;//计数器+1 } else printf("%5d",0);//p指向的元素不是当前循环在处理的元素,输出0 printf("\n"); } } int main() { TSMatrix A,B,C; printf("创建A矩阵\n"); CreatSMatrix(A); printf("创建B矩阵\n"); CreatSMatrix(B); AddSMatrix(A,B,C); ShowSMatrix(C); return 0; }
有不对的地方还请大家指教
1 0
- 数据结构关于稀疏矩阵相加问题
- 数据结构实践——稀疏矩阵相加
- 第九周--数据结构--稀疏矩阵相加
- 稀疏矩阵相加
- 第九周--数据结构--稀疏矩阵相加(之二)
- 第九周 稀疏矩阵相加
- 项目 3.1 - 稀疏矩阵相加
- 数据结构_数组与广义表_矩阵的十字链表存储稀疏矩阵相加
- 数据结构 稀疏矩阵运算器
- 数据结构--稀疏矩阵
- 数据结构之稀疏矩阵
- [数据结构复习]稀疏矩阵
- 数据结构-稀疏矩阵
- 数据结构-稀疏矩阵
- 【数据结构】稀疏矩阵
- 数据结构之稀疏矩阵
- 第九周 数据结构实践项目——数组和广义表【项目3.2-- 稀疏矩阵相加】
- 【数据结构】稀疏矩阵,对称矩阵
- 计算m个数组的和
- iframe相关页面的调用
- *[Lintcode]Largest Number 最大数
- 网络流-基本原理
- JavaScript 图片预览效果
- 数据结构关于稀疏矩阵相加问题
- java Thread线程方法详解
- Chrome无法使用shadowsocks代理的原因
- Android利用WifiDirect实现文件传输功能
- JS中三种编码方式(escape,encodeURI,encodeURIComponent)
- 不吃苦,你要青春何用?
- 创建guest domain ksh
- JS控制A标记的href跳转
- LintCode(easy)二分查找