稀疏矩阵乘法运算
更新时间:2024-06-25 17:12:01 阅读量: 综合文库 文档下载
稀疏矩阵的乘法运算
程序代码:
#include
int i,j; int e;
struct OLnode *right,*down; }OLnode,*Olink; typedef struct {
Olink *rhead,*chead; int mu,nu,tu; }Crosslist;
//在十字链表M.rhead[row]中插入一个t结点
void insert_row(Crosslist &M,OLnode *t,int row) {
OLnode *p;
int col=t->j;
if(M.rhead[row]==NULL||M.rhead[row]->j>col) {
t->right=M.rhead[row];
M.rhead[row]=t;
} else {
for(p=M.rhead[row];p->right&&p->right->j
行表中的插入位置 }
//在十字链表M.chead[col]中插入一个结点t void insert_col(Crosslist &M,OLnode *t,int col) {
OLnode *p;
int row=t->i;
t->right=p->right; p->right=t;
}
if(M.chead[col]==NULL||M.chead[col]->i>row)
{
t->down=M.chead[col];
M.chead[col]=t;
} else {
for(p=M.chead[col];p->down&&p->down->i
中的插入位置 }
//创建十字链表并存入数据 void input(Crosslist &M) {
int m,n,t;
cout<<\请输入矩阵的行和列的个数及非零元个数\ cin>>m>>n>>t;
if(t>m*n) exit(Overflow); M.mu=m; M.nu=n; M.tu=t; int row,col,e; OLnode *q;
M.rhead=(Olink *)malloc((m+1)*sizeof(Olink)); M.chead=(Olink *)malloc((n+1)*sizeof(Olink)); if(!M.rhead) exit(Overflow);
t->down=p->down; p->down=t;
}
if(!M.chead) exit(Overflow); for(int i=0;i<=m+1;i++)
M.rhead[i]=NULL;
for(int j=0;j<=n;j++)
M.chead[j]=NULL;
cout<<\请输入矩阵\ int k=1;
for(cin>>row>>col>>e;row!=0&&k<=t;cin>>row>>col>>e,k++) {
q=(OLnode *) malloc(sizeof(OLnode));
if(!t) exit(Overflow);
q->e=e; //生成结点
q->i=row; q->j=col;
insert_row(M,q,row); //完成行插入 insert_col(M,q,col); //完成列插入
} }
//矩阵M与矩阵N的乘法运算
void chengfa(Crosslist M,Crosslist N,Crosslist &Q) {
if(M.nu!=N.mu) exit(Overflow);
Q.mu=M.mu; Q.nu=N.nu;
Q.tu=0;
OLnode *p,*q,*t; Olink temp; int e,col;
Q.rhead=(Olink *)malloc((Q.mu+1)*sizeof(Olink)); Q.chead=(Olink *)malloc((Q.nu+1)*sizeof(Olink)); if(!Q.rhead) exit(Overflow); if(!Q.chead) exit(Overflow);
temp=(Olink)malloc((Q.nu+1)*sizeof(OLnode));
for(int i=0;i<=Q.mu+1;i++)
Q.rhead[i]=NULL;
for(int j=0;j<=Q.nu;j++)
Q.chead[j]=NULL;
for(int row=1;row<=Q.mu;row++) {
for(int k=1;k<=Q.nu;k++)
temp[k].e=0;
for(p=M.rhead[row];p!=NULL;p=p->right) {
int row2=p->j;
for(q=N.rhead[row2];q;q=q->right)//将每一行的各列乘积存入temp中
{
col=q->j;
temp[col].e+=p->e*q->e;
temp[col].i=row;
}
temp[col].j=col;
}
}
for(col=1;col<=Q.nu;col++)//将temp中的数据赋值给t,将t插入Q中 {
if(temp[col].e!=0)
{
t=(Olink)malloc(sizeof(OLnode)); }
t->e=temp[col].e; t->i=temp[col].i; t->j=temp[col].j; insert_row(Q,t,row); insert_col(Q,t,col);
} }
void output(Crosslist M) //输出矩阵M {
OLnode *pp;
for(int i=1;i<=M.mu;i++) {
pp=M.rhead[i];
for(int j=1;j<=M.nu;j++) {
}
if(pp&&pp->j==j) {
int e=pp->e;
cout<
pp=pp->right; } else
cout<<0<<\
cout< } } void main() { Crosslist M,N,Q; input(M); input(N); cout<<\矩阵M:\ output(M); cout<<\矩阵N:\ output(N); chengfa(M,N,Q); cout<<\矩阵M、N的乘积为:\ output(Q); } 运行结果:
正在阅读:
稀疏矩阵乘法运算06-25
跳舞的辛苦作文400字07-08
德语a1词汇上课讲义05-27
生物高三一轮复习必修一基础默写卷(2)09-09
《长方体和正方体》整理复习课教学设计11-09
入党转正工作总结08-23
安慰近义词是什么【精彩5篇】03-24
金属切削原理与刀具练习题11110-04
单级倒立摆的两种控制方法的仿真及研究05-24
材料力学计算题库03-24
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 乘法
- 稀疏
- 矩阵
- 运算
- 新老夏利轿车的维修
- 民办非企业年度工作总结
- 公务礼仪常识
- 太阳能电池概念及术语
- 大地测量学 总结
- 十层框架剪力墙结构Ansys有限元大作业
- 温岭市人事劳动社会保障局文件
- 我国本科会计教育问题研究
- 陆昊在全国乡镇实体化“大团委”建设工作电视电话会议上的讲话
- 错题集1
- 济南市现代物流业发展十二五规划
- 新农合医疗及分级诊疗解读
- 元明清文学教案
- 中国灯芯绒行业行业市场发展预测及投资战略咨询报告(目录) -
- 危险化学品产品生产许可证实施细则(涂料产品部分) - 图文
- 建设工程项目经理岗位职业资质管理导则
- 农业综合开发高标准农田建设项目《施工组织设计》(详细型)
- 计算机四级网络工程师题库及答案(12套)电子版
- 关于印发《常州市市级机关差旅费管理暂行办法》的通知
- 第2章餐饮食品中常见的危害因素及其预防控制