#include <stdio.h> #include<stdlib.h> #define MAXSIZE 100 typedef struct { int i, j; int v; } Triple; typedef struct { Triple data[MAXSIZE + 1]; int m, n, len; } TSMatrix; int CreateMatrix(TSMatrix *M, int m, int n, int len, int data[][3]) { if (m > MAXSIZE || n > MAXSIZE || len > MAXSIZE) { return 0; } M->m = m; M->n = n; M->len = len; for (int i = 1; i <= len; i++) { M->data[i].i = data[i - 1][0]; M->data[i].j = data[i - 1][1]; M->data[i].v = data[i - 1][2]; } return 1; } void PrintMatrix(TSMatrix M) { printf("Matrix:\n"); for (int i = 1; i <= M.len; i++) { printf("%d %d %d\n", M.data[i].i, M.data[i].j, M.data[i].v); } } void TransposeMatrix(TSMatrix M, TSMatrix *T) { T->m = M.n; T->n = M.m; T->len = M.len; int q = 1; for (int col = 1; col <= M.n; col++) { for (int p = 1; p <= M.len; p++) { if (M.data[p].j == col) { T->data[q].i = M.data[p].j; T->data[q].j = M.data[p].i; T->data[q].v = M.data[p].v; q++; } } } } int main() { int data[][3] = {{1, 1, 1}, {1, 5, 8}, {2, 5, 4}, {3, 1, 3}, {3, 5, 1}}; TSMatrix M, T; if (!CreateMatrix(&M, 3, 5, 5, data)) { printf("Matrix size exceeds maximum allowed size!\n"); return 0; } printf("Before transpose:\n"); PrintMatrix(M); TransposeMatrix(M, &T); printf("After transpose:\n"); PrintMatrix(T); system("pause"); return 0; }解释这段代码
时间: 2024-04-27 16:24:27 浏览: 13
这段代码是一个 C 语言实现的稀疏矩阵的转置程序。其中定义了两个结构体,一个是 Triple 结构体,用来存储矩阵中的非零元素的三元组表示;另一个是 TSMatrix 结构体,用来存储整个矩阵的信息,包括矩阵的行数、列数、非零元素个数和非零元素的三元组表示。主函数中首先定义了一个二维数组 data,用来表示一个 3 行 5 列的稀疏矩阵。然后通过调用 CreateMatrix 函数,将该稀疏矩阵转换为 TSMatrix 类型的矩阵 M。接着调用 TransposeMatrix 函数,将 M 矩阵转置得到 TSMatrix 类型的矩阵 T。最后调用 PrintMatrix 函数,分别输出转置前后的矩阵信息。在 TransposeMatrix 函数中,使用了两个循环,外层循环遍历矩阵的所有列,内层循环遍历矩阵中的非零元素。如果找到一个非零元素的列号等于当前列号,就将该元素的行列交换并存储到 T 中。
相关问题
#include <stdio.h> #include <stdlib.h> #define MAXSIZE 100 typedef int ElemType; typedef struct
这段代码是C语言中的头文件引用和一些定义的示例。其中,`#include <stdio.h>`和`#include <stdlib.h>`是用来引入标准库函数的头文件。`stdio.h`包含了输入输出相关的函数,如`printf`和`scanf`;`stdlib.h`包含了一些常用的函数,如内存分配函数`malloc`和随机数生成函数`rand`。
`#define MAXSIZE 100`是一个宏定义,用来定义一个常量`MAXSIZE`,它的值为100。
`typedef int ElemType;`是用来给`int`类型起一个别名`ElemType`,方便在代码中使用。
至于代码中的结构体部分,由于你没有提供完整的代码,所以无法给出具体的解释。但一般来说,结构体用于定义一种自定义的数据类型,可以包含多个不同类型的成员变量。
优化这段代码#include<stdio.h> #include<stdlib.h> #include<malloc.h> #include<conio.h> #define OK 1 #define error 0 #define MVNum 100 #define MAXSIZE 10 typedef int OtherInfo,QElemtype; typedef char VerTexType; //结构体定义 typedef struct ArcNode{ int adjvex;
首先,该段代码中包含了一些不必要的头文件,例如:conio.h,malloc.h等。建议只保留stdio.h和stdlib.h。
其次,可以将#define OK 1和#define error 0替换为枚举类型,使代码更加清晰易读。
最后,在结构体定义中,可以将OtherInfo和QElemtype合并为一个类型,避免定义过多类型。同时,也可以将结构体中的变量类型进行优化,例如将int类型的adjvex改为short或者char类型。
重构后的代码如下所示:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_VERTEX_NUM 100
#define MAX_ARC_NUM 10
typedef enum {
ERROR = 0,
OK = 1
} Status;
typedef char VertexType;
typedef int ArcType;
typedef struct ArcNode {
int adjvex;
struct ArcNode* nextarc;
ArcType* info;
} ArcNode;
typedef struct VNode {
VertexType data;
ArcNode* firstarc;
} VNode, AdjList[MAX_VERTEX_NUM];
typedef struct {
AdjList vertices;
int vexnum, arcnum;
} ALGraph;
```
希望可以帮到你。