i//for A tupa, for(i=Atui< MAXSIZE;++) Adata i}={0,0,0};/清除原来的A中记录 i//SMAtrix Addto 5.23 typedef struct( Int 3 DSElem typedef struct( DSElem dataMAXSIZE] int cpot[MAXROW]J/这个向量存储每一行在二元组中的起始 位置 } SMAtrix,∥二元组矩阵类型 Status DSMatrix Locate(SMAtrix A, int I,ntj,int&ey求二元组矩阵的元素A[ 的值e for(s= AcpotI; s< A cpot[+1]&& A datas]jI=; s+)∥/注意查找范围 ifs< A cpotI+1]&& A data[s]. j=j)∥找到了元素A e=A data[s]; return OK return ErroR i//DSMatrix Locate 5.24 typedef struct( Int seq;∥该元素在以行为主序排列时的序号 El typedef structi SElem data MAXSIZE]; Iint mu. nu. ti } SMatrix,∥单下标二元组矩阵类型
pb++;pc++; } }//for A.tu=pc; for(i=A.tu;i<MAXSIZE;i++) A.data[i]={0,0,0}; //清除原来的 A 中记录 }//TSMatrix_Addto 5.23 typedef struct{ int j; int e; } DSElem; typedef struct{ DSElem data[MAXSIZE]; int cpot[MAXROW];//这个向量存储每一行在二元组中的起始 位置 int mu,nu,tu; } DSMatrix; //二元组矩阵类型 Status DSMatrix_Locate(DSMatrix A,int i,int j,int &e)//求二元组矩阵的元素 A[i][j] 的值 e { for(s=A.cpot[i];s<A.cpot[i+1]&&A.data[s].j!=j;s++);//注意查找范围 if(s<A.cpot[i+1]&&A.data[s].j==j) //找到了元素 A[i][j] { e=A.data[s]; return OK; } return ERROR; }//DSMatrix_Locate 5.24 typedef struct{ int seq; //该元素在以行为主序排列时的序号 int e; } SElem; typedef struct{ SElem data[MAXSIZE]; int mu,nu,tu; } SMatrix; //单下标二元组矩阵类型
Status SMatrix Locate(SMatrix A, Int 1, int J,nt&e》/求单下标二元组矩阵的元素 A[]的值e s=1*Anu+y+1;p=1 while( A. datalp]seq<s)p++,/利用各元素seq值逐渐递增的特点 f( A data[p]seq=s∥找到了元素A[l e=A data[].e; return OK eturn errol i//SMatrix Locate 5.25 typedef enum( 0, 1) bool typedef struct( int elem[MAXSIZE] bool map[mu nu] } BIMatrix,W用位图表示的矩阵类型 void BImatrix Add( BIMatrix A, BMMatrIx B, BIMatrix&C∥位图矩阵的加法 C. mu=A. mu C nu=A. nu for(i=0<Amu;++)∥每一行的相加 for(=0 j<A nu j++)∥每一个元素的相加 if(A. map[&&Bmap]]&&(Aeem[pa]+ Belem Ipb])结果不为0 C. elemlpcI=A elem[pa+B elem[pb Cmap[[]=1; else if(A mapid&&! B mapOD C. elemlpcF=A elem[pa] C maple else if(IA map[o]&&B mapiD C. elemlpcl=B elem[pbl
Status SMatrix_Locate(SMatrix A,int i,int j,int &e)//求单下标二元组矩阵的元素 A[i][j]的值 e { s=i*A.nu+j+1;p=1; while(A.data[p].seq<s) p++; //利用各元素 seq 值逐渐递增的特点 if(A.data[p].seq==s) //找到了元素 A[i][j] { e=A.data[p].e; return OK; } return ERROR; }//SMatrix_Locate 5.25 typedef enum{0,1} bool; typedef struct{ int mu,nu; int elem[MAXSIZE]; bool map[mu][nu]; } BMMatrix; //用位图表示的矩阵类型 void BMMatrix_Add(BMMatrix A,BMMatrix B,BMMatrix &C)//位图矩阵的加法 { C.mu=A.mu;C.nu=A.nu; pa=1;pb=1;pc=1; for(i=0;i<A.mu;i++) //每一行的相加 for(j=0;j<A.nu;j++) //每一个元素的相加 { if(A.map[i][j]&&B.map[i][j]&&(A.elem[pa]+B.elem[pb]))//结果不为 0 { C.elem[pc]=A.elem[pa]+B.elem[pb]; C.map[i][j]=1; pa++;pb++;pc++; } else if(A.map[i][j]&&!B.map[i][j]) { C.elem[pc]=A.elem[pa]; C.map[i][j]=1; pa++;pc++; } else if(!A.map[i][j]&&B.map[i][j]) { C.elem[pc]=B.elem[pb];