Files
2019-11-13 17:12:56 +08:00

108 lines
2.4 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/*=============================
* 行逻辑链接的顺序表(稀疏矩阵)
*
* 包含算法: 5.3
==============================*/
#ifndef RLSMATRIX_H
#define RLSMATRIX_H
#include <stdio.h>
#include <stdlib.h> // 提供 malloc 原型
#include <string.h> // 提供 strstr 原型
#include "Status.h" //**▲01 绪论**//
/* 宏定义 */
#define MAXSIZE 12500 // 非零元数量的最大值
#define MAXRC 20 // 各行元素个数的最大值
/* 行逻辑链接的稀疏矩阵元素类型 */
typedef int ElemType;
/* 三元组类型定义,主要用来存储非零元 */
typedef struct {
int i, j; // 该非零元的行下标和列下标
ElemType e;
} Triple;
/* 行逻辑链接的稀疏矩阵类型定义 */
typedef struct {
Triple data[MAXSIZE + 1]; // 非零元三元组表data[0]未用
int rpos[MAXRC + 1]; // 各行第一个非零元在三元组表中的位置表rpos[0]未用
int mu, nu, tu; // 矩阵的行数、列数和非零元个数
} RLSMatrix;
/*
* 创建稀疏矩阵M
*
*
*【备注】
*
* 教材中默认从控制台读取数据。
* 这里为了方便测试,避免每次运行都手动输入数据,
* 因而允许选择从预设的文件path中读取测试数据。
*
* 如果需要从控制台读取数据则path为NULL或者为空串
* 如果需要从文件中读取数据则需要在path中填写文件名信息。
*/
Status CreateSMatrix(RLSMatrix* M, char* path);
/*
* 销毁稀疏矩阵
*
*【注】
* 行逻辑链接的顺序表结构无法销毁。
*/
Status DestroySMatrix(RLSMatrix* M);
/*
* 矩阵复制
*
* 创建一个新矩阵T该矩阵包含了从矩阵M中包含的数据。
*/
Status CopySMatrix(RLSMatrix M, RLSMatrix* T);
/*
* 矩阵加法
*
* Q = M + N。
*/
Status AddSMatrix(RLSMatrix M, RLSMatrix N, RLSMatrix* Q);
/*
* 矩阵减法
*
* Q = M - N。
*/
Status SubSMatrix(RLSMatrix M, RLSMatrix N, RLSMatrix* Q);
/*
* ████████ 算法5.3 ████████
*
* 矩阵乘法
*
* Q = M * N。
*/
Status MultSMatrix(RLSMatrix M, RLSMatrix N, RLSMatrix* Q);
/*
* 矩阵转置
*/
Status TransposeSMatrix(RLSMatrix M, RLSMatrix* T);
/*
* 矩阵快速转置
*/
Status FastTransposeSMatrix(RLSMatrix M, RLSMatrix* T);
/*
* 输出矩阵
*/
void PrintSMatrix(RLSMatrix M);
// 为rpos数组赋值
static void AssignRpos(RLSMatrix* M);
#endif