资源简介
实现一个能进行稀疏矩阵基本运算的运算器。以“带行逻辑链接信息”的三元组顺序表表示稀疏矩阵,实现两个矩阵相加、相减和相乘的运算。稀疏矩阵的输入形式采用三元组表示, 而运算结果的矩阵则通常以阵列形式列出。
代码片段和文件信息
#include
#include
#define MaxSize 100 //矩阵中非零元素最多个数
typedef float ElemType;
typedef struct
{
int r; //行号
int c; //列号
ElemType d; //元素值
} TupNode; //三元组定义
typedef struct
{
int rows; //行数
int cols; //列数
int nums; //非零元素个数
TupNode data[MaxSize];
} TSMatrix; //三元组顺序表定义
//初始化
void InitMat(TSMatrix* t);
//从一个二维稀疏矩阵创建其三元组表示
void CreatMat(TSMatrix *t ElemType** A int rows int cols); //从一个二维稀疏矩阵创建其三元组表示
//rows行。cols 列 零矩阵
void CreatMatEx(TSMatrix *t int rows int cols);
//三元组元素赋值
int Value(TSMatrix *t ElemType x int i int j);
//将指定位置的元素值赋给变量
int Assign(TSMatrix t ElemType *x int i int j);
//输出三元组
void DispMat(TSMatrix t);
//输出矩阵形式
void DispMatrix(TSMatrix t);
//矩阵转置
void TranTat(TSMatrix t TSMatrix *tb);
//加
int MatAdd(TSMatrix a TSMatrix b TSMatrix *c);
//减
int MatSub(TSMatrix a TSMatrix b TSMatrix *c);
//乘
int MatMul(TSMatrix a TSMatrix b TSMatrix *c);
void CreatMat(TSMatrix *t ElemType** A int rows int cols) //从一个二维稀疏矩阵创建其三元组表示
{
int i j;
ElemType aij = 0;
t->rows = rows;
t->cols = cols;
t->nums = 0;
for (i = 0; i < rows; i++)
{
for (j = 0; j < cols; j++)
{
aij = *((ElemType*)A + rows * i + j);
if (aij != 0) //只存储非零元素
{
t->data[t->nums].r = i;
t->data[t->nums].c = j;
//t->data[t->nums].d = A[i][j];
t->data[t->nums].d = aij;
t->nums++;
}
}
}
}
void CreatMatEx(TSMatrix *t int rows int cols)
{
int i = 0;
t->rows = rows;
t->cols = cols;
t->nums = 0;
for (i = 0; i < MaxSize;i++)
{
t->data[i].r = 0;
t->data[i].c = 0;
t->data[i].d = 0;
}
}
void InitMat(TSMatrix* t)
{
int i = 0;
t->cols = 0;
t->rows = 0;
t->nums = 0;
for (i = 0; i < MaxSize; i++)
{
t->data[i].r = 0;
t->data[i].c = 0;
t->data[i].d = 0;
}
}
int Value(TSMatrix *t ElemType x int i int j) //三元组元素赋值
{
int k = 0 k1;
if (i >= t->rows || j >= t->cols)
return 0; //失败时返回false
while (knums && i>t->data[k].r) k++; //查找行
while (knums && i == t->data[k].r && j>t->data[k].c) k++;//查找列
if (t->data[k].r == i && t->data[k].c == j && t->nums) //存在这样的元素
t->data[k].d = x;
else //不存在这样的元素时插入一个元素
{
for (k1 = t->nums - 1; k1 >= k; k1--)
{
t->data[k1 + 1].r = t->data[k1].r;
t->data[k1 + 1].c = t->data[k1].c;
t->data[k1 + 1].d = t->data[k1].d;
}
t->data[k].r = i;
t->data[k].c = j;
t->data[k].d = x;
t->nums++;
}
return 1; //成功时返回true
}
int Assign(TSMatrix t ElemType *x int i int j) //将指定位置的元素值赋给变量
{
int k = 0;
if (i >= t.rows || j >= t.cols)
return 0; //失败时返回false
while (kt.data[k].r) k++; //查找行
while (k
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 35 2019-01-04 08:34 三元组相关算法(含设计报告)\a.txt
文件 34 2019-01-04 08:35 三元组相关算法(含设计报告)\b.txt
文件 104 2019-01-04 03:18 三元组相关算法(含设计报告)\c.txt
文件 9140 2019-01-04 03:08 三元组相关算法(含设计报告)\main.c
文件 217667 2019-01-04 04:07 三元组相关算法(含设计报告)\课程设计报告.docx
目录 0 2019-06-14 17:00 三元组相关算法(含设计报告)
----------- --------- ---------- ----- ----
226980 6
评论
共有 条评论