当前位置:文档之家› 压缩矩阵的运算

压缩矩阵的运算

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 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 *T) {
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;
{ 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); }
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; }
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);
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++) {
实验四 数组的运算
实验目的: 掌握稀疏矩阵的压缩存储方法及主要运算的实现。
实验内容与要求: 设计一个稀疏矩阵计算器,要求能够:⑴输入并建立稀疏矩阵;⑵输出稀疏矩阵;⑶执行
两个矩阵相加;⑷执行两个矩阵相乘;⑸求一个矩阵的转置矩阵;⑹求一个矩阵的逆矩阵(选 做)。 实验代码:
Rect.h
#define MAXSIZE 100
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 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 equal_Triple(Triple *t1,Triple *t2) {
t1-&;h_num=t2->h_num; t1->v_num=t2->v_num; };
main.cpp
#include <stdio.h> #include <stdlib.h> #include "rect.h"
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++) {
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;
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;
相关主题