三元组顺序表-转置运算-三种算法

原创 2015年11月18日 21:40:18
#include <stdio.h> 
#include <stdlib.h> 
#define MAXSIZE 1000


typedef int ElementType;


typedef struct {
int row;
int col;
ElementType value;
}Tripe;


void TSMatrixInit();
void Print();
//按列序递增进行转置
void TransposeTSMatrix1();
void TransposeTSMatrix2();
void TransposeTSMatrix3();

typedef struct {
Tripe data[MAXSIZE+1];
int rows;
int cols;
int nums;
}TSMatrix;


void main () {
TSMatrix *s = NULL;
TSMatrix *t = NULL;
s = (TSMatrix *)malloc(sizeof(TSMatrix));
t = (TSMatrix *)malloc(sizeof(TSMatrix));
TSMatrixInit(s);
printf("输出s :\n");
Print(s);
// TransposeTSMatrix1(s,t);
// TransposeTSMatrix2(s,t);
// TransposeTSMatrix3(s,t);
printf("输出B :\n");
Print(t);
}


void TSMatrixInit(TSMatrix *s) {
int i;
int Rmax = 0;
int Cmax = 0;
printf("请设置元素个数:");
scanf("%d",&s->nums);
printf("row col value\n");
for (i = 1; i <= s->nums; i++) {
scanf("%d %d %d",&s->data[i].row,&s->data[i].col,&s->data[i].value);
if (Rmax < s->data[i].row) {
s->rows = s->data[i].row;
}
else {
s->rows = Rmax;
}
if (Cmax < s->data[i].col) {
s->cols = s->data[i].col;
}
else {
s->cols = Cmax;
}
}
}


void Print(TSMatrix *s) {
int i;
printf("元素个数 : %d\n",s->nums);
printf("最大列数 : %d\n",s->rows);
printf("最大行数 : %d\n",s->cols);
printf("row col value\n");
for (i = 1; i <= s->nums; i++) {
printf("%d %d %d\n",s->data[i].row,s->data[i].col,s->data[i].value);
}
}
//时间复杂度O(a->cols * a->nums)
void TransposeTSMatrix1(TSMatrix *a, TSMatrix *b) {
int i, j, k;
b->rows = a->cols;
b->cols = a->rows;
b->nums = a->nums;
if (b->nums > 0) {
j = 1;
for (k = 1; k <= a->cols; k++) {
for (i = 1; i <= a->nums; i++) {
if (a->data[i].col == k) {
b->data[j].row = a->data[i].col;
b->data[j].col = a->data[i].row;
b->data[j].value = a->data[i].value;
j++;
}
}
}
}
}


void TransposeTSMatrix2 (TSMatrix *a, TSMatrix *b) {
int i, j, k;
b->rows = a->cols;
b->cols = a->rows;
b->nums = a->nums;
if (b->nums > 0) {
j = 1;
for (k = 1; k <= a->cols; k++) {
for (i = 1; i <= a->nums; i++) {
if (a->data[i].col == k) {
b->data[j].row = a->data[i].col;
b->data[j].col = a->data[i].row;
b->data[j].value = a->data[i].value;
j++;
}
}
if (j > a->nums) {
break;
}
}
}
}


void TransposeTSMatrix3(TSMatrix *a, TSMatrix *b) {
int i, j ,min;
b->rows = a->cols;
b->cols = a->rows;
b->nums = a->nums;
i = 1;
while (i <= a->nums) {
min = 1;
for (j = 1; j <= a->nums; j++) {
if (a->data[j].col < a->data[min].col) {
min = j;
}
}
b->data[i].row = a->data[min].col;
b->data[i].col = a->data[min].row;
b->data[i].value = a->data[min].value;
i++;
a->data[min].col = a->cols + 1;
}
}

【数据结构】算法5.1-5.2 三元组顺序表-转置

#include #include #include#define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEAS...
  • Vit_rose
  • Vit_rose
  • 2016年10月10日 20:20
  • 1378

三元组稀疏矩阵的快速转置

小问题却整了这么久,能力有待加强,要强烈区分三元组的列数与元素总数,不能将他俩写混了 #include #define MAXSIZE 1250 #define OK 1 #de...
  • Slience_Perseverance
  • Slience_Perseverance
  • 2011年11月27日 02:16
  • 14566

【LB】稀疏矩阵的快速转置原理及其算法

关于稀疏矩阵的快速转置法,首先得明白其是通过对三元表进行转置。如果误以为是对矩阵进行转置,毫无疑问就算你想破脑袋也想不出个所以然,别陷入死胡同了!          对于一个三元表,行为i,列为...
  • u013598542
  • u013598542
  • 2014年04月14日 22:30
  • 7395

【数据结构】算法5.3 行逻辑链接的顺序表-乘积

#include #include #include #include#define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #defi...
  • Vit_rose
  • Vit_rose
  • 2016年10月10日 20:21
  • 1215

稀疏矩阵基于“三元组”的转置算法实现

稀疏矩阵基于“三元组”的转置算法实现
  • wangchuanqi1234
  • wangchuanqi1234
  • 2016年04月11日 17:45
  • 1284

稀疏矩阵的三元组顺序表存储及矩阵相乘算法小结

详细介绍了三元组存储稀疏矩阵的快速转置算法,重点介绍矩阵乘法的三种不同实现,尤其最后一种快速乘法,先把其中一个矩阵转置,再各行对应元素相乘,思想新颖,代码简洁,值得一看。...
  • QiaoRuoZhuo
  • QiaoRuoZhuo
  • 2014年10月27日 21:24
  • 4001

稀疏矩阵的三元组顺序表存储表示及基本操作

/* Name: 稀疏矩阵的三元组顺序表存储表示及各种  Copyright:  Author: 巧若拙  Date: 27-10-14 21:28 Description:  -----...
  • QiaoRuoZhuo
  • QiaoRuoZhuo
  • 2014年10月27日 21:32
  • 5225

稀疏矩阵的三元组表示的实现及应用(矩阵相加)

#include #include "tup.h" int main() { TSMatrix ta,tb,tc; int A[M][N]= { ...
  • lxs146111
  • lxs146111
  • 2015年11月02日 16:22
  • 2102

用三元组存储稀疏矩阵并实现转置

基本概念 在学习线性代数的时候,经常用到矩阵。在C语言中,表示矩阵的最直观形式就是二维数组。然而在实际应用中,很多高阶矩阵中的非零元素非常少,这个时候如果继续使用二维数组存储,那么就会浪费很多存储空...
  • tiredoy
  • tiredoy
  • 2014年04月24日 20:58
  • 9177

稀疏矩阵的普通转置与快速转置算法

稀疏矩阵的普通转置与快速转置算法 一般来说,对于系数矩阵,我们使用三元组来存储。即就是将矩阵的所有非零元素的三元组存放在一个顺序表中,如图所示: 注意一个转置的前提:该顺序表是排好序的,即行优...
  • qq845579063
  • qq845579063
  • 2016年05月09日 17:49
  • 3395
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:三元组顺序表-转置运算-三种算法
举报原因:
原因补充:

(最多只允许输入30个字)