压缩矩阵的运算

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
printf("%d %d %d\n",T->arry[i].h_num,T->arry[i].v_num,T->arry[i].elem); } };
void sum_TS(TSMatrix *T1,TSMatrix *T2,TSMatrix *T) {
T->h_i=T1->h_i;T->v_j=T1->v_j;
typedef struct {
int h_num; int v_num; int elem; }Triple;
typedef struct {
Triple *arry; int h_i; int v_j; int elem_num; }TSMatrix; void Init_TS(TSMatrix *T );
};
void mul_TS(TSMatrix *T1,TSMatrix *T2,TSMatrix *T) {
int i=0,j=T1->arry[0].h_num,k,n=0; while (i<T1->elem_num) {
while(j==T1->arry[i].h_num) {
for (k=0;k<T2->elem_num;k++) {
void main( ) {
TSMatrix T1; Init_TS(&T1); TSMatrix T2; Init_TS(&T2); creat(&T1); creat(&T2); Print_TS(&T1); Print_TS(&T2); TSMatrix T3; Init_TS(&T3); sum_TS(&T1,&T2,&T3); printf("稀疏矩阵T1+T2的和为:\n"); Print_TS(&T3); TSMatrix T4; Init_TS(&T4); mul_TS(&T1,&T2,&T4); printf("稀疏矩阵T1,T2的积为:\n"); Print_TS(&T4); transpose_TS(&T1); printf("稀疏矩阵T1的转置矩阵为\n"); Print_TS(&T1); system("pause"); }
if (T2->arry[k].h_num==T1->arry[i].v_num) {
T->arry[n].elem=T1->arry[i].elem*T2->arry[k].elem; T->arry[n].h_num=T1->arry[i].h_num; T->arry[n].v_num=T2->arry[k].v_num;
scanf("%d %d %d",&T->arry[i].h_num,&T->arry[i].v_num,&T->arry[i].elem); } };
void Print_TS(TSMatrix *T) {
printf("输出稀疏数组的信息\n"); printf("行下标列下标元素值\n"); for(int i=0;i<T->elem_num;i++) {
void transpose_TS(TSMatrix *T);
void equal_Triple(Triple *t1,Triple *t2);
Rect.cpp
#include <stdio.h> #include <stdlib.h> #include "rect.h"
void Init_TS(TSMatrix *TLeabharlann Baidu {
实验四 数组的运算
实验目的: 掌握稀疏矩阵的压缩存储方法及主要运算的实现。
实验内容与要求: 设计一个稀疏矩阵计算器,要求能够:⑴输入并建立稀疏矩阵;⑵输出稀疏矩阵;⑶执行
两个矩阵相加;⑷执行两个矩阵相乘;⑸求一个矩阵的转置矩阵;⑹求一个矩阵的逆矩阵(选 做)。 实验代码:
Rect.h
#define MAXSIZE 100
T->arry[n].h_num=T2->arry[j].h_num; T->arry[n].v_num=T2->arry[j].v_num; j++; n++; } } if (i>=T1->elem_num) { for (int m=j;m<T2->elem_num;m++) {
T->arry[n].elem=T2->arry[m].elem; T->arry[n].h_num=T2->arry[m].h_num; T->arry[n].v_num=T2->arry[m].v_num; n++; } } if (j>=T2->elem_num) { for (int m=i;m<T1->elem_num;m++) { T->arry[n].elem=T1->arry[m].elem; T->arry[n].h_num=T1->arry[m].h_num; T->arry[n].v_num=T1->arry[m].v_num; n++; } } T->elem_num=n;
n++; } } i++; } j=T1->arry[i].h_num; } T->elem_num=n; T->h_i=T2->v_j; T->v_j=T1->h_i;
};
void transpose_TS(TSMatrix *T) {
int i; int m,n; Triple W; Init_Tr(&W); for (i=0;i<T->elem_num;i++) {
int j=0,i=0; int n=0; while(i<T1->elem_num&&j<T2->elem_num) {
if (T1->arry[i].h_num==T2->arry[j].h_num) {
if (T1->arry[i].v_num==T2->arry[j].v_num) {
T->arry[n].elem=T1->arry[i].elem+T2->arry[j].elem; T->arry[n].h_num=T1->arry[i].h_num; T->arry[n].v_num=T1->arry[i].v_num; n++; i++; j++; } else if (T1->arry[i].v_num>T2->arry[j].v_num) { T->arry[n].elem=T2->arry[j].elem; T->arry[n].h_num=T2->arry[j].h_num; T->arry[n].v_num=T2->arry[j].v_num; j++; n++; } else if (T1->arry[i].v_num<T2->arry[j].v_num) { T->arry[n].elem=T1->arry[i].elem; T->arry[n].h_num=T1->arry[i].h_num; T->arry[n].v_num=T1->arry[i].v_num; i++; n++; } } else if (T1->arry[i].h_num<T2->arry[j].h_num) { T->arry[n].elem=T1->arry[i].elem; T->arry[n].h_num=T1->arry[i].h_num; T->arry[n].v_num=T1->arry[i].v_num; i++; n++; } else if (T1->arry[i].h_num>T2->arry[j].h_num) { T->arry[n].elem=T2->arry[j].elem;
void creat(TSMatrix *T) {
printf("要输入的数组的行数和列数\n"); scanf("%d,%d",&T->h_i,&T->v_j); printf("要输入稀疏数组的元素个数\n"); scanf("%d",&T->elem_num); printf("输入要输入的稀疏数组的信息\n"); printf("行值列值元素值\n"); for(int i=0;i<T->elem_num;i++) {
void creat(TSMatrix *T);
void Print_TS(TSMatrix *);
void sum_TS(TSMatrix *T1,TSMatrix *T2,TSMatrix *T);
void mul_TS(TSMatrix *T1,TSMatrix *T2,TSMatrix *T);
T->arry=(Triple *)malloc(MAXSIZE*sizeof(Triple)); if(!T->arry) printf("error\n") ; T->elem_num=0; T->h_i=0; T->v_j=0; }
void Init_Tr(Triple *t) {
t->elem=0; t->h_num=0; t->v_num=0; }
m=T->arry[i].h_num; T->arry[i].h_num=T->arry[i].v_num; T->arry[i].v_num=m; } for (i=1;i<T->elem_num;i++) {
for (m=T->elem_num-1;m>i-1;m--) { if (T->arry[m].h_num<T->arry[m-1].h_num)
} }
}
};
void equal_Triple(Triple *t1,Triple *t2) {
t1->elem=t2->elem; t1->h_num=t2->h_num; t1->v_num=t2->v_num; };
main.cpp
#include <stdio.h> #include <stdlib.h> #include "rect.h"
{ equal_Triple(&W,&T->arry[m]); equal_Triple( &T->arry[m],&T->arry[m-1]); equal_Triple(&T->arry[m-1],&W);
} if (T->arry[m].h_num==T->arry[m-1].h_num) { if (T->arry[m].v_num<T->arry[m-1].v_num) { equal_Triple(&W,&T->arry[m]); equal_Triple(&T->arry[m],&T->arry[m-1]); equal_Triple(&T->arry[m-1],&W); }
相关文档
最新文档