稀疏矩阵三元组模板

匿名 (未验证) 提交于 2019-12-03 00:34:01

稀疏矩阵三元顺序组模板

typedef struct {     int i,j;     int elem; }Triple;//一个点的三元组。 typedef struct {    Triple Data[MAXN];    int m,n,len;   //m,n记录的是这个矩阵的行与列;但本题没用到整个矩阵的行与列,因为是稀疏矩阵 }TripleMatrix;    //一个矩阵的三元组

稀疏矩阵三元顺序组的创建

void CreateTriple(TripleMatrix *p,int n)  //因为有->,所以用指针传方便 {     int cnt;     for(cnt=0;cnt<n;cnt++)   //i从0开始,是因为addtriple这个函数while跳出的小于号决定的    {        scanf("%d%d%d",&p->Data[cnt].i,&p->Data[cnt].j,&p->Data[cnt].elem);  //因为不是链表存储结构,所以不用malloc构建空间    }    p->len=cnt;                                                          //for里不要再习惯i了 }

稀疏矩阵三元组顺序的相加

void AddTriple(TripleMatrix *a,TripleMatrix *b,TripleMatrix *c) {     int k,l;     int temp;     c->len=0;     k=0,l=0;     while(k<(a->len)&&l<(b->len))                                      //将矩阵一维展开,因为输出是从行小,再列小的顺序输出的     {          //a,b同位置的点         //直接相加,同往后移一位         if((a->Data[k].i==b->Data[l].i)&&(a->Data[k].j==b->Data[l].j)) //矩阵只能是两个矩阵同行同列的元素相加。         {               temp=a->Data[k].elem+b->Data[l].elem;               if(temp)           {             c->Data[c->len].i=a->Data[k].i;             c->Data[c->len].j=a->Data[k].j;             c->Data[c->len++].elem=temp;                             //c->len++是肯定的           }           k++,l++;         }         //a在b前的点         //1.行相同,列小的点,2行小的点。         //取a,a向后移         else if(((a->Data[k].i==b->Data[l].i)&&(a->Data[k].j<b->Data[l].j))||(a->Data[k].i<b->Data[l].i))         {             c->Data[c->len].i=a->Data[k].i;             c->Data[c->len].j=a->Data[k].j;             c->Data[c->len++].elem=a->Data[k].elem;             k++;                                                      //前一矩阵先的点         }         //a在b后的点         //1.行相同,列大的点,2行大的点。         //取b,b向后移         else if(((a->Data[k].i==b->Data[l].i)&&(a->Data[k].j>b->Data[l].j))||(a->Data[k].i>b->Data[l].i))         {             c->Data[c->len].i=b->Data[l].i;             c->Data[c->len].j=b->Data[l].j;             c->Data[c->len++].elem=b->Data[l].elem;                   //后一矩阵先的点             l++;         }     }         //剩余处理     while(k<(a->len))     {              c->Data[c->len].i=a->Data[k].i;             c->Data[c->len].j=a->Data[k].j;             c->Data[c->len++].elem=a->Data[k].elem;             k++;     }      while(l<(b->len))      {             c->Data[c->len].i=b->Data[l].i;             c->Data[c->len].j=b->Data[l].j;             c->Data[c->len++].elem=b->Data[l].elem;             l++;      } }

稀疏矩阵三元顺序组的输出

void Print(TripleMatrix *c) {     int cnt;     for(cnt=0;cnt<(c->len);cnt++)     {         printf("%d %d %d\n",c->Data[cnt].i,c->Data[cnt].j,c->Data[cnt].elem);     } }

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!