



全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验十 稀疏矩阵#include #define OK 1#define ERROR 0 #define TRUE 1 #define FALSE 0 #define MAXSIZE 100 typedef int Status; typedef float ElemType;typedef struct int i,j; /非零元素行下标和列下标 ElemType e; /非零元素值 Triple;typedef struct Triple dataMAXSIZE+1;/非零元三元组表,data0不用 int mu,nu,tu; /矩阵的行数、列数和非零元素个数 TSMatrix; TSMatrix NewMatrix(int m,int n); /新建一个三元组表示的稀疏矩阵 Status InsertElem(TSMatrix *M,int row,int col,ElemType e); /在三元组表示的稀疏矩阵M,第 row 行,第 col 列位置插入元素e /插入成功,返回OK,否则返回ERROR Status FindElem(const TSMatrix *M,int row,int col,ElemType *e); /查找三元组表示的稀疏矩阵M中,第 row 行,第 col列元素,若不为0, /则用e返回其值,并返回TRUE,否则返回FALSE Status TransposeSMatrix(const TSMatrix *M,TSMatrix *T); /采用三元组表存储表示,求稀疏矩阵M的转置矩阵T Status FastTransposeSMatrix(const TSMatrix *M,TSMatrix *T); /利用三元组顺序表存储表示,求稀疏矩阵M的转置矩阵T Status MultSMatrix(const TSMatrix *M,const TSMatrix *T,TSMatrix *Q); /稀疏矩阵的乘法,如果符合乘法规则,Q返回M*T结果,并返回OK,否则返回ERROR void PrintSMatrix(const TSMatrix *M); /打印稀疏矩阵所有元素 int main() TSMatrix M=NewMatrix(3,4); TSMatrix T; TSMatrix Q; InsertElem(&M,3,2,3.65); InsertElem(&M,2,2,2.31); printf(nM:); PrintSMatrix(&M); FastTransposeSMatrix(&M,&T); printf(nT(Transpose of M):); PrintSMatrix(&T); MultSMatrix(&M,&T,&Q); printf(nM*T=); PrintSMatrix(&Q); return 0; TSMatrix NewMatrix(int m,int n) /新建一个三元组表示的稀疏矩阵 TSMatrix M; M.mu=m; M.nu=n; M.tu=0; return M; Status InsertElem(TSMatrix *M,int row,int col,ElemType e) /在三元组表示的稀疏矩阵M,第 row 行,第 col 列位置插入元素e /插入成功,返回OK,否则返回ERROR int i,t,p; if(M-tu=MAXSIZE) /当前三元组表已满 printf(nError:There is no space in the matrix;n); return ERROR; if(rowM-mu|colM-nu|row1|coltu=0) /插入前矩阵M没有非零元素 M-datap.i=row; M-datap.j=col; M-datap.e=e; M-tu+; return OK; for(t=1;ttu;t+)/寻找合适的插入位置 if(row=M-datat.i)&(col=M-datat.j) p+; if(row=M-datat-1.i & col=M-datat-1.j)/插入前,该元素已经存在 M-datat-1.e=e; return OK; for(i=M-tu;i=p;i-)/移动p之后的元素 M-datai+1.i=M-datai.i; M-datai+1.j=M-datai.j; M-datai+1.e=M-datai.e; /插入新元素 M-datap.i=row; M-datap.j=col; M-datap.e=e; M-tu+; return OK; Status FindElem(const TSMatrix *M,int row,int col,ElemType *e) /查找三元组表示的稀疏矩阵M中,第 row 行,第 col列元素,若不为0, /则用e返回其值,并返回TRUE,否则返回FALSE int p; for(p=1;ptu;p+) if(M-datap.i=row&M-datap.j=col) *e=M-datap.e; return TRUE; return FALSE; Status TransposeSMatrix(const TSMatrix *M,TSMatrix *T) /采用三元组表存储表示,求稀疏矩阵M的转置矩阵T int col,p,q; T-mu=M-nu; T-nu=M-mu; T-tu=M-tu; if(T-tu) q=1; for(col=1;colmu;col+) for(p=1;ptu;p+) if(M-datap.j=col) T-dataq.i=M-datap.j; T-dataq.j=M-datap.i; T-dataq.e=M-datap.e; q+; return OK; Status FastTransposeSMatrix(const TSMatrix *M,TSMatrix *T) /利用三元组顺序表存储表示,求稀疏矩阵M的转置矩阵T int col,t,p,q,*num,*cpot; T-mu=M-nu; T-nu=M-mu; T-tu=M-tu; if(T-tu) num=(int *)malloc(sizeof(int)*M-tu); cpot=(int *)malloc(sizeof(int)*M-tu); if(!(num&cpot) printf(Apply for memory error.n); exit(0); for(col=1;colnu;col+) numcol=0; /求M中每一列含有非零元素的个数 for(t=1;ttu;t+) +numM-datat.j; cpot1=1; /求第col列中第一个非零元素在b.data中的序号 for(col=2;colnu;col+) cpotcol=cpotcol-1+numcol-1; for(p=1;ptu;p+) col=M-datap.j; q=cpotcol; T-dataq.i=M-datap.j; T-dataq.j=M-datap.i; T-dataq.e=M-dataq.e; +cpotcol; /for /if return OK; Status MultSMatrix(const TSMatrix *M,const TSMatrix *T,TSMatrix *Q) /稀疏矩阵的乘法,如果符合乘法规则,Q返回M*T结果,并返回OK,否则返回ERROR int i,j,k,p; ElemType m,t,s; if(M-nu!=T-mu) printf(Sorry,these two matrice cant multiply.n); return ERROR; Q-mu=M-mu; Q-nu=T-nu; Q-tu=0; p=1; for(i=1;imu;i+) for(j=1;jnu;j+) s=0; for(k=1;knu;k+) if(FALSE=FindElem(M,i,k,&m) continue; if(FALSE=FindElem(T,k,j,&t) continue; s+=m*t; if(s!=0)/Qij非零 Q-datap.i=i; Q-datap.j=j; Q-datap.e=s; p+; Q-tu+; return OK; void PrintSMatrix(const TSMatrix *M) /打印稀疏矩阵所有元素 int i,j,p=1; printf(nsize:%d
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 知识产权赋能新质生产力的作用
- 医患关系发展时间线
- 建设工程安全管理实务讲解
- 工信新质生产力
- 2025年呼吸内科常见呼吸系统疾病诊断试卷答案及解析
- 构建新质生产力的实践路径
- 2025年呼吸内科疾病检测与治疗综合考试答案及解析
- 2025年精神科护理知识测试卷答案及解析
- 2025年骨科骨折固定术后康复方案制定模拟考试卷答案及解析
- 2025年骨科骨折固定操作规范考核模拟测试卷答案及解析
- 时事政治考试题(含答案)
- 生物标本课程讲解
- 专八备考单词讲解
- 《古代诗歌四首》理解性默写与训练-2023学年七年级语文上册知识梳理与能力训练
- 2025年非高危安全管理员和企业负责人习题有(含答案)
- 2025年度乡村医生能力提升培训考试试题及答案
- 2025法拍房屋代理竞买合同范本:专业中介服务
- 医院2025年年度窗口服务优化计划
- 营销部综合事务管理办法
- 机加工车间员工技能培训
- 部编人教版三年级上册道德与法治全册教案
评论
0/150
提交评论