毕业论文论文范文课程设计实践报告法律论文英语论文教学论文医学论文农学论文艺术论文行政论文管理论文计算机安全
您现在的位置: 毕业论文 >> 课程设计 >> 正文

稀疏矩阵运算器-数据结构课程设计

更新时间:2007-10-20:  来源:毕业论文
稀疏矩阵运算器-数据结构课程设计|数据结构课程设计
/*******************************稀疏矩阵运算器*************************************/
#include "stdio.h"
#include "stdlib.h"
#define   MAXSIZE   20    /*非零元个数*/
#define   MAXRC     20
#define   MAXR      20
#define   MAXC      20
typedef   struct{
    int i,j;              /*非零元行下标和列下标*/
    int e;
} Triple ;
typedef   struct{
    Triple   data[MAXSIZE+1];  /*非零元三元组,data[0]未用*/
    int      rpos[MAXRC+1];    /*各行第一非零元的位置表*/
    int      mu,nu,tu;          /*矩阵的行数,列数,非零元数*/
} RLSMatrix  ;
void Print(RLSMatrix  *A,RLSMatrix  *B,RLSMatrix *T);
void ADD(RLSMatrix  *A,RLSMatrix  *B,RLSMatrix *T)      /*加法*/
{
       int x=1;
       int y=1;
       int z=1;
      
       T->tu=0;
       T->mu=A->mu;
       T->nu=A->nu;
      
       while(x<=A->tu)
       {
            
           if(A->data[x].i<B->data[y].i)
           {
                T->data[z].i=A->data[x].i;
                T->data[z].j=A->data[x].j;
                T->data[z].e=A->data[x].e;
                x++;z++;
           }
      
          else if(A->data[x].i==B->data[y].i)
          {
             if(A->data[x].j>B->data[y].j)
             {
                T->data[z].i=B->data[y].i;
                T->data[z].j=B->data[y].j;
                T->data[z].e=B->data[y].e;
                y++;z++;
             }
             else if(A->data[x].j==B->data[y].j){
              if((T->data[z].e=A->data[x].e+B->data[y].e)!=0)
    {
     T->data[z].i=A->data[x].i;
           T->data[z].j=A->data[x].j;
     x++;
     y++;
     z++;
    }
    else
    {
        x++;
     y++;
    }
    }
             else if(A->data[x].j<B->data[y].j)
             {
                T->data[z].i=A->data[x].i;
                T->data[z].j=A->data[x].j;
                T->data[z].e=A->data[x].e;
                x++;z++;
             }
         }
          else if(A->data[x].i>B->data[y].i)
          {
                T->data[z].i=B->data[y].i;
                T->data[z].j=B->data[y].j;
                T->data[z].e=B->data[y].e;
                y++;z++;
           }
       if(y>=B->tu)
           break;
       }
       if(x<=A->tu){
            while(x<=A->tu){
                T->data[z].i=A->data[x].i;
                T->data[z].j=A->data[x].j;
                T->data[z].e=A->data[x].e;
                x++;z++; 
            }
       }
       if(y<=B->tu){
            while(y<=B->tu){ 
                T->data[z].i=B->data[y].i;
                T->data[z].j=B->data[y].j;
                T->data[z].e=B->data[y].e;
                y++;z++; 
            }
       }
  
   T->tu=z;
   Print(A,B,T);
}
void SUB(RLSMatrix  *A,RLSMatrix  *B,RLSMatrix *T)     /*减法*/
{
       int x=1;
       int y=1;
       int z=1;
       T->tu=0;
       T->mu=A->mu;
       T->nu=A->nu;
       while(x<=A->tu)
       {
           if(A->data[x].i<B->data[y].i)
           {
                T->data[z].i=A->data[x].i;
                T->data[z].j=A->data[x].j;
                T->data[z].e=A->data[x].e;
                x++;z++;
           }
      
          else if(A->data[x].i==B->data[y].i)
          {
             if(A->data[x].j>B->data[y].j)
             {
                T->data[z].i=B->data[y].i;
                T->data[z].j=B->data[y].j;
                T->data[z].e=0-B->data[y].e;
                y++;z++;
             }
             else if(A->data[x].j==B->data[y].j){
                 if((T->data[z].e=A->data[x].e-B->data[y].e)!=0)
    {
     T->data[z].i=A->data[x].i;
           T->data[z].j=A->data[x].j;
     x++;
     y++;
     z++;
    }
    else
    {
        x++;
     y++;
    }
    }
             else if(A->data[x].j<B->data[y].j)
             {
                T->data[z].i=A->data[x].i;
                T->data[z].j=A->data[x].j;
                T->data[z].e=A->data[x].e;
                x++;z++;
            }
         }
         else if(A->data[x].i>B->data[y].i)
         {
                T->data[z].i=B->data[y].i;
                T->data[z].j=B->data[y].j;
                T->data[z].e=0-B->data[y].e;
                y++;z++;
         }
        if(y>=B->tu)
       break;
       }
     
       if(x<=A->tu)
       {
            while(x<=A->tu)
            {
                T->data[z].i=A->data[x].i;
                T->data[z].j=A->data[x].j;
                T->data[z].e=A->data[x].e;
                x++;z++; 
            }
       }
       if(y<=B->tu)
       {
            while(y<=B->tu){ 
                T->data[z].i=B->data[y].i;
                T->data[z].j=B->data[y].j;
                T->data[z].e=0-B->data[y].e;
                y++;z++; 
                           }
       }
  
   T->tu=z;
   Print(A,B,T);
}

[1] [2] 下一页

稀疏矩阵运算器-数据结构课程设计下载如图片无法显示或论文不完整,请联系qq752018766
设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©youerw.com 优文论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。