#define MAX_SIZE 100
#define MAX_RC 20
struct Triple
{
int i, j;//行下标,列下标
ElemType e;//非零元素值
};
struct RLSMatrix
{
Triple data[MAX_SIZE + 1];//非零元三元组表,data[0]未用
int rpos[MAX_RC + 1];//各行第1个非零元素的位置表
int mu, nu, tu;//矩阵的行数,列数,非零元个数
};
int comp(int c1, int c2){
//比较这个数c1和c2的大小关系
if (c1 < c2)
return -1;
if (c1 == c2)
return 0;
return 1;
}
Status CreateSMatrix(RLSMatrix &M){
//创建稀疏矩阵M
int i, j;
Triple T;
Status k;
printf("请输入矩阵的行数,列数,非零元素个数:");
scanf("%d,%d,%d", &M.mu, &M.nu, &M.tu);
if (M.tu > MAX_SIZE || M.mu > MAX_RC)//矩阵M的非零元个数太多或行数太多
return ERROR;
M.data[0].i = 0;//为以下比较做准备
for (i = 1; i <= M.tu; i++)//依次输入M.tu个非零元素
{
do
{
printf("请按行序顺序输入第%d个非零元素所在的行(1~%d),列(1~%d),元素值:", i, M.mu, M.nu);
scanf("%d,%d,%d", &T.i, &T.j, &T.e);
k = 0;//输入值的范围正确的标志
if (T.i < 1 || T.i > M.mu || T.j < 1 || T.j > M.nu)//行或列超出范围
k = 1;
if (T.i < M.data[i - 1].i || T.i == M.data[i - 1].i && M.data[i - 1].j)
k = 1;//行或列的顺序有错
} while (k);//输入值的范围不正确则重新输入
M.data[i] = T;//将输入正确的值赋给M的相应存储单元
}
for (i = 1; i <= M.mu; i++)//给rpos[]赋初值1(每行第1个非零元素的初始位置)
M.rpos[i] =
稀疏矩阵的三元组行逻辑链接的顺序表存储结构表示及实现
最新推荐文章于 2023-12-23 20:05:59 发布