三元组的应用.docx
《三元组的应用.docx》由会员分享,可在线阅读,更多相关《三元组的应用.docx(7页珍藏版)》请在冰豆网上搜索。
三元组的应用
三元组的应用
五邑大学实验报告
实验课程名称
数据结构
一.实验目的
1、掌握稀疏矩阵三元组表的存储、创建、显示、转置。
2、了解稀疏矩阵的相关应用。
二.实验内容
使用三元组表存储稀疏矩阵,编写算法求它的转置矩阵。
。
三.内容分析
算法基本思想描述:
由于稀疏矩阵的非零元素较少,零元素较多,所以只需存储其非零元素。
因此可以建立一个三元组表,分别保存稀疏矩阵的非零元素的行号、列号和元素值。
对稀疏矩阵进行快速转置是可以引入两个向量num[n+1],cpot[n+1],分别标记矩阵中第col列的非零元素个数和第一个非零元素在转置后的矩阵的位置;再扫描三元组表,找到非零元素,直接对其在转置后的矩阵所在的位置上进行修改,以节省时间。
四.实验步骤要点
1、三元组的建立:
template
structSparsMatrix{
elementdata[MaxTerm];
intmu,nu,tu;
};
2、三元组的转置:
voidSparsT(SparsMatrixM1,SparsMatrix&M2){
inti;
int*num=newint[M1.nu];
int*num1=newint[M1.nu];//存放累计个数
int*num2=newint[M1.nu];//已经存放的个数
for(i=0;inum[i]=0;
num1[i]=0;
num2[i]=0;
}
for(i=0;inum[M1.data[i].col-1]++;
}
num1[0]=0;
for(i=1;inum1[i]=num1[i-1]+num[i-1];
}
M2.mu=M1.nu,M2.nu=M1.mu,M2.tu=M1.tu;
for(i=0;iM2.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;icout<}
五.实验结果分析
六.体会与总结
通过本次实验,我对有关稀疏矩阵及其三元组表的知识做了复习和巩固。
在编程的过程中,遇到了不少问题,如一开始并没有输出显示,所以只能通过调试一步步看是否转置已成功,调试的过程也方便找到导致运行出错的位置,再进行改动调试,最终解决了问题,同时也加深了对调试运行的理解。
附录:
程序代码
#include
usingnamespacestd;
constintMaxTerm=100;
template
structelement{
introw,col;
Titem;
};
template
structSparsMatrix{
elementdata[MaxTerm];
intmu,nu,tu;
};
voidSparsT(SparsMatrixM1,SparsMatrix&M2){
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;inum[i]=0;
num1[i]=0;
num2[i]=0;
}
for(i=0;inum[M1.data[i].col-1]++;
}
num1[0]=0;
for(i=1;inum1[i]=num1[i-1]+num[i-1];
}
M2.mu=M1.nu,M2.nu=M1.mu,M2.tu=M1.tu;
for(i=0;iM2.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()
{
SparsMatrixM1,M2;
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;icout<}
cout<<"转置后稀疏矩阵三元顺序图\n";
for(intj=0;jcout<}
return0;
}