三元组的应用.docx

上传人:b****7 文档编号:26086300 上传时间:2023-06-17 格式:DOCX 页数:7 大小:43.13KB
下载 相关 举报
三元组的应用.docx_第1页
第1页 / 共7页
三元组的应用.docx_第2页
第2页 / 共7页
三元组的应用.docx_第3页
第3页 / 共7页
三元组的应用.docx_第4页
第4页 / 共7页
三元组的应用.docx_第5页
第5页 / 共7页
点击查看更多>>
下载资源
资源描述

三元组的应用.docx

《三元组的应用.docx》由会员分享,可在线阅读,更多相关《三元组的应用.docx(7页珍藏版)》请在冰豆网上搜索。

三元组的应用.docx

三元组的应用

三元组的应用

五邑大学实验报告

 

实验课程名称

数据结构

 

一.实验目的

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;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{

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;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()

{

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;i

cout<

}

cout<<"转置后稀疏矩阵三元顺序图\n";

for(intj=0;j

cout<

}

return0;

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1