基于C语言的稀疏矩阵的压缩存储和运算
2017-06-26 18:39
225 查看
稀疏矩阵的压缩存储和运算
#include<stdio.h> #define m 6 #define n 8 #define max 50 void CreateMatrix(int A[m] ,int B[50]) { int i,j,k=0; for(i=0;i<m;i++) for(j=0;j<n;j++) if(A[i][j]!=0){ B[k]=i; k++; B[k]=j; k++; B[k]=A[i][j]; k++; } B[k]=-1; } void MatrixAdd(int A[max],int B[max],int C[max]){ int i=0,j=0,k=0; while(A[i]!=-1 && B[j]!=-1){ if(A[i]==B[j]){ if(A[i+1]==B[j+1]){ C[k]=A[i]; C[k+1]=A[i+1]; C[k+2]=A[i+2]+B[j+2]; k=k+3; i=i+3; j=j+3; } else if(A[i+1]<B[j+1]){ C[k]=A[i]; C[k+1]=A[i+1]; C[k+2]=A[i+2]; k=k+3; i=i+3; } else{ C[k]=B[j]; C[k+1]=B[j+1]; C[k+2]=B[j+2]; k=k+3; j=j+3; } } else if(A[i]<B[j]){ C[k]=A[i]; C[k+1]=A[i+1]; C[k+2]=A[i+2]; k=k+3; i=i+3; } else{ C[k]=B[j]; C[k+1]=B[j+1]; C[k+2]=B[j+2]; k=k+3; j=j+3; } } if(A[i]==-1) while(B[j]!=-1){ C[k]=B[j]; C[k+1]=B[j+1]; C[k+2]=B[j+2]; k=k+3; j=j+3; } else while(A[i]!=-1){ C[k]=A[i]; C[k+1]=A[i+1]; C[k+2]=A[i+2]; k=k+3; i=i+3; } C[k]=-1; } int main(void){ int E[m] ,F[m] ,A[max],B[max],C[max]; int i,j,k; for(i=0;i<m;i++) for(j=0;j<n;j++) { printf("请输入E[%d][%d]:",i,j); scanf("%d",&E[i][j]); } for(i=0;i<m;i++) for(j=0;j<n;j++) { printf("请输入与F[%d][%d]:",i,j); scanf("%d",&F[i][j]); } CreateMatrix(E,A); CreateMatrix(F,B); MatrixAdd(A,B,C); i=0;j=0;k=0; printf("A的数组内容如下:\n"); while(A[i]!=-1){ printf("%5d,%5d,%5d\n",A[i],A[i+1],A[i+2]); i=i+3; } printf("B的数组内容如下:\n"); while(B[j]!=-1){ printf("%5d,%5d,%5d\n",B[j],B[j+1],B[j+2]); j=j+3; } printf("C的数组内容如下:\n"); while(C[k]!=-1){ printf("%5d,%5d,%5d\n",C[k],C[k+1],C[k+2]); k=k+3; } }
相关文章推荐
- 稀疏矩阵压缩存储及转置,加法运算(采用三元表)
- 数据结构C语言实现稀疏矩阵的压缩和运算的三元组顺序表表示法
- 稀疏矩阵的压缩存储及转置
- C语言 稀疏矩阵 压缩 实现
- 矩阵(稀疏矩阵)的压缩存储(二)
- 稀疏矩阵的压缩存储与转置
- 稀疏矩阵的压缩存储及其转置算法
- 矩阵(稀疏矩阵)的压缩存储
- 稀疏矩阵顺序存储的运算方法
- 稀疏矩阵的压缩存储及转置,快速转置法,C++代码实现
- 矩阵的压缩存储————用三元组表存储稀疏矩阵
- 矩阵的压缩存储(稀疏矩阵的十字链表存储、稀疏矩阵的三元组行逻辑链接的顺序表存储表示、稀疏矩阵的三元组顺序表存储表示)
- 稀疏矩阵压缩存储
- 稀疏(sparsity)矩阵的行压缩存储
- 三元组表压缩存储稀疏矩阵实现稀疏矩阵的快速转置(Java语言描述)
- 数据结构学习笔记--稀疏矩阵的压缩存储
- 稀疏矩阵存储、转置、乘法运算
- sdut 1592转置矩阵【稀疏矩阵的压缩存储】【快速转置算法】
- 第九周 项目二(1)-压缩形式存储对称矩阵基本运算
- 稀疏矩阵--三元组表来压缩存储及转置