//稀疏矩阵 三元组算法
2010-10-10 22:51
218 查看
//////////////////////////////////////////// //稀疏矩阵的算法 模式匹配 // //三元组算法 // //Author:Wang Yong // //Date: 2010.8.19 // //////////////////////////////////////////// #include <stdio.h> #include <stdlib.h> #define MAX 1000 //矩阵中非0元素的个数 typedef int ElemType; //////////////////////////////////////////// //定义三元组 typedef struct { int row,col; //非零元素的行号列号 ElemType e; //非零元素的值 }Triple; //定义三元组表 typedef struct { Triple data[MAX+1]; //三元组的表,data[0]未用 int m,n,num; //矩阵的行数,列数和非零元素个数 }TSMatrix; //////////////////////////////////////////////// //三元组表的创建 void CreatTSMatrix( TSMatrix &M) { printf("请输入稀疏矩阵的行数:"); scanf("%d",&M.m); printf("请输入稀疏矩阵的列数:"); scanf("%d",&M.n); printf("请输入矩阵中非零元素的个数:"); scanf("%d",&M.num); int i; for(i = 1; i <= M.num; i++) { printf("请输入第%d个元素的行号和列号及其元素的值:",i); scanf("%d %d %d",&M.data[i].row,&M.data[i].col,&M.data[i].e); } } ////////////////////////////////////////////// //三元组的快速转置 TSMatrix FastTransMatrix(TSMatrix A,TSMatrix &B) { int number[MAX]; int position[MAX]; int i,j,temp; B.m = A.n; B.n = A.m; B.num = A.num; if(A.num) { for(j = 0; j < A.n;j++) //矩阵A每一列非零元素的个数初始化 number[j] = 0; for(i = 1 ; i <= A.num;i++) //求矩阵中的每一列的非零元素个数 number[A.data[i].col]++; position[0] = 1; //position[i]为第i列第一个元素在B.data中的位置 for(j = 1 ; j < A.n; j++) //求A.data的第j列第一个非零元素在B.data中的序号 position[j] = position[j-1] + number[j-1]; //求转置矩阵B的三元组表 for(i = 1 ; i <= A.num;i++) { j = A.data[i].col; temp = position[j]; B.data[temp].row = A.data[i].col; B.data[temp].col = A.data[i].row; B.data[temp].e = A.data[i].e; position[j]++;//第j列上后续元素的位置 } } return B; } //输出稀疏矩阵 void Output(TSMatrix M) { int i,j; int cnt = 1; int e = 0; for(i = 0; i < M.m;i++) { for(j = 0; j < M.n;j++) { if(i == M.data[cnt].row && j == M.data[cnt].col) { printf("%5d",M.data[cnt].e); ++cnt; } else printf("%5d",e); } printf("\n"); } } /////////////////////////////////////////// // 输出三元组表 void Print(TSMatrix M) { int i; printf("{"); for(i = 1; i <= M.num;i++) { printf("( %d, %d, %d) ",M.data[i].row,M.data[i].col,M.data[i].e); } printf("}"); } ////////////////////////////////////////////////// int main() { TSMatrix M,N; CreatTSMatrix(M); Output(M); Print(M); printf("\n"); FastTransMatrix(M,N); Output(N); Print(N); printf("\n"); return 0; }
相关文章推荐
- 第9周—项目3(1)建立稀疏矩阵三元组表示的算法库
- 数据结构 数组操作 稀疏矩阵采用三元组存储,设计算法求两个矩阵的和。
- 稀疏矩阵基于“三元组”的转置算法实现
- 第九周项目3--稀疏矩阵的三元组表示的实现及应用--(1)建立稀疏矩阵三元组表示的算法库
- 第九周项目3 建立稀疏矩阵三元组算法库
- 稀疏矩阵的三元组顺序表存储及矩阵相乘算法小结
- 第九周--建立稀疏矩阵三元组表示算法库
- 第九周 项目3 建立稀疏矩阵表示的三元组算法库
- 以三元组形式输出用十字链表表示的稀疏矩阵中非零元素及其下标的算法
- 稀疏矩阵的三元组顺序表存储及矩阵相乘算法小结
- 稀疏矩阵的三元组表示的实现及应用(1)——建立稀疏矩阵三元组表示的算法库
- 稀疏矩阵采用三元组存储,设计算法求两个矩阵的和。
- 第九周【项目三-(1)建立稀疏矩阵三元组表示的算法库】
- 第九周上机实践—项目3(1)—建立稀疏矩阵三元组表示的算法库
- 经典算法题15-稀疏矩阵及三元组
- 稀疏矩阵的三元组存储算法
- 第九周项目3 建立稀疏矩阵三元组算法库
- 稀疏矩阵的三元组表示的实现及应用(2)——采用三元组存储稀疏矩阵,设计两个稀疏矩阵相加的运算算法
- 稀疏矩阵的三元组顺序表存储及矩阵相乘算法小结
- 第九周项目3---(1)建立稀疏矩阵三元组表示的算法库