稀疏矩陣運算器_第1頁
稀疏矩陣運算器_第2頁
稀疏矩陣運算器_第3頁
稀疏矩陣運算器_第4頁
稀疏矩陣運算器_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、*#include "stdio.h"#include "stdlib.h"#define MAXSIZE 20 /*#define MAXRC 20#define MAXR 20#define MAXC 20typedef structint i,j; /*int e;) Triple ;typedef structTriple dataMAXSIZE+1; /*int rposMAXRC+1; /*int mu,nu,tu; /*) RLSMatrix ;非零元個數(shù)*/非零元行下標和列下標*/非零元三元組,data0未用*/各行第一非零元的位置表*/

2、矩陣的行數(shù),列數(shù),非零元數(shù)*/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)T ->dataz. i=A->datax. i;T->dataz.j=A->datax.j;T->dataz.e=A->datax.e;

3、x+;z+;)else if(A->datax. i=B->datay. i)if(A->datax.j>B->datay.j)T ->dataz. i=B->datay. i;T->dataz.j=B->datay.j;T->dataz.e=B->datay.e;y+;z+;)else if(A->datax.j=B->datay.j)if(T->dataz.e=A->datax.e+B->datay.e)!=O)T->dataz.i=A->datax.i;T->d ataz.j

4、=A->datax.j;x+;y+;z+;)elsex+;y+;)else if(A->datax.j<B->datay.j) T ->dataz. i=A->datax. i;T->dataz.j=A->datax.j;T->dataz.e=A->datax.e; x+;z+;)else if(A->datax. i>B->datay. i)T ->dataz. i=B->datay. i;T->dataz.j=B->datay.j;T->dataz.e=B->datay.e;y

5、+;z+;)if(y>=B->tu) break;)if(x<=A->tu)while(x<=A->tu)T ->dataz. i=A->datax. i;T->dataz.j=A->datax.j;T->dataz.e=A->datax.e;x+;z+;)if(y<=B->tu)while(y<=B->tu)(T ->dataz. i=B->datay. i;T->dataz.j=B->datay.j;T->dataz.e=B->datay.e;y+;z+;)T

6、->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=O;T->mu=A->mu;T->nu=A->nu;while(x<=A->tu)if(A->datax.i<B->datay.i)T ->dataz. i=A->datax. i;T->dataz.j=A->datax.j;T->dataz.e=A->datax.e;x+;z+;els

7、e if(A->datax.i=B->datay.i)else if(A->datax.i>B->datay.i)T ->dataz. i=B->datay. i;T->dataz.j=B->datay.j;T->dataz.e=O-B->datay.e;y+;z+;)else if(A->datax.j=B->datay.j)if(T->dataz.e=A->datax.e-B->datay.e)!=O)T->dataz.i=A->datax.i;T->d ataz.j=A-&g

8、t;datax.j;x+;y+;z+;)elsex+;y+;)else if(A->datax.j<B->datay.j)T ->dataz. i=A->datax. i;T->dataz.j=A->datax.j;T->dataz.e=A->datax.e;x+;z+;(T->dataz.i=B->datay.i;T->dataz.j=B->datay.j;T->dataz.e=0-B->datay.e;y+;z+;if(y>=B->tu)break;if(x<=A->tu)(w

9、hile(x<=A->tu)(T->dataz.i=A->datax.i;T->dataz.j=A->datax.j;T->dataz.e=A->datax.e;x+;z+;if(y<=B->tu)(while(y<=B->tu)T->dataz.i=B->datay.i;T->dataz.j=B->datay.j;T->dataz.e=0-B->datay.e;y+;z+;T->tu=z;Print(A,B,T);)int MUL(RLSMatrix *A,RLSMatrix *

10、B,RLSMatrix *T) /*乘法 */(int arow,ccol,tp,p,q,blow,t,i;int ctempMAXRC;if(A->nu!=B->mu) return 0;T->mu=A->mu;T->nu=B->nu;T->tu=0;if(A->tu*B->tu!=0)(for(arow=1;arow<=A->mu;+arow)(for(i=1;i<=T->nu;i+)ctempi=0;T->rposarow=T->tu+1;if(arow<A->mu) tp=A->

11、rposarow+1;elsetp=A->tu+1;for(p=A->rposarow;p<tp;+p)blow=A->datap.j;if(blow<B->mu)t=B->rposblow+1;elset=B->tu+1;for(q=B->rposblow;q<t;+q)ccol=B->dataq.j;ctempccol += A->datap.e*B->dataq.e;) /*for q*/ /* 求得Q中的crow( arow)行的非零元*/for(ccol=1;ccol<T->nu;+ccol)(

12、if(ctempccol)(if(+T->tu>MAXSIZE) return 0;T->dataT->tu.i=arow;T->dataT->tu.j=ccol;T->dataT->tu.e=ctempccol;Print(A,B,T);return 1;void Printt(RLSMatrix *A)/*打印矩陣 */(int row,col,i=1,k=0;for(row=1;row<=A->mu;row+)(for(col=1;col<=A->nu;col+)(if(A->datai.i=row&&

13、amp;A->datai.j=col&&i<=A->tu)printf("%-4d”,A->datai+.e);else printf("%-4d”,k);printf("n");)void Print(RLSMatrix *A,RLSMatrix *B,RLSMatrix *T) /*打印函數(shù)*/(clrscr();if(A->mu!=0) printf("Print Matrix A:n");Printt(A); printf("n");else printf(&q

14、uot;Matrix A is blank!n");if(B->tu!=0) printf("Print Matrix B:n");Printt(B); printf("n");else printf("Matrix B is blank!n");if(T->tu!=0) printf("Print Matrix T:n");Printt(T); printf("n");else printf("Matrix T is blank!n");getch()

15、;getch();void Enter(RLSMatrix *A,RLSMatrix *B,RLSMatrix *T)/*輸入函數(shù) */int i,k,numMAXRC;char cmd;clrscr();printf("Enter the mu and nu and tu of Matrix A(mu,nu,tu): n"); /*輸入矩陣 A*/scanf("%d,%d,%d”,&A->mu,&A->nu,&A->tu);while(A->mu<=0|A->mu>MAXR|A->nu<

16、;=0|A->nu>MAXC)printf("Enter the mu and nu and tu of Matrix A(mu,nu,tu): n");scanf("%d,%d,%d",&A->mu,&A->nu,&A->tu);printf("Enter the Matrix A(i-j:e):n");for(i=1;i<=A->tu;i+)scanf("%d-%d:%d”,&A->datai.i,&A->datai.j,&am

17、p;A->datai.e);for(i=1;i<=A->mu;i+)numi=0;for(i=1;i<=A->tu;i+)+numA->datai.i;A->rpos1=1;for(i=2;i<=A->mu;i+)A->rposi=A->rposi-1+numi-1;printf("Enter the mu and nu and tu of Matrix B(mu,nu,tu): n"); /*輸入矩陣 B*/scanf("%d,%d,%d”,&B->mu,&B->nu,

18、&B->tu);while(A->mu<=0|A->mu>MAXR|A->nu<=0|A->nu>MAXC)printf("Enter the mu and nu and tu of Matrix B(mu,nu,tu): n");scanf("%d,%d,%d",&B->mu,&B->nu,&B->tu);printf("Enter the Matrix B(i-j:e):n");for(i=1;i<=B->tu;i+

19、)scanf("%d-%d:%d”,&B->datai.i,&B->datai.j,&B->datai.e);for(i=1;i<=B->mu;i+)numi=0;for(i=1;i<=B->tu;i+)+numB->datai.i;B->rpos1=1;for(i=2;i<=B->mu;i+)B->rposi=B->rposi-1+numi-1;doprintf("Enter the operation you want:"); /*選擇需要的運算 */cmd=

20、getche();while(cmd!='+'&&cmd!='-'&&cmd!='*');getch();switch(cmd)case '+' : if(A->mu=B->mu&&A->nu=B->nu) ADD(A,B,T); break;case '-' : if(A->mu=B->mu&&A->nu=B->nu) SUB(A,B,T); break;case '*' : if(A-

21、>nu=B->mu)MUL(A,B,T); break;default : printf("No thia operation!"); break;void InitializationMatrix(RLSMatrix *A,RLSMatrix *B,RLSMatrix *T) /*初始化矩陣 */A->mu=A->nu=A->tu=0;B->mu=B->nu=B->tu=0;T->mu=T->nu=T->tu=0;/*主函數(shù) */void InitializationMatrix(RLSMatrix *A,

22、RLSMatrix *B,RLSMatrix *T);void Enter(RLSMatrix *A,RLSMatrix *B,RLSMatrix *T);void Print(RLSMatrix *A,RLSMatrix *B,RLSMatrix *T);void ADD(RLSMatrix *A,RLSMatrix *B,RLSMatrix *T);void SUB(RLSMatrix *A,RLSMatrix *B,RLSMatrix *T);int MUL(RLSMatrix *A,RLSMatrix *B,RLSMatrix *T);void Initialization();voi

23、d Myinformation();void Exit();void main()int i,k,numMAXRC;char cmd;分配空間*/RLSMatrix *A,*B,*T;A=( RLSMatrix *)malloc(sizeof( RLSMatrix); /*B=( RLSMatrix *)malloc(sizeof( RLSMatrix);T=( RLSMatrix *)malloc(sizeof( RLSMatrix);Myinformation();InitializationMatrix(A,B,T);while(1)Initialization();dogotoxy(1

24、0,10);printf("Enter E/e ,Q/q ,P/p to continue:");cmd=getche();printf("n");while(cmd!='q'&&cmd!='Q'&&cmd!='e'&&cmd!='E'&&cmd!='p'&&cmd!='P');switch(cmd)case 'q' : Exit(); break;case 

25、9;Q' : Exit(); break;case 'e' : Enter(A,B,T); break;case 'E' : Enter(A,B,T); break;case 'p' : Print(A,B,T); break;case 'P' : Print(A,B,T); break;void Initialization() /*初始化函數(shù) */clrscr();printf("*");gotoxy(7,2);printf("Enter the RLSMatrix-E");gotoxy(38,2);printf("Print-P");gotoxy(55,2);printf("Quit-Q");gotoxy(80,2);printf("*");printf("*");gotoxy(1,22);printf("*");gotoxy(10,23);printf("Enter a ope

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論