行逻辑联接的顺序表实现矩阵转置及乘法
来源:互联网 发布:淘宝摄影师 编辑:程序博客网 时间:2024/06/11 01:08
//程序没有写对输入的排序的部分,所以输入的时候要按行列一次输入//例如:(1 1 1)(1 2 1)(1 3 1)(2 3 1)(3 1 1)。。。# include <stdio.h># include <malloc.h># include <stdlib.h># define MAXSIZE 10typedef struct Node{int x, y, z;}* PTRIPLE, TRIPLE;typedef union{TRIPLE data[MAXSIZE + 1];int nu, mu, tu;}TSMATRIX;void create (TSMATRIX * pT){printf("请输入矩阵行、列及有效元素个数(格式:%%d %%d %%d):");scanf("%d %d %d", &pT->data[0].x, &pT->data[0].y, &pT->data[0].z);printf("\n--------------------\n");for (int i = 1; i <= pT->data[0].z; ++i){printf("输入第%d个元素的行、列、值(格式:%%d %%d %%d):", i);scanf("%d %d %d", &pT->data[i].x, &pT->data[i].y, &pT->data[i].z);if (pT->data[i].x > pT->data[0].x || pT->data[i].y > pT->data[0].y){printf("输入有误!重新输入!\n");--i;}while (getchar() != '\n');}return;}void transpose (TSMATRIX * pT1, TSMATRIX * pT2)//求转置{pT2->data[0].x = pT1->data[0].y;pT2->data[0].y = pT1->data[0].x;pT2->data[0].z = pT1->data[0].z;int i, j;int cPot[MAXSIZE + 1] = {0};for (i = 1; i <= pT1->data[0].z; ++i)//对每一列的元素个数进行统计{for (j = 1; j <= pT1->data[0].y; ++j){if (pT1->data[i].y == j){++cPot[j];break;}}}for (i = 1; i <= MAXSIZE; ++i){printf("=%d", cPot[i]);}printf("=\n\n");int r = 1;int s = MAXSIZE;while (cPot[r] == 0)//取得第一个有元素的列{++r;}while (cPot[s] == 0)//取得倒数第一个有元素的列{--s;}int a = cPot[r];cPot[r] = 1;int x;for (i = r + 1; i <= s; ++i)//求得cpot的核心算法{x = cPot[i];cPot[i] = cPot[i - 1] + a;a = x;}for (i = 1; i <= MAXSIZE; ++i){printf("=%d", cPot[i]);}printf("=\n\n");for (i = 1; i <= pT1->data[0].z; ++i)//根据cpot求得转置矩阵{int x = cPot[pT1->data[i].y];pT2->data[x].x = pT1->data[i].y;pT2->data[x].y = pT1->data[i].x;pT2->data[x].z = pT1->data[i].z;++cPot[pT1->data[i].y];}return;}void traverse (TSMATRIX * pT)//遍历各元素{int i;for (i = 1; i <= pT->data[0].z; ++i){printf("(%d,%d,%d) ", pT->data[i].x, pT->data[i].y, pT->data[i].z);}printf("\n");return;}void print (TSMATRIX * pT)//打印矩阵{printf("\n****************\n");int k = 1;bool change = true;for (int i = 1; i <= pT->data[0].x; ++i){for (int j = 1; j <= pT->data[0].y; ++j){change = true;for (k; k <= pT->data[0].z;){if (pT->data[k].x == i && pT->data[k].y == j){printf("%2d ", pT->data[k].z);++k;change = false;}break;}if (change){printf("%2d ", 0);}}printf("\n");}printf("****************\n\n");return;}int main(void){TSMATRIX ts1;TSMATRIX ts2;create(&ts1);traverse(&ts1);print(&ts1);printf("\n~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~\n");transpose(&ts1, &ts2);traverse(&ts2);print(&ts2);TSMATRIX ts3;multiply(&ts1, &ts2, &ts3);return 0;}
0 0
- 行逻辑联接的顺序表实现矩阵转置及乘法
- 稀疏矩阵的三元组行逻辑链接的顺序表存储结构表示及实现
- 稀疏矩阵的行逻辑连接顺序表实现
- 数据结构 矩阵的快速转置 矩阵相乘(行逻辑连接顺序表)
- 行逻辑链接的矩阵乘法
- 行逻辑链接的顺序表实现稀疏矩阵的相乘(Java语言描述)
- 【矩阵乘法】:矩阵乘法的基本实现
- 大矩阵的分块乘法及matlab实现
- 矩阵和向量的乘法顺序
- 矩阵乘法的opencv实现
- 矩阵乘法的多线程实现
- 矩阵乘法的算法实现
- 稀疏矩阵——行逻辑连接的顺序三元组表
- 矩阵的转置和乘法操作
- 数据结构练习---java实现普通矩阵与稀疏矩阵的矩阵转置,矩阵加法,矩阵乘法,应用简单工厂与模板方法。
- 十字链表实现矩阵的加法和乘法
- 矩阵的压缩存储(稀疏矩阵的十字链表存储、稀疏矩阵的三元组行逻辑链接的顺序表存储表示、稀疏矩阵的三元组顺序表存储表示)
- MapReduce的矩阵乘法的实现
- STM32学习之路-感觉自己走到了一个天大的坑里了!
- document.body.scrollTop用法
- POJ 3373 Changing Digits(记录路径的dp)
- ACM中java的使用(速成)
- 自己的音乐播放器
- 行逻辑联接的顺序表实现矩阵转置及乘法
- OCP 1Z0 051 143
- 产品做出来了,我们该怎么办?
- 03.黑马程序员-封装-set方法与get方法
- 进程间通信 binder机制-添加自己的系统服务
- U盘忘记密码的解决方法
- Android 9patch 点9文件被缩放的问题解决
- 运行时异常与一般异常有何异同?
- XML(4)——schema文件相互引用