



全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
-实验十 稀疏矩阵#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 %dn,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 招标采购从业人员考试(招标采购专业实务初、中级)试题库及答案(上海市2025年)
- 《祝福》课件四课时
- 我能打败怪兽绘本解读
- 广东省湛江市麻章区2023-2024学年高一上学期第一次月考数学考点及答案
- 公司新厂房布局规划课件
- 早期胃癌名词解释护理
- 2025绿洲集团商品房代理销售合同
- 2025年电子设备全国分销代理合同范本
- 骨科个案护理比赛案例汇报大纲
- 2025工程担保的合同范本
- 大学计算机(WPS Office)课件 刘卫国 第1-6章 计算机与信息社会-WPS电子表格
- 剧本杀门店运营项目方案
- 诉讼费承担合同协议
- 中国LTCC用玻璃陶瓷粉行业市场前景预测及投资价值评估分析报告
- 福海县集中供热基础设施节能升级建设项目环境影响报告表
- 护理职业礼仪与沟通技巧
- 高标准农田建设项目主要施工方案与技术措施
- 2025年公路路面修复劳务承包合同
- SJG 55-2019 建筑起重机械防台风安全技术规程
- 论文发表怎么隐藏作者信息
- 赣州市第一届职业技能大赛-分赛场-32-中药炮制-技术文件
评论
0/150
提交评论