三元组的应用.docx
- 文档编号:26086300
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:7
- 大小:43.13KB
三元组的应用.docx
《三元组的应用.docx》由会员分享,可在线阅读,更多相关《三元组的应用.docx(7页珍藏版)》请在冰豆网上搜索。
三元组的应用
三元组的应用
五邑大学实验报告
实验课程名称
数据结构
一.实验目的
1、掌握稀疏矩阵三元组表的存储、创建、显示、转置。
2、了解稀疏矩阵的相关应用。
二.实验内容
使用三元组表存储稀疏矩阵,编写算法求它的转置矩阵。
。
三.内容分析
算法基本思想描述:
由于稀疏矩阵的非零元素较少,零元素较多,所以只需存储其非零元素。
因此可以建立一个三元组表,分别保存稀疏矩阵的非零元素的行号、列号和元素值。
对稀疏矩阵进行快速转置是可以引入两个向量num[n+1],cpot[n+1],分别标记矩阵中第col列的非零元素个数和第一个非零元素在转置后的矩阵的位置;再扫描三元组表,找到非零元素,直接对其在转置后的矩阵所在的位置上进行修改,以节省时间。
四.实验步骤要点
1、三元组的建立:
template
structSparsMatrix{
element
intmu,nu,tu;
};
2、三元组的转置:
voidSparsT(SparsMatrix
inti;
int*num=newint[M1.nu];
int*num1=newint[M1.nu];//存放累计个数
int*num2=newint[M1.nu];//已经存放的个数
for(i=0;i num[i]=0; num1[i]=0; num2[i]=0; } for(i=0;i num[M1.data[i].col-1]++; } num1[0]=0; for(i=1;i num1[i]=num1[i-1]+num[i-1]; } M2.mu=M1.nu,M2.nu=M1.mu,M2.tu=M1.tu; for(i=0;i M2.data[num1[M1.data[i].col-1]+num2[M1.data[i].col-1]].row=M1.data[i].col; M2.data[num1[M1.data[i].col-1]+num2[M1.data[i].col-1]].col=M1.data[i].row; M2.data[num1[M1.data[i].col-1]+num2[M1.data[i].col-1]].item=M1.data[i].item; num2[M1.data[i].col-1]++; } } 3、三元组的显示: for(inti=0;i cout< } 五.实验结果分析 六.体会与总结 通过本次实验,我对有关稀疏矩阵及其三元组表的知识做了复习和巩固。 在编程的过程中,遇到了不少问题,如一开始并没有输出显示,所以只能通过调试一步步看是否转置已成功,调试的过程也方便找到导致运行出错的位置,再进行改动调试,最终解决了问题,同时也加深了对调试运行的理解。 附录: 程序代码 #include usingnamespacestd; constintMaxTerm=100; template structelement{ introw,col; Titem; }; template structSparsMatrix{ element intmu,nu,tu; }; voidSparsT(SparsMatrix inti; //intj,temp; /*M2=M1; temp=M2.nu,M2.nu=M2.mu,M2.mu=temp; for(i=0;i { temp=M2.data[i].row; M2.data[i].row=M2.data[i].col; M2.data[i].col=temp; } //....*/ int*num=newint[M1.nu]; int*num1=newint[M1.nu];//存放累计个数 int*num2=newint[M1.nu];//已经存放的个数 for(i=0;i num[i]=0; num1[i]=0; num2[i]=0; } for(i=0;i num[M1.data[i].col-1]++; } num1[0]=0; for(i=1;i num1[i]=num1[i-1]+num[i-1]; } M2.mu=M1.nu,M2.nu=M1.mu,M2.tu=M1.tu; for(i=0;i M2.data[num1[M1.data[i].col-1]+num2[M1.data[i].col-1]].row=M1.data[i].col; M2.data[num1[M1.data[i].col-1]+num2[M1.data[i].col-1]].col=M1.data[i].row; M2.data[num1[M1.data[i].col-1]+num2[M1.data[i].col-1]].item=M1.data[i].item; num2[M1.data[i].col-1]++; } } intmain() { SparsMatrix M1.tu=7; M1.mu=5; M1.nu=6; M1.data[0].col=1,M1.data[0].row=1,M1.data[0].item=15; M1.data[1].col=4,M1.data[1].row=1,M1.data[1].item=22; M1.data[2].col=6,M1.data[2].row=1,M1.data[2].item=-15; M1.data[3].col=2,M1.data[3].row=2,M1.data[3].item=11; M1.data[4].col=3,M1.data[4].row=2,M1.data[4].item=3; M1.data[5].col=4,M1.data[5].row=3,M1.data[5].item=6; M1.data[6].col=1,M1.data[6].row=5,M1.data[6].item=91; SparsT(M1,M2); cout<<"原稀疏矩阵三元顺序图\n"; for(inti=0;i cout< } cout<<"转置后稀疏矩阵三元顺序图\n"; for(intj=0;j cout< } return0; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 三元 应用