当前位置:文档之家› 稀疏矩阵的应用

稀疏矩阵的应用

cout<<"\n";
}
实验内 容
3.测试用例:
1,当输入原稀疏矩阵为A[3][3]={2,0,3;1,0,4;0,0,1}时程序运行结果如下:
2.当输入稀疏矩阵为A[2][2]={1,0;0,2}时运行结果如下:
实验内 容
实 验 总 结
4.实验总结:
针对稀疏矩阵的压缩存储应用,通过本次实验对它有一定的系统了解,在这次实验的的过程当中起初有很多问题比较疑惑,甚至根本动不了手,但是通过资料的查询,以及向同学的请教,这些问题很快就解决掉了,通过对稀疏矩阵的三元组存储方式省掉了系统的很多空间,也提高了效率,这对日后的编程打下了一定的基础。
void print1()输出函数
void print2()输出函数
2.源程序代码:
#include<iostream>
using namespace std;
#include <malloc.h>
#define maxsize 50
typedef int datatype;
typedef struct
cout<<"\n原稀疏矩阵为:\n";
print1(a );
cout<<"\n原三元组顺序表为:\n";
print2(ta,ta1->td);
cout<<"\n转置后的三元组顺序表:\n";
print2(tb, tb1->td);
return 1; }
/*输入*/
void input(datatype a[maxsize][maxsize] )
4.依次取A中的每一个非零元素对应的三元组;
2.1确定该元素在B中的下标pb;
2.2将该元素的行号列号交换后存入B中pb的位置;
2.3预置该元素所在列的下一个元素的存放位置;
具体要定义如下若干个函数:
void setup()初始化非零元的个数
void transition()转置函数
void input()输入函数
武汉工程大学
计算机科学与工程学院
《数据结构》实验报告
专业班级
实验地点
学生学号
指导教师
学生姓名
实验时间
实验项目
实验类别
操作性()验证性( )设计性( )综合性(Y)其它( )
实验目的及要求
(1)掌握掌握稀疏矩阵的表示方法及其运算的实现;
(2)实现稀疏矩阵在三元组、十字链表等表示下的各运算并分析其效率。
2、实验内容
在m×n的矩阵中,有t个非零元。令δ= t/(m*n),称δ矩阵的稀疏因子,常认为δ≤0.05时称为稀疏矩阵。稀疏矩阵在工程中有着大量的应用,不少工程问题都可以转化为对稀疏矩阵的计算问题。用三元组表实现稀疏矩阵的转置,用(顺序取,直接存)方法。
3、实验说明:
引入两个数组作为辅助数据结构:
{
datatype a[maxsize][maxsize]; /*稀疏矩阵*/
List ta[maxsize],tb[maxsize]; /*三元组顺序表*/
tabletype *ta1,*tb1;
if ((ta1=(tabletype *)malloc(sizeof(tabletype)))==NULL)
{ for(j=0;j<m;j++)
cout<<a[i][j]<<" ";
cout<<"\n";
}
}
/*三元组顺序表输出*/
void print2(List a[],int nn)
{
int i;
cout<<"\t行号\t列号\t元素值\n";
for(i=0; i<nn;i++)
cout<<" "<<a[i].p<<" "<<a[i].q<<" "<<a[i].x<<" "<<"\n";
{
cout<<"申请空间错误!\n";
return 0;
}
if ((tb1=(tabletype *)malloc(sizeof(tabletype)))==NULL)
{
cout<<"申请空间错误!\n";
return 0;
}
input(a);
setup(a,ta,ta1);
transition(ta1, tb1, ta,tb);
{
int p,q;
datatype x;
} List;
typedef struct
{
int md,nd,td;
}tabletype;
int n,m; /*稀疏矩阵的行数、列数*/
void input(datatype a[maxsize][maxsize] );
void setup (datatype a[maxsize][maxsize], List ta[],tabletype *ta1 );
void transition (tabletype *ta1, tabletype *tb1, List ta[],List tb[]);
void print1(datatype a[maxsize][maxsize]);
void print2(List a[],int nn);
int main( )
成 绩 评 定 表
类别
评分标准
分值
得分
合计
上机表现
积极出勤、遵守纪律
认真完成实验任务
30分
报告ቤተ መጻሕፍቲ ባይዱ量
程序代码规范、功能正确
填写内容完整、体现收获
70分
说明:
评阅教师:日期:年月日
稀疏矩阵的应用
1、实验目的:
(1)掌握掌握稀疏矩阵的表示方法及其运算的实现;
(2)实现稀疏矩阵在三元组、十字链表等表示下的各运算并分析其效率。
if(ta[j].q==i) /*寻找原矩阵中最小列下标*/
{
tb[nn].p=ta[j].q;
tb[nn].q=ta[j].p;
tb[nn].x=ta[j].x;
nn++;
}
}
/*矩阵输出*/
void print1(datatype a[maxsize][maxsize])
{ int i,j;
for(i=0; i<n;i++)
{
int i,j,nn=0;
tb1->md=ta1->nd;
tb1->nd=ta1->md;
tb1->td=ta1->td;
if(ta1->td!=0)
for (i=0;i<ta1->nd;i++) /*i原矩阵的列下标*/
for(j=0;j< ta1->td;j++) /*j原三元组顺序表的下标*/
{
int i,j;
cout<<"\n请输入稀疏矩阵的行数=";
cin>>n;
cout<<"\n请输入稀疏矩阵的列数=";
cin>>m;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
{
printf("\n请输入数据a[%d][%d]=",i,j);
cin>>a[i][j];
}
}
/*建立*/
void setup (datatype a[maxsize][maxsize], List ta[], tabletype *ta1)
{ int i,j;
ta1->td=0; /*初始化非零元素个数*/
for(i=0; i<n;i++)
for(j=0;j<m;j++)
if (a[i][j]!=0)
{
ta[ta1->td].p=i;
ta[ta1->td].q=j;
ta[ta1->td].x=a[i][j];
ta1->td++;
}
ta1->md=n;
ta1->nd=m;
}
/*转置*/
void transition (tabletype *ta1, tabletype *tb1, List ta[],List tb[])
num[nu]:表示矩阵A中某列的非零元素的个数;
cpot[nu]:初始值表示矩阵A中某列的第一个非零元素在B中的位置。
num与cpot递推关系:
1.实验分析:
在本次实验当中,需要注意一下几个关键点:
1.设置转置后矩阵B的行数、列数和非零元素的个数;
2.计算A中每一列的非零元素个数;
3.计算A中每一列的第一个非零元素在B中的下标;
相关主题