数据结构——矩阵
- 格式:docx
- 大小:40.70 KB
- 文档页数:7
软件学院
上机实验报告
课程名称:数据结构
实验项目:矩阵
实验室:耘慧420
姓名:学号
专业班级:实验时间: 2016.11.24实验成绩评阅教师
一、实验目的及要求
1.掌握稀疏矩阵压缩存储方法( 三元组顺序表存储 ) 。
2.完成压缩存储下矩阵计算( 矩阵转置 ) 。
二、性质
验证性
三、实验学时
2学时
四、实验环境
C与 C++程序设计学习与实验系统
五、实验内容及步骤
实验内容:
1.实现矩阵压缩存储。
( 静态数组压缩存储或直接输入矩阵非 0 元均可 )
2.实现矩阵转置算法。
3.实现矩阵快速转置。
实验步骤:
1.实现矩阵压缩存储。
( 静态数组压缩存储或直接输入矩阵非 0 元均可 )
2. 实现矩阵转置算法TransposeSMatrix(TSMatrix M,TSMatrix &T)。
3. 实现矩阵快速转置FastTransposeSMatrix(TSMatrix M,TSMatrix &T)。
4.主函数中创建矩阵 M ,将 M 调用转置算法转置成矩阵 N,调用快速转置算法转化
成矩阵 T。
六、实验数据及结果分析
七、总结
了解了矩阵的一些知识,懂得了矩阵的一些算法。
并且在实际上机中,学会了矩阵的程序的编写方法。
附录源程序清单插入;
#include<stdio.h>
#include"malloc.h"
#include<conio.h>
#include<stdlib.h>
#define OK 1
#define ERROR 0
#define MAXSIZE 12500
#define MAXRC 1000
typedef int ElemType;
typedef int Status;
typedef struct {
int i,j;
ElemType e;
}Triple;
typedef struct{
Triple data[MAXSIZE+1];
int rpos[MAXRC+1];
int mu,tu,nu;
}RLSMatrix;
Status TransposeSMatrix(RLSMatrix M, RLSMatrix &T){ int q=1,col=0,p=0;
T.mu=M.nu;
T.nu=M.mu;
T.tu=M.tu;
if(T.tu){
q=1;
for(col=1;col<=M.nu;++col)
for(p=1;p<=M.tu;++p)
if(M.data[p].j==col){
T.data[q].i=M.data[p].j;
T.data[q].j=M.data[p].i;
T.data[q].e=M.data[p].e;++q;
}}
return 0;
}
Status FastTransposeSMtrix(RLSMatrix M,RLSMatrix
&T){ int col=0,t=0,p=0,q=0;
ElemType num[100],cpot[100];
T.mu=M.nu;
T.nu=M.mu;
T.tu=M.tu;
if(T.tu){
for(col=1;col<=M.nu;++col)num[col]=0;
for(t=1;t<=M.tu;++t)++num[M.data[t].j];
cpot[1]=1;
for(col=2;col<=M.nu;++col) cpot[col]=cpot[col-1]+num[col-1]; for(p=1;p<=M.tu;++p){
col=M.data[p].j;q=cpot[col];
T.data[q].i=M.data[p].j;
T.data[q].j=M.data[p].i;
T.data[q].e=M.data[p].e;
++cpot[col];
}}
return OK;
}
Status CreateSMatrix(RLSMatrix *M){
int k,m,n,i;
ElemType e;
printf(" 请输入行列非零个数");
scanf_s("%d",&(*M).mu);
scanf_s("%d",&(*M).nu);
scanf_s("%d",&(*M).tu);
(*M).data[0].i=0;
for(i=1;i<=(*M).tu;i++){
do{
printf(" 请输入元素行列元素值");
scanf_s("%d",&m);
scanf_s("%d",&n);
scanf_s("%d",&e);
k=0;
if(m<1||m>(*M).mu||n<1||n>(*M).nu)
k=1;
if(m<=(*M).data[i-1].i&&n<=(*M).data[i-1].j)
k=1;
}while(k);
(*M).data[i].i=m;
(*M).data[i].j=n;
(*M).data[i].e=e;
}
return OK;
}
void printfSMatrix(RLSMatrix &M){
int i;
printf_s("%4d%4d%8d\n",M.mu,M.nu,M.tu);
for(i=1;i<=M.tu;i++)
printf_s("%4d%4d%8d\n",M.data[i].i,M.data[i].j,M.data[i].e);
}
int main(void)
{
RLSMatrix M,N,T,Q; CreateSMatrix(&M); FastTransposeSMtrix( M,T); printfSMatrix(T); CreateSMatrix(&N); TransposeSMatrix(M,Q); printfSMatrix(Q);
_getch();
return 0;
}。