资源简介

实现一个能进行稀疏矩阵基本运算的运算器。以“带行逻辑链接信息”的三元组顺序表表示稀疏矩阵,实现两个矩阵相加、相减和相乘的运算。稀疏矩阵的输入形式采用三元组表示, 而运算结果的矩阵则通常以阵列形式列出。

资源截图

代码片段和文件信息

#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


评论

共有 条评论

相关资源