稀疏矩阵乘法详解,两个稀疏矩阵相加的算法

  稀疏矩阵乘法详解,两个稀疏矩阵相加的算法

  十字链表矩阵相乘两个十字链表的矩阵相乘。

  矩阵的输入

  先需要输入矩阵的行数、列数、非0个数在输入非零数的坐标和数值第一个矩阵:矩阵的显示比较粗糙,自己有需求自己改一下吧。

  第二个矩阵:

  结果:

  结果输出不是矩阵,自己需要可以自己改一下结果显示形式,我就这样显示了。

  这个代码实在开发C上实现的,这个看一下自己的环境,一般都没什么问题。包含标准视频

  #包含字符串。h

  #包含标准库

  #包含马洛克

  #定义确定一

  #定义溢出0

  #定义错误-1

  数据类型

  整型状态;

  数据类型说明结构奥尔节点

  {

  int i,j;

  elem型;

  结构OLNode *右,*下

  }OLNode,* OLink

  数据类型说明结构{

  OLink *rhead,* chead

  int mu,nu,tu;

  }交叉列表

  状态创建矩阵_ OL(交叉列表M)

  {

  int m,n,t,c=0;

  int i,j,e;

  (同Internationalorganizations)国际组织计数;

  OLink p,q;

  printf(稀疏矩阵的行数、列数、非零元个数:\ n’);

  scanf(%d%d%d ,m,n,

  m=m;

  m。nu=n;

  m。tu=t;

  if(m ^ 1 n ^ 1 t m * n){

  printf(该对象不符合矩阵要求);}

  否则{

  如果(!(m . rhead=(OLink *)malloc((m 1)* sizeof(OLink))))exit(溢出);

  如果(!(m . chead=(olink *)malloc((n ^ 1)* sizeof(olink))))exit(溢出);

  for(I=0;I I)m rhead[I]=NULL;

  for(j=0;j j)m . chead[j]=NULL;

  printf(请依次输入元素行数、列数、权值:\ n’);

  for(count=0;计数计数)

  { c=计数1;

  printf(请输入第%d元素的关键信息:’,c);

  scanf(%d%d%d ,I,j,

  如果(!(p=(ol node *)malloc(sizeof(ol node)))exit(溢出);

  噗噗噗

  if(m . rhead[I]==NULL m . rhead[I]-j j){ p-right=m . rhead[I];m . rhead[I]=p;}

  否则{

  for(q=m . rhead[I];(问-右)(q-右- j q=q-右);

  p右=q右;q-right=p;//rhead是列数组

  }

  if(m . chead[j]==NULL m . chead[j]-I I){ p-down=m . chead[j];m . chead[j]=p;}

  否则{

  for(q=m . chead[j];(q-down)q-down-I q=q-down);

  p下=q下;q-down=p;//chead是行数组

  }

  }

  }

  退货ok;

  }

  状态初始化_OL(OLink l)

  {

  如果(!(l=(ol node *)malloc(sizeof(ol node)))exit(溢出);

  }

  状态初始化_S(交叉列表一,交叉列表b,交叉列表M)//初始化矩阵c

  { int m,n;

  int i,j;

  m=a;

  m=单位面积

  m。nu=b . nu

  n=B.nu

  如果(!(m . rhead=(OLink *)malloc((m 1)* sizeof(OLink))))exit(溢出);

  如果(!(m . chead=(olink *)malloc((n ^ 1)* sizeof(olink))))exit(溢出);

  for(I=0;I I)m rhead[I]=NULL;

  for(I=0;I I)m . chead[I]=NULL;

  退货ok;

  }

  状态创建矩阵(交叉列表m,链接l)

  {

  int i,j,e;

  OLink p,q;

  我=l-

  j=l-

  e=l-

  如果(!(p=(ol node *)malloc(sizeof(ol node)))exit(溢出);

  p-p-p-p-down=NULL;p-right=NULL;

  if(m . rhead[I]==NULL m . rhead[I]-j j){ p-right=m . rhead[I];m . rhead[I]=p;}

  否则{

  for(q=m . rhead[I];(问-右)(q-右- j q=q-右);

  p右=q右;q-right=p;//rhead是列数组

  }

  if(m . chead[j]==NULL m . chead[j]-I I){ p-down=m . chead[j];m . chead[j]=p;}

  否则{

  for(q=m . chead[j];(q-down)q-down-I q=q-down);

  p下=q下;q-down=p;//chead是行数组

  }

  退货ok;

  }

  int PrintSMatrix(CrossList M)

  {

  int i,j;

  OLink p;

  if(m1 m nu 1){ printf(矩阵为空矩阵或者是非正常矩阵\ n’);

  }

  否则{

  for(j=1;j=M.muj)

  {

  p=m . rhead[j];

  while(p)

  {

  printf(第%d行%d列值为:%d\n ,p- i,p- j,p-

  p=p-右;

  }

  }

  }

  退货ok;

  }

  国际拉姆乙(交叉表一,交叉表b,交叉表c)

  {

  OLNode * q=空,* L=空

  OLink S;

  int i,j,num

  初始化_ OL(S);

  s-down=NULL;

  s-right=NULL;

  if(A.nu==B.mu){

  初始化_S(甲、乙、丙);

  for(I=1;I=c我)

  for(j=1;j=C.nuj)

  { num=0;

  q=a . rhead[I];

  l=b . chead[j];

  而((q!=NULL) (L!=NULL))

  {if(q- j==L- i){num=q- e*L-

  q=q-右;L=L-向下;

  }

  else if(q- j L- i)

  {

  for(;我!=NULLL=L-向下)

  {

  如果(q- j=L- i)破;}}

  其他

  { for(;q!=NULLq=q-右)

  {

  如果(q- j=L- i)破;

  }}

  } printf(%d ,num);

  如果(num!=0)

  {

  表示"上帝的": sblood

  表示"上帝的": sblood

  s-e=num

  创建矩阵(C,S);

  }

  否则;}

  }

  否则{

  printf(\n矩阵无法相乘\ n’);

  }

  }

  int main()

  {

  交叉列表甲、乙、丙;

  OLink p,q,l;

  (同Internationalorganizations)国际组织数据;

  printf(请依次输入第一个\ n’);

  create matrix _ OL(A);

  printf( \ n这个矩阵是%d*%d \n ,A.mu,A.nu 的矩阵);

  prints matrix(A);

  printf( \ n请依次输入第二个\ n );

  create matrix _ OL(B);

  printf( \ n这个矩阵是%d*%d \n ,B.mu,B.nu 的矩阵);

  prints matrix(B);

  printf( \ n矩阵乘法结果:);

  拉姆_B(A,B,C);

  printf( \ n这个矩阵是%d*%d \n ,C.mu,C.nu 的矩阵);

  prints matrix(C);

  Printf(做个推荐很有用!);

  系统(“暂停”);

  返回0;

  }

  来自头发没了的,

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • office2010激活密钥大全 怎么永久激活office2010
  • project2010产品密钥免费_project2010激活密钥永久激活码
  • c语言调用退出函数 c语言退出整个程序怎么写
  • c语言中怎么给函数初始化 c语言的初始化语句
  • c语言编写函数计算平均值 c语言求平均函数
  • chatgpt是什么?为什么这么火?
  • ChatGPT为什么注册不了?OpenAI ChatGPT的账号哪里可以注册?
  • OpenAI ChatGPT怎么注册账号?ChatGPT账号注册教程
  • chatgpt什么意思,什么是ChatGPT ?
  • CAD中怎么复制图形标注尺寸不变,CAD中怎么复制图形线性不变
  • cad中怎么创建并使用脚本文件,cad怎么运行脚本
  • cad中快速计算器的功能,cad怎么快速计算
  • cad中快速修改单位的方法有哪些,cad中快速修改单位的方法是
  • cad中心点画椭圆怎么做,cad轴测图怎么画椭圆
  • CAD中常用的快捷键,cad各种快捷键的用法
  • 留言与评论(共有 条评论)
       
    验证码: