• 大小: 7KB
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2021-05-07
  • 语言: C/C++
  • 标签: 矩阵  

资源简介

稀疏矩阵相加、相乘和转置(用三元组实现)

资源截图

代码片段和文件信息

#include    
#include     
int const N=4;              //常量  数组的大小
int const MaxSize=100;    // 最大 为100  常量
typedef int ElemType;     // ElemType == int
typedef struct     //结构体
{   
    int r;          //行号    
    int c;          //列号    
    ElemType d;    //元素值    
}TupNode;        //三元组定义    
typedef struct     // 结构体
{   
    int rows;   // 行
    int cols;   // 列
    int nums;   //非零元素个数    
    TupNode data[MaxSize];   
}TsMatrix;      //三元组存储结构    
   
void CreatMat(TsMatrix &tElemType A[N][N])   //三元组表示稀疏矩阵    
{   
    int ij;   
    t.rows=N;t.cols=N;t.nums=0;   // 行列赋值
    for(i=0;i    {   
        for(j=0;j            if(A[i][j]!=0)   
            {   
                t.data[t.nums].r=i;   // Tsatrix中的TupNode data[MaxSize]  从0开始储存数组A的非零值  r c分别存储行列值
                t.data[t.nums].c=j;   
                t.data[t.nums].d=A[i][j];   
                t.nums++;   
            }   
    }   
}   
void DispMat(TsMatrix t)  //输出三元组    
{   
    int i;   
    if(t.nums<1)   // 没有直接返回  
        return ;   // 有的话输出
    printf(“\t行数:%d\t列数:%d\t非零个数:%d\n“t.rowst.colst.nums);   
    printf(“\t--------------------------\n“);   
    for(i=0;i        printf(“\t%d\t%d\t%d\n“t.data[i].rt.data[i].ct.data[i].d);   
}   

void FastTranMat(TsMatrix tTsMatrix &tb)            //矩阵的快速转置    
{   
    int colpqsnum[N]cpot[N];   
    tb.rows=t.cols;tb.cols=t.rows;tb.nums=t.nums;   
    if(t.nums)                                          // 如果存在执行下面函数
    {   
          for(col=0;col                                                        //先置t矩阵每列非0元个数均为0    
          for(s=0;s                                                        //求t中每一列非0元个数    
            cpot[0]=0;                                   //t中第一列第一个非元在tb中的序号为1    
          for(col=1;col          cpot[col]=cpot[col-1]+num[col-1];   
                                                          //求t中第col列中第一个非0元在T中的序号    
           for(p=0;p           {   
              col=t.data[p].c;                             //记下t中第p个元素的列号    
               q=cpot[col];                               //该列中第一个非0元在tb中的序号    
              tb.data[q].r=t.data[p].c;   
              tb.data[q].c=t.data[p].r;   
              tb.data[q].d=t.data[p].d;   
              ++cpot[col];   
           }   
    }   
}   
int MatAdd(TsMatrix aTsMatrix bTsMatrix &c)            // 矩阵的相加
{   
    int i=0j=0k=0;   
    ElemType v;   
    if(a.rows!=b.rows||a.cols!=b.cols)   
        return 0;                                    //行数或列数不相等时不能进行相加    
    c.rows=a.rows;c.cols=a.rows;                    //c的行数和列数与a的相同    
    while(i    {   
        if(a.data[i].r==b.data[j].r)   
        {   
            if(a.data[i]

评论

共有 条评论