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

原创 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;
}
}

相关文章推荐

特殊矩阵的压缩存储及转置

一、对称矩阵及其压缩存储 1、对称矩阵 在矩阵中最特殊的一类应该属于对称矩阵,对称矩阵的行和列是对应相等的。对称矩阵就是关于主对角线对称,两边的元素的值对应相等,在数学中我们把用主对角线隔开,一方...

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

#include #include #include#define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEAS...

数据结构--数组和广义表--以三元组顺序表存储方式的矩阵的一般转置和快速转置

//三元组顺序表来存储矩阵并进行矩阵的转置 typedef int Elemtype ; const int MAXSIZE=12500; const int MAXNUM=20; typedef...

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

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

数组与广义表_稀疏矩阵的压缩存储_三元组做存储结构_矩阵转置

"Matrix.h" #include using namespace std; #define MAX_MATRIXSIZE 20 #define ElemType int c...

三元组表压缩存储稀疏矩阵实现稀疏矩阵的快速转置(Java语言描述)

三元组表压缩存储稀疏矩阵实现稀疏矩阵的快速转置(Java语言描述)
  • wxisme
  • wxisme
  • 2014年10月12日 20:59
  • 1058

数据结构之三元组顺序表实现稀疏矩阵运算(参考整理严蔚敏数据结构)

#include #include using namespace std; #define MAXSIZE 100 typedef int ElemType; typedef struct{ in...

三元组表的转置——c语言

顺序输入一个三元组表,先输出其矩阵形态,然后对其进行转置并输出转置后的矩阵。 #include #define MAXSIZE 100 typedef struct ...

数据结构C语言实现稀疏矩阵的压缩和运算的三元组顺序表表示法

总结:三元组顺序表示法表示稀疏矩阵有一定的局限性 , 特别是在矩阵的乘法的时候,非常复杂。 头文件 #ifndef SYZHEAD_H_INCLUDED #define SYZHEAD_H_IN...

数据结构三元组转置

  • 2014年06月29日 13:13
  • 2KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:三元组顺序表-转置运算-三种算法
举报原因:
原因补充:

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