100303 郝明(实验四).docVIP

  • 3
  • 0
  • 约4.32千字
  • 约 5页
  • 2018-03-08 发布于河南
  • 举报
100303 郝明(实验四)

实验四 数组的运算 实验目的: 掌握稀疏矩阵的压缩存储方法及主要运算的实现。 实验内容与要求: 设计一个稀疏矩阵计算器,要求能够:⑴输入并建立稀疏矩阵;⑵输出稀疏矩阵;⑶执行两个矩阵相加;⑷执行两个矩阵相乘 算法设计: // 文件名称:100303 郝明(实验) //郝明 1301100303 //2012年4月日 :42 //程序中包括 //参考教学PPT 3.13 // #include stdio.h #define smax 16 //非0元素个数 typedef int datatype; typedef struct { int i,j; //行下标、列下标 datatype v; //元素的值 }node; typedef struct { node data[2*smax];//乘2考虑到矩阵相加的情况 int m,n,t; //行数、列数、非0元素个数 }spmatrix; spmatrix matrix[2],result,*r=result; spmatrix *SORT(spmatrix *a){ int x,y; node temp; for(x=0;xa-t;x++) for(y=x+1;ya-t;y++) if(a-data[x].i=a-data[y].i) if(a-data[x].ja-data[y].j){ temp=a-data[x]; a-data[x]=a-data[y]; a-data[y]=temp; } return a; } spmatrix *BUILD(spmatrix *a) { int x,y,temp_i,temp_j,temp_v; a-t=0; printf(请输入非0元素信息,格式(行号 列号 数值)最多%d个,行号或列号输入0则结束\n,smax); do { printf(第%d个非0元素:,a-t+1); scanf(%d %d %d,temp_i,temp_j,temp_v); if(temp_i==0||temp_j==0) break; a-data[a-t].i=temp_i; a-data[a-t].j=temp_j; a-data[a-t].v=temp_v; a-t++; } while(a-tsmax); printf(请输入矩阵的行数:);scanf(%d,a-m); printf(请输入矩阵的列数:);scanf(%d,a-n); //检查是否有非0元素的行号和列号超出范围 for(x=0;xa-t;x++) if(a-data[x].ia-m||a-data[x].ja-n){ printf(ERROR.); return NULL; } SORT(a); return a; } void OUTPUT(spmatrix *a){ int x,y,z=0; int s[a-m][a-n]; for(x=0;xa-m;x++) for(y=0;ya-n;y++) s[x][y]=0; while(za-t){s[a-data[z].i-1][a-data[z].j-1]=a-data[z].v;z++;} for(x=0;xa-m;x++){ for(y=0;ya-n;y++) printf(%d ,s[x][y]); printf(\n); } } spmatrix *PLUS(spmatrix *a,spmatrix *b){ int x,y=0,z=0; node *p,*q; spmatrix *temp=result; temp-m=a-mb-m?a-m:b-m; temp-n=a-nb-n?a-n:b-n; temp-t=a-t+b-t; while(za-t) {temp-data[z]=a-data[z];z++;} for(x=0;xa-t;x++) while(yb-t){ if(a-data[x].i==b-data[y].i) if(a-data[x].j==b-data[y].j){ temp-data[x].v=a-data[x].v+b-data[y++].v; temp-t--; break; } else if(a-data[x].jb-data[y].j) {temp-data[z++]=b-data[y++];} else break; else if(b-data[y].ia-data[x].i)

文档评论(0)

1亿VIP精品文档

相关文档