矩阵相加(十字链表).docVIP

  • 9
  • 0
  • 约4.53千字
  • 约 6页
  • 2017-12-27 发布于河南
  • 举报
矩阵相加(十字链表)

矩阵相加(十字链表) /* Note:Your choice is C IDE */ #include stdio.h #include stdlib.h #define LEN (OLink *)malloc((M-mu+1)*sizeof(OLink)) #define LDN (OLink *)malloc((M-nu+1)*sizeof(OLink)) #define LRN (struct OLNode *)malloc(sizeof(struct OLNode)) typedef struct OLNode { int i,j,e; //非0元的行数、列数、值 struct OLNode *right,*down; //非0元所在的行表、列表的后继链域 }*OLink; typedef struct { OLink *rhead,*chead; //行表、列表的向量基址 int mu,nu,tu; //稀疏矩阵的行数、列数、非0元个数 }CrossList; void CreateSMatrix_OL(CrossList *M) //创建稀疏矩阵(用十字链表表示) { OLink p,q; int m,n,k; q=LRN; if(!q) printf(内存分配失败!\n); printf(请输入矩阵的行数,列数,非零元个数:(用空格隔开,按回车结束,下同)\n); scanf(%d%d%d,M-mu,M-nu,M-tu); M-rhead=LEN;M-chead=LDN; if((!M-rhead)||(!M-chead)) printf(内存分配失败!\n); for(m=1;m=M-mu;++m) M-rhead[m]=NULL; //初始化行列头指针向量 for(n=1;n=M-nu;++n) M-chead[n]=NULL; //各行列链表为空链表 for(k=1;k=M-tu;++k) { p=LRN; if(!p) printf(内存分配失败!\n); printf(请输入第%d个非0元素的行数,列数,值:,k); //可任意次序输入非0元 scanf(%d%d%d,p-i,p-j,p-e); if((M-rhead[p-i]==NULL)||(M-rhead[p-i]-jp-j)) {p-right=M-rhead[p-i];M-rhead[p-i]=p;} else //查询在行表中的插入位置 { for(q=M-rhead[p-i];(q-right!=NULL)(q-right-jp-j);q=q-right); p-right=q-right;q-right=p; //完成行插入 } if((M-chead[p-j]==NULL)||(M-chead[p-j]-ip-i)) {p-down=M-chead[p-j];M-chead[p-j]=p;} else //查询在列表中的插入位置 { for(q=M-chead[p-j];(q-down!=NULL)(q-down-ip-i);q=q-down); p-down=q-down;q-down=p; //完成列插入 } } } void Print_List(CrossList M) //输出十字链表所表示的稀疏矩阵 { int i,k,n; OLink p; for(p=M.rhead[1],i=1;i=M.mu;++i,p=M.rhead[i]) { for(k=1;k=M.nu;++k) { if(p!=NULL) { if(k==p-j) {n=p-e;p=p-right;} else n=0; } else n=0; printf(%6d,n); } printf(\n); } } CrossList * AddCrossL

文档评论(0)

1亿VIP精品文档

相关文档