#include <iostream>
#include <string>
using namespace std;
typedef int EType;
struct SYMMATRIX {
EType *elem;//通过创建获取相应空间
int bounds;
};
//矩阵相加算法
int AddMatrix(SYMMATRIX A, SYMMATRIX B, SYMMATRIX &C) {
if (A.bounds != B.bounds)
return 1;//AB阶数不同,不能相加
for (int i = 1; i < A.bounds; i++)
{
for (int j = 1; j < i; j++) {
C.elem[i * (i - 1) / 2 + j - 1] = A.elem[i * (i - 1) / 2 + j - 1] +
B.elem[i * (i - 1) / 2 + j - 1];
}
}
return 0;
}
//三元顺序表
struct Triple {
int row, col;
EType value;
};
struct TSMatrix {
Triple* elem;
int rows,clos;
int temps;
int MaxSize;
};
//创建稀疏矩阵
void CreateTSMatrix(TSMatrix& A, int maxsize) {
A.MaxSize = maxsize;
A.elem = new Triple[A.MaxSize];
A.rows = 0;
A.clos = 0;
A.temps = 0;
}
//三元数组转置算法
void TransposeTSMatrix(TSMatrix& A, TSMatrix& B) {
B.rows = A.clos;
B.clos = A.rows;
B.temps = A.temps;
if (B.temps) {
int k = 1;
for (int col = 1; col <= A.clos; col++) {
for (int i = 1; i <= A.temps; i++) {
if (A.elem[i - 1].col == col) {
B.elem[k - 1].row = A.elem[i - 1].col;
B.elem[k - 1].col = A.elem[i - 1].row;
B.elem[k - 1].value = A.elem[i - 1].value;
k = k + 1;
}
}
}
}
}
//行逻辑链表
struct Cnode {
int c;
EType v;
Cnode* next;
};
struct RLSMatrix {
Cnode* r;
int rows, cols;
int temrs;//非零元的个数
};
void CreateRLSMatrix(RLSMatrix &A,int r ,int c) {
A.rows = r; A.cols = c; A.temrs = 0;
A.r = new Cnode[A.rows];
for (int i = 1; i <= A.rows; i++)
A.r[i - 1].next = NULL;
}
|