三元组表的一种变型是,从三元组表中去掉行下标域得到二元组表,另设一个行起始向量,其每个分量是二元组表的一个下标值,指示该行中第一个非零元素在二元组表中的起始位置。试编写一个算法,由矩阵元素的下标值i,j求矩阵元素。
稀疏矩阵的二元组顺序表+行起始向量的类型T2SMatrix的定义:
typedef struct{
int j;
ElemType e;
}TwoTuples;
typedef struct{
TwoTuples data[MAXSIZE];
int cpot[MAXROW]; // 这个向量存储每一行在二元组中的起始位置
int mu,nu,tu;
} T2SMatrix; // 二元组矩阵类型
实现函数如下:
Status GetElem(T2SMatrix M, int i, int j, ElemType &e)
/* 求二元组矩阵的元素A[i][j]的值e */
{
int cur,next;
cur = M.cpot[i];//当前一行的起始位置
next = M.cpot[i + 1];//下一行的起始位置
e = 0;//需要注意,稀疏矩阵中的e不是非零元素就是零元素
if(i <= 0 || j <= 0 || i > M.mu || j > M.nu)
return ERROR;
for( ;cur < next; ++cur){
if(M.data[cur].j == j){//匹配成功
e = M.data[cur].e;//返回非零元素e
return OK;
}
}
return OK; //匹配失败,返回零元素e
}