首页 行逻辑链接的顺序表

行逻辑链接的顺序表

举报
开通vip

行逻辑链接的顺序表行逻辑链接的顺序表 行逻辑链接的顺序表 #include #include #include #define MAXSIZE 12500 //设非零元个数最大值 #define MAXRC 100 //非零元最大数 typedef int ElemType; typedef struct { int i,j; //非零元素的行下标和列下标 ElemType e; }Triple; //三元组结构 typedef struct { Triple data[MAXSIZE+1];//非零元三...

行逻辑链接的顺序表
行逻辑链接的顺序表 行逻辑链接的顺序表 #include #include #include #define MAXSIZE 12500 //设非零元个数最大值 #define MAXRC 100 //非零元最大数 typedef int ElemType; typedef struct { int i,j; //非零元素的行下标和列下标 ElemType e; }Triple; //三元组结构 typedef struct { Triple data[MAXSIZE+1];//非零元三元组表,0下标不用 int rpos[MAXRC+1]; //各行第一个非零元位置表 int mu,nu,tu; //矩阵的行数mu,列数nu和非零元个数tu }RLSMatrix; void CreateSMatrix(RLSMatrix *T,ElemType *M,int m,int n) // 创建稀疏矩阵,m,n为行列数 { int i,j,subscript,count,total; Triple tElem; //三元组元素 subscript = 1; count = 0; //用于计算每列非零元 total = 0; for(i=0;idata[subscript++] = tElem; ++total; } subscript = 1; T->rpos[1] = 1; //第一位肯定为1 for(i=0;irpos[subscript+1] = T->rpos[subscript] + count;//上一行的rpos+该列非零个数 subscript++; } count = 0; } T->mu = m; //取得行,列数,非零元数 T->nu = n; T->tu = total; } void FastTransposeSMatrix(RLSMatrix M,RLSMatrix *T) { //求稀疏矩阵M的转置矩阵T,三元组表示 int col,t;//其它变量 int p,q; //分别代表指向M,T非零元的指针 int num[30],cpot[30]; //num 记录 混凝土 养护记录下载土方回填监理旁站记录免费下载集备记录下载集备记录下载集备记录下载 每列非零元个数,cpot 记录每列非零元在矩阵T中的相应位置 Triple tElem; //三元组元素 T->mu = M.nu; T->nu = M.mu; T->tu = M.tu; if(T->tu) { for(col=1;col<=M.nu;++col) num[col] = 0;//每列先置0 //根据列号j,在相应的num列号(下标)中求出该 列非零元个数 for(t=1;t<=M.tu;++t) ++num[M.data[t].j]; T->rpos[1] = cpot[1] = 1; //第1位总为1 //求第col列中第一个非0元在T.data中的序号 for(col=2;col<=M.tu;++col) T->rpos[col] = cpot[col] = cpot[col-1] + num[col-1]; for(p=1;p<=M.tu;++p) //进行置换 { col = M.data[p].j; q = cpot[col]; tElem.i = M.data[p].j; tElem.j = M.data[p].i; tElem.e = M.data[p].e; T->data[q] = tElem; ++cpot[col]; }//for p }//if T } void MultSMatrix(RLSMatrix M,RLSMatrix N,RLSMatrix *Q) { //求矩阵乘积Q=M X N,采用行逻辑链接存储表示。 int arow,brow; //行变量 int tp; //非0元个数中间变量 int p,q; //M,N中的位置指针 int ccol; //列中间变量 int i; int ctemp[10]; //对应位置元素相乘积的累加器 Triple tElem; //三元组元素 if(M.nu!=N.mu) exit(EXIT_SUCCESS); //M列数不等于N 行数不能相乘 Q->mu = M.mu; Q->nu = N.nu; Q->tu = 0; //初始化Q if(M.tu*N.tu!=0) //判断是否非0矩阵 { for(arow=1;arow<=M.mu;++arow)//处理M每一行 { for(i=1;i<=N.nu;i++) ctemp[i] = 0; Q->rpos[arow] = Q->tu + 1;//求出Q每 行第一非0元的位置 if(arownu;++ccol) if(ctemp[ccol]) { if(++Q->tu>MAXSIZE) exit(1); //取得行号 ,列号 tElem.i = arow; tElem.j = ccol; tElem.e = ctemp[ccol]; Q->data[Q->tu] = tElem; } }// fro arow }// if M.tu*N.tu } void PrintSMatrix(RLSMatrix *T)//打印三元组表 { int i; printf("i j e\n"); for(i=1;i<=T->tu;++i) printf("%d %d %d %d\n",T->data[i].i,T->data[i].j,T->data[i ].e,T->rpos[i]); } int main(void) { ElemType arr[][4] = {{0,1,0,1},{2,0,3,0},{0,1,0,0}}; ElemType arr2[][3] = {{0,0,0},{0,2,0},{1,0,0},{4,0,0}}; RLSMatrix T,TS,TMul; CreateSMatrix(&T,arr,3,4); printf("稀疏矩阵T:\n"); PrintSMatrix(&T); //FastTransposeSMatrix(T,&TS); printf("\n"); //printf("转置后的"); //PrintSMatrix(&TS); CreateSMatrix(&TS,arr2,4,3); printf("稀疏矩阵TS:\n"); PrintSMatrix(&TS); printf("\n"); MultSMatrix(T,TS,&TMul); printf("稀疏矩阵TXTS:\n"); PrintSMatrix(&TMul); return 0; }
本文档为【行逻辑链接的顺序表】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_954223
暂无简介~
格式:doc
大小:22KB
软件:Word
页数:8
分类:生活休闲
上传时间:2017-12-20
浏览量:39