版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p><b> 數(shù)學(xué)與計算機學(xué)院</b></p><p><b> 課程設(shè)計說明書</b></p><p> 課 程 名 稱: 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計 </p><p> 課 程 代 碼: 8404181 </p><p> 題 目:
2、 稀疏矩陣應(yīng)用 </p><p> 年級/專業(yè)/班: </p><p> 學(xué) 生 姓 名: </p><p> 學(xué) 號: </p><p> 開 始 時 間: 2011 年 06 月 13 日&l
3、t;/p><p> 完 成 時 間: 2011 年 06 月 21 日</p><p><b> 課程設(shè)計成績:</b></p><p> 指導(dǎo)教師簽名: 年 月 日</p><p><b> 目 錄</b></p><
4、p><b> 1 引 言1</b></p><p> 1.1 問題的提出1</p><p> 1.2國內(nèi)外研究的現(xiàn)狀1</p><p> 1.3任務(wù)與分析 1</p><p> 2 程序的主要功能1</p><p> 2.1三元組的轉(zhuǎn)置1</p>&l
5、t;p> 2.2三元組的加法1</p><p> 2.3三元組的減法1</p><p> 2.4三元組的乘法2</p><p> 2.5十字鏈表的轉(zhuǎn)置2</p><p> 2.6十字鏈表的加法2</p><p> 2.7十字鏈表的減法2</p><p> 2.8十
6、字鏈表的乘法2</p><p><b> 3程序運行平臺3</b></p><p><b> 4總體設(shè)計3</b></p><p><b> 5程序類的說明4</b></p><p><b> 6 模塊分析5</b></p>
7、<p> 6.1 三元組的轉(zhuǎn)置5</p><p> 6.2 三元組減法6</p><p> 6.3三元組的減法9</p><p> 6.4三元組的乘法12</p><p> 6.5 十字鏈表的轉(zhuǎn)置14</p><p> 6.6 十字鏈表的加法15</p><p&g
8、t; 6.7十字鏈表的減法18</p><p> 6.8十字鏈表的乘法22</p><p><b> 7 系統(tǒng)測試25</b></p><p> 7.1三元組的轉(zhuǎn)置25</p><p> 7.2 三元組的加法26</p><p> 7.3 三元組的減法26</p>
9、;<p> 7.4 三元組的乘法27</p><p> 7.5 十字鏈表的轉(zhuǎn)置27</p><p> 7.6十字鏈表的加法28</p><p> 7.7 十字鏈表的減法28</p><p> 7.8 十字鏈表的乘法29</p><p><b> 7.9 總結(jié)29</
10、b></p><p><b> 8結(jié)論29</b></p><p><b> 參考文獻29</b></p><p><b> 摘 要 </b></p><p> 隨著計算機的普及,一句話引出題目…(小四楷體_GB2312),分析了三元組和十字鏈表的存儲和各
11、種運算的實現(xiàn),利用C語言編程實現(xiàn)了稀疏矩陣的運算系統(tǒng),該系統(tǒng)具有三元組十字鏈表存儲下的稀疏矩陣轉(zhuǎn)置、加法、減法、乘法的功能。</p><p> 關(guān)鍵詞:稀疏矩陣;計算機; 運算器</p><p><b> 1 引 言 </b></p><p> 1.1 問題的提出 </p><p> 矩陣是很多科學(xué)與工程計算問
12、題中研究的數(shù)學(xué)對象。因此,我們感興趣的不是矩陣本身,而是如何存儲矩陣的元,從而使矩陣的各種運算能有效地進行。</p><p> 通常,用高級語言編制程序時,都是用二維數(shù)組來存儲矩陣元,有的程序設(shè)計語言中還提供了各種矩陣運算,用戶使用時很方便。</p><p> 然而,在數(shù)值分析中,經(jīng)常出現(xiàn)一些階數(shù)很高的矩陣,同時在矩陣中有許多值相同的元素或者是零元素,有時為了節(jié)省存儲空間,可以對這類矩
13、陣進行壓縮存儲。所謂壓縮存儲,就是指:為多個值相同的元只分配一個存儲空間;對零元不分配空間。</p><p> 1.2國內(nèi)外研究的現(xiàn)狀 </p><p> 目前已經(jīng)可以用于人臉識別、子空間方法預(yù)處理技術(shù)稀疏近似逆按模最小特征值修正矩陣廣義極小殘余方法等方面。</p><p> 1.3任務(wù)與分析 </p><p> (1)給出算法并編
14、程實現(xiàn);</p><p> ?。?)任給實例并演示求解結(jié)果;</p><p> (3)給出時間復(fù)雜度分析;</p><p> ?。?)結(jié)合所完成題目,分析總結(jié)各算法所使用的算法設(shè)計技術(shù),以及相應(yīng)技術(shù)的基本思想。</p><p><b> 2 程序的主要功能</b></p><p><b&
15、gt; 2.1三元組的轉(zhuǎn)置</b></p><p> 將一個按三元組存儲的稀疏矩陣進行轉(zhuǎn)置。</p><p><b> 2.2三元組的加法</b></p><p> 將兩個按三元組存儲的稀疏矩陣進行相加并得出結(jié)果。</p><p><b> 2.3三元組的減法</b></
16、p><p> 將兩個按三元組存儲的稀疏矩陣進行相減并得出結(jié)果。</p><p><b> 2.4三元組的乘法</b></p><p> 將兩個按三元組存儲的稀疏矩陣進行相乘并得出結(jié)果。</p><p> 2.5十字鏈表的轉(zhuǎn)置</p><p> 將一個按十字鏈表存儲的稀疏矩陣進行轉(zhuǎn)置。<
17、/p><p> 2.6十字鏈表的加法</p><p> 將兩個按十字鏈表存儲的稀疏矩陣進行相加并得出結(jié)果。</p><p> 2.7十字鏈表的減法</p><p> 將兩個按十字鏈表存儲的稀疏矩陣進行相加并得出結(jié)果。</p><p> 2.8十字鏈表的乘法</p><p> 將兩個按十字
18、鏈表存儲的稀疏矩陣進行相加并得出結(jié)果。</p><p><b> 3程序運行平臺</b></p><p> VC++6.0。編譯,鏈接,執(zhí)行。</p><p><b> 4總體設(shè)計</b></p><p> 圖4.1 系統(tǒng)總體框架圖</p><p><b>
19、 5程序類的說明</b></p><p> OLNode結(jié)構(gòu)聲明</p><p> typedef struct OLNode</p><p><b> {</b></p><p><b> int i,j;</b></p><p><b>
20、 int e;</b></p><p> struct OLNode *right,*down;</p><p> }OLNode,*OLink;</p><p> Crosslist結(jié)構(gòu)的聲明</p><p> typedef struct </p><p><b> {</b&
21、gt;</p><p> int mu,nu,tu;</p><p> OLink *rhead,*chead;</p><p> }CrossList;</p><p> Triple結(jié)構(gòu)的聲明</p><p> typedef struct</p><p><b> {
22、</b></p><p><b> int i,j;</b></p><p><b> int e;</b></p><p><b> }Triple;</b></p><p> TSMatrix結(jié)構(gòu)的聲明</p><p> typ
23、edef struct</p><p><b> {</b></p><p> Triple data[maxsize];</p><p> int rpos[maxsize+1]; </p><p> int nu,mu,tu;</p><p> }TSMatrix;</p>
24、;<p><b> 6 模塊分析</b></p><p> 6.1 三元組的轉(zhuǎn)置</p><p> 將一個按三元組存儲的稀疏矩陣進行轉(zhuǎn)置(非快速轉(zhuǎn)置)。</p><p> void TransposeSMatrix(TSMatrix M,TSMatrix &T)//三元組的轉(zhuǎn)置</p><p&g
25、t;<b> {</b></p><p> T.nu=M.mu;</p><p> T.mu=M.nu;</p><p> T.tu=M.tu;</p><p><b> int q=1;</b></p><p> for(int col=1;col<=M.
26、nu;col++)</p><p> for(int p=1;p<=M.tu;p++)</p><p> if(M.data[p].j==col)</p><p><b> {</b></p><p> T.data[q].i=M.data[p].j;</p><p> T.dat
27、a[q].j=M.data[p].i;</p><p> T.data[q].e=M.data[p].e;</p><p><b> q++;</b></p><p><b> }</b></p><p><b> }</b></p><p>
28、 int Compare(int a1,int b1,int a2,int b2)</p><p><b> {</b></p><p> if(a1>a2)return 1;</p><p> else if(a1<a2)</p><p> return -1;</p><p&g
29、t; else if(b1>b2)</p><p><b> return 1;</b></p><p><b> if(b1<b2)</b></p><p> return -1;</p><p><b> else</b></p><
30、;p><b> return 0;</b></p><p><b> }</b></p><p><b> 6.2 三元組減法</b></p><p> 用戶再輸入一個稀疏矩陣,系統(tǒng)將兩個矩陣進行加運算并得出結(jié)果。</p><p> void AddTMatix
31、(TSMatrix M,TSMatrix T,TSMatrix &S)//三元組相加</p><p><b> {</b></p><p> S.mu=M.mu>T.mu?M.mu:T.mu;</p><p> S.nu=M.nu>T.nu?M.nu:T.nu;</p><p><b>
32、; S.tu=0;</b></p><p><b> int ce;</b></p><p> int q=1;int mcount=1,tcount=1;</p><p> while(mcount<=M.tu&&tcount<=T.tu)</p><p><b&g
33、t; {</b></p><p> switch(Compare(M.data[mcount].i,M.data[mcount].j,T.data[tcount].i,T.data[tcount].j))</p><p><b> {</b></p><p><b> case -1: </b><
34、/p><p> S.data[q].e=M.data[mcount].e;</p><p> S.data[q].i=M.data[mcount].i;</p><p> S.data[q].j=M.data[mcount].j;</p><p><b> q++;</b></p><p>
35、 mcount++; </p><p><b> break;</b></p><p><b> case 1: </b></p><p> S.data[q].e=T.data[tcount].e;</p><p> S.data[q].i=T.data[tcount].i;</p&
36、gt;<p> S.data[q].j=T.data[tcount].j;</p><p><b> q++;</b></p><p> tcount++; </p><p><b> break;</b></p><p><b> case 0: </b&g
37、t;</p><p> ce=M.data[mcount].e+T.data[tcount].e;</p><p><b> if(ce)</b></p><p><b> {</b></p><p> S.data[q].e=ce;</p><p> S.data
38、[q].i=M.data[mcount].i;</p><p> S.data[q].j=M.data[mcount].j;</p><p><b> q++;</b></p><p><b> mcount++;</b></p><p><b> tcount++;</b&
39、gt;</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p><b> mcount++;</b></p><p><b> tc
40、ount++;</b></p><p><b> }</b></p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p> whi
41、le(mcount<=M.tu)</p><p><b> {</b></p><p> S.data[q].e=M.data[mcount].e;</p><p> S.data[q].i=M.data[mcount].i;</p><p> S.data[q].j=M.data[mcount].j;&l
42、t;/p><p><b> q++;</b></p><p><b> mcount++;</b></p><p><b> }</b></p><p> while(tcount<=M.tu)</p><p><b> {<
43、/b></p><p> S.data[q].e=T.data[tcount].e;</p><p> S.data[q].i=T.data[tcount].i;</p><p> S.data[q].j=T.data[tcount].j;</p><p><b> q++;</b></p>
44、<p> tcount++; </p><p><b> }</b></p><p><b> S.tu=q-1;</b></p><p><b> }…</b></p><p><b> 6.3三元組的減法</b></p>
45、<p> 用戶再輸入一個稀疏矩陣,系統(tǒng)將兩個矩陣進行加運、減算并得出結(jié)果。</p><p> void jianTMatix(TSMatrix M,TSMatrix T,TSMatrix &S)//三元組相減</p><p><b> {</b></p><p> S.mu=M.mu>T.mu?M.mu:T.
46、mu;</p><p> S.nu=M.nu>T.nu?M.nu:T.nu;</p><p><b> S.tu=0;</b></p><p><b> int ce;</b></p><p> int q=1;int mcount=1,tcount=1;</p><
47、;p> while(mcount<=M.tu&&tcount<=T.tu)</p><p><b> {</b></p><p> switch(Compare(M.data[mcount].i,M.data[mcount].j,T.data[tcount].i,T.data[tcount].j))</p><
48、;p><b> {</b></p><p><b> case -1: </b></p><p> S.data[q].e=M.data[mcount].e;</p><p> S.data[q].i=M.data[mcount].i;</p><p> S.data[q].j=M.
49、data[mcount].j;</p><p><b> q++;</b></p><p> mcount++; </p><p><b> break;</b></p><p><b> case 1: </b></p><p> S.dat
50、a[q].e=-T.data[tcount].e;</p><p> S.data[q].i=T.data[tcount].i;</p><p> S.data[q].j=T.data[tcount].j;</p><p><b> q++;</b></p><p> tcount++; </p>
51、<p><b> break;</b></p><p><b> case 0: </b></p><p> ce=M.data[mcount].e-T.data[tcount].e;</p><p><b> if(ce)</b></p><p><b
52、> {</b></p><p> S.data[q].e=ce;</p><p> S.data[q].i=M.data[mcount].i;</p><p> S.data[q].j=M.data[mcount].j;</p><p><b> q++;</b></p><
53、;p><b> mcount++;</b></p><p><b> tcount++;</b></p><p><b> }</b></p><p><b> else</b></p><p><b> {</b>&
54、lt;/p><p><b> mcount++;</b></p><p><b> tcount++;</b></p><p><b> }</b></p><p><b> break;</b></p><p><b&g
55、t; }</b></p><p><b> }</b></p><p> while(mcount<=M.tu)</p><p><b> {</b></p><p> S.data[q].e=M.data[mcount].e;</p><p>
56、 S.data[q].i=M.data[mcount].i;</p><p> S.data[q].j=M.data[mcount].j;</p><p><b> q++;</b></p><p><b> mcount++;</b></p><p><b> }</b&g
57、t;</p><p> while(tcount<=M.tu)</p><p><b> {</b></p><p> S.data[q].e=-T.data[tcount].e;</p><p> S.data[q].i=T.data[tcount].i;</p><p> S.
58、data[q].j=T.data[tcount].j;</p><p><b> q++;</b></p><p> tcount++; </p><p><b> }</b></p><p><b> S.tu=q-1;</b></p><p>
59、;<b> }</b></p><p><b> 6.4三元組的乘法</b></p><p> 用戶再輸入一個稀疏矩陣,系統(tǒng)將其進行乘法運算并得出結(jié)果。</p><p> int MultSMatrix(TSMatrix M, TSMatrix N, TSMatrix &Q) //三元組相乘</p&
60、gt;<p><b> {</b></p><p> int arow,brow,ccol,i,t,ctemp[100],p,q,tp;</p><p> if(M.nu != N.mu) </p><p><b> return 0;</b></p><p> Q.mu=M
61、.mu;</p><p> Q.nu =N.nu;</p><p><b> Q.tu =0;</b></p><p> if(M.tu*N.tu!=0)</p><p><b> {</b></p><p> for(arow=1;arow<=M.mu;++
62、arow)</p><p><b> {</b></p><p> for(i=0;i<=N.nu;++i) </p><p> ctemp[i]=0;</p><p> Q.rpos[arow]=Q.tu+1;</p><p> if(arow<M.mu) </p&g
63、t;<p> tp=M.rpos[arow+1];</p><p><b> else </b></p><p> tp=M.tu+1;</p><p> for(p=M.rpos[arow];p<tp;++p)</p><p><b> {</b></p>
64、<p> brow=M.data[p].j; </p><p> if(brow<N.mu) </p><p> t=N.rpos[brow+1];</p><p><b> else </b></p><p><b> t=N.tu+1;</b></p>
65、<p> for(q=N.rpos[brow];q<t ++q)</p><p><b> {</b></p><p> ccol=N.data[q].j; </p><p> ctemp[ccol]+=M.data[p].e*N.data[q].e;</p><p><b> }&
66、lt;/b></p><p><b> }</b></p><p> for(ccol=1;ccol<=Q.nu;++ccol) </p><p><b> {</b></p><p> if(ctemp[ccol])</p><p><b>
67、 {</b></p><p> if(++(Q.tu)>maxsize) </p><p><b> return 1;</b></p><p> Q.data[Q.tu].i=arow,Q.data[Q.tu].j=ccol,Q.data[Q.tu].e=ctemp[ccol]; </p><p&g
68、t;<b> } </b></p><p><b> }</b></p><p><b> } </b></p><p><b> }</b></p><p><b> return 1;</b></p>&l
69、t;p><b> }</b></p><p> 6.5 十字鏈表的轉(zhuǎn)置</p><p> void TurnSMatrix_OL(CrossList &M) //十字鏈表轉(zhuǎn)置</p><p><b> {</b></p><p> int col,row;</p&g
70、t;<p> OLink p,q;</p><p> for(col=1;col<=M.mu;col++)</p><p><b> {</b></p><p> q=p=M.rhead[col];</p><p><b> while(q)</b></p>
71、<p><b> {</b></p><p><b> row=p->i;</b></p><p> p->i=p->j;</p><p><b> p->j=row;</b></p><p> q=p->right;<
72、;/p><p> p->right=p->down;</p><p> p->down=q;</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p>
73、<p> 6.6 十字鏈表的加法</p><p> int SMatrix_ADD(CrossList *A,CrossList *B) //十字鏈表相加</p><p><b> {</b></p><p> OLNode *pa,*pb,*pre,*p,*cp[100];</p><p> i
74、nt i,j,t;</p><p> t=A->tu+B->tu;</p><p> for(j=1;j<=A->nu;j++)</p><p> cp[j]=A->chead[j];</p><p> for(i=1;i<=A->mu;i++)</p><p><
75、;b> {</b></p><p> pa=A->rhead[i];</p><p> pb=B->rhead[i];</p><p><b> pre=NULL;</b></p><p><b> while(pb)</b></p><p
76、><b> {</b></p><p> if(pa==NULL||pa->j>pb->j)</p><p><b> {</b></p><p> p=(OLink)malloc(sizeof(OLNode));</p><p><b> if(!pre
77、)</b></p><p> A->rhead[i]=p;</p><p><b> else</b></p><p> pre->right=p;</p><p> p->right=pa;</p><p><b> pre=p;</b&g
78、t;</p><p><b> p->i=i;</b></p><p> p->j=pb->j;</p><p> p->e=pb->e;</p><p> if(!A->chead[p->j])</p><p><b> {</
79、b></p><p> A->chead[p->j]=cp[p->j]=p;</p><p> p->down=NULL;</p><p><b> }</b></p><p><b> else</b></p><p><b>
80、; {</b></p><p> cp[p->j]->down=p;</p><p> cp[p->j]=p;</p><p><b> }</b></p><p> pb=pb->right;</p><p><b> }</b&g
81、t;</p><p> else if(pa->j<pb->j)</p><p><b> {</b></p><p><b> pre=pa;</b></p><p> pa=pa->right;</p><p><b> }&l
82、t;/b></p><p> else if(pa->e+pb->e)</p><p><b> {</b></p><p><b> t--;</b></p><p> pa->e+=pb->e;</p><p><b>
83、pre=pa;</b></p><p> pa=pa->right;</p><p> pb=pb->right;</p><p><b> }</b></p><p><b> else</b></p><p><b> { &l
84、t;/b></p><p><b> t=t-2;</b></p><p><b> if(!pre)</b></p><p> A->rhead[i]=pa->right;</p><p><b> else</b></p><p
85、> pre->right=pa->right;</p><p><b> p=pa;</b></p><p> pa=pa->right;</p><p> if(A->chead[p->j]==p)</p><p> A->chead[p->j]=cp[p-&g
86、t;j]=p->down;</p><p><b> else </b></p><p> cp[p->j]->down=p->down;</p><p><b> free(p);</b></p><p> pb=pb->right;</p>&
87、lt;p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> A->mu=A->mu>B->mu?A->mu:B->mu;</p><p> A->nu=A
88、->nu>B->nu?A->nu:B->nu;</p><p><b> return 1;</b></p><p><b> }</b></p><p> 6.7十字鏈表的減法</p><p> int SMatrix_jian(CrossList *A,Cr
89、ossList *B) //十字鏈表相減</p><p><b> {</b></p><p> OLNode *pa,*pb,*pre,*p,*cp[100];</p><p> int i,j,t;</p><p> t=A->tu+B->tu;</p><p> f
90、or(j=1;j<=A->nu;j++)</p><p> cp[j]=A->chead[j];</p><p> for(i=1;i<=A->mu;i++)</p><p><b> {</b></p><p> pa=A->rhead[i];</p><
91、p> pb=B->rhead[i];</p><p><b> pre=NULL;</b></p><p><b> while(pb)</b></p><p><b> {</b></p><p> if(pa==NULL||pa->j>pb
92、->j)</p><p><b> {</b></p><p> p=(OLink)malloc(sizeof(OLNode));</p><p><b> if(!pre)</b></p><p> A->rhead[i]=p;</p><p><
93、b> else</b></p><p> pre->right=p;</p><p> p->right=pa;</p><p><b> pre=p;</b></p><p><b> p->i=i;</b></p><p>
94、 p->j=pb->j;</p><p> p->e=-pb->e;</p><p> if(!A->chead[p->j])</p><p><b> {</b></p><p> A->chead[p->j]=cp[p->j]=p;</p>
95、<p> p->down=NULL;</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> cp[p->j]->down=p;</p><
96、;p> cp[p->j]=p;</p><p><b> }</b></p><p> pb=pb->right;</p><p><b> }</b></p><p> else if(pa->j<pb->j)</p><p>
97、<b> {</b></p><p><b> pre=pa;</b></p><p> pa=pa->right;</p><p><b> }</b></p><p> else if(pa->e-pb->e)</p><p&
98、gt;<b> {</b></p><p><b> t--;</b></p><p> pa->e-=pb->e;</p><p><b> pre=pa;</b></p><p> pa=pa->right;</p><p&g
99、t; pb=pb->right;</p><p><b> }</b></p><p><b> else</b></p><p><b> { </b></p><p><b> t=t-2;</b></p><p&g
100、t;<b> if(!pre)</b></p><p> A->rhead[i]=pa->right;</p><p><b> else</b></p><p> pre->right=pa->right;</p><p><b> p=pa;</
101、b></p><p> pa=pa->right;</p><p> if(A->chead[p->j]==p)</p><p> A->chead[p->j]=cp[p->j]=p->down;</p><p><b> else </b></p>
102、<p> cp[p->j]->down=p->down;</p><p><b> free(p);</b></p><p> pb=pb->right;</p><p><b> }</b></p><p><b> }</b>&l
103、t;/p><p><b> }</b></p><p> A->mu=A->mu>B->mu?A->mu:B->mu;</p><p> A->nu=A->nu>B->nu?A->nu:B->nu;</p><p><b> retur
104、n 1;</b></p><p><b> }</b></p><p> 6.8十字鏈表的乘法</p><p> int MultSMatrix_OL(CrossList M, CrossList N, CrossList &Q) //十字鏈表相乘</p><p><b> {&l
105、t;/b></p><p> int i, j, e; </p><p> OLink p0, q0, p, pl, pla; </p><p> if(M.nu!=N.mu)//檢查稀疏矩陣M的列數(shù)和N的行數(shù)是否對應(yīng)相等</p><p><b> {</b></p><p> p
106、rintf( "稀疏矩陣A的列數(shù)和B的行數(shù)不相等,不能相乘。\n" );</p><p> return 0; </p><p><b> }</b></p><p> Q.mu=M.mu;</p><p> Q.nu=N.nu;</p><p><b>
107、Q.tu=0;</b></p><p> if(!(Q.rhead=(OLink*)malloc((Q.mu+1)*sizeof(OLink))))</p><p><b> exit(-2);</b></p><p> if(!(Q.chead=(OLink*)malloc((Q.nu+1)*sizeof(OLink))))
108、 </p><p><b> exit(-2);</b></p><p> for(i=1;i<=Q.mu;i++)</p><p> Q.rhead[i] = NULL;</p><p> for(i=1;i<=Q.nu;i++) </p><p> Q.chead[i]=
109、NULL;</p><p> for(i=1;i<=Q.mu;i++) //相乘</p><p> for(j=1;j<=Q.nu;j++)</p><p><b> {</b></p><p> p0 = M.rhead[i];</p><p> q0 = N.c
110、head[j];</p><p><b> e = 0;</b></p><p> while(p0&&q0)//M第i行和N第j列有元素</p><p><b> {</b></p><p> if( p0->j > q0->i) </p>
111、<p> q0 = q0->down; //M的列大于N的行,則N的列指針后移</p><p> else if(p0->j < q0->i) </p><p> p0 = p0->right;//M的列小于N的行,則M的行指針右移</p><p> else //M的行等于N的列</p><p&g
112、t;<b> {</b></p><p> e += p0->e * q0->e; //乘積累加</p><p> q0 = q0->down, p0 = p0->right;//移動指針</p><p><b> }</b></p><p><b> }
113、</b></p><p> if(e)//乘積不為0</p><p><b> {</b></p><p> if(!(p = (OLink)malloc(sizeof(OLNode)))) </p><p><b> exit(-2);</b></p><p
114、> Q.tu++;//非零元素增加</p><p><b> p->i=i;</b></p><p><b> p->j=j;</b></p><p><b> p->e=e;</b></p><p> p->right=NULL;<
115、;/p><p> p->down=NULL;//賦值,指針后移,將p插入十字鏈表 行插入</p><p> if(Q.rhead[i]==NULL) //若p為該行的第1個結(jié)點</p><p> Q.rhead[i]=p =p; //p插在該行的表頭且pl指向p(該行的最后一個結(jié)點)</p><p><b> else
116、</b></p><p> pl->right=p,pl=p; //插在pl所指結(jié)點之后,pl右移 列插入</p><p> if(Q.chead[j] == NULL) //若p為該列的第一個結(jié)點</p><p> Q.chead[j] = p; //該列的表頭指向p</p><p><b> else
117、</b></p><p><b> {</b></p><p><b> //插在列表尾</b></p><p> pla = Q.chead[j];//pla指向j行的第1個結(jié)點</p><p> while(pla->down)</p><p>
118、 pla = pla->down;//pla指向j行最后一個結(jié)點</p><p> pla->down = p; </p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p>&l
119、t;p><b> return 1;</b></p><p><b> }</b></p><p><b> 7 系統(tǒng)測試</b></p><p> 首先進入VC++6.0,打開“稀疏矩陣應(yīng)用.cpp”,編譯后執(zhí)行文件,按系統(tǒng)提示操作。</p><p><b
120、> 7.1三元組的轉(zhuǎn)置</b></p><p> 三元組的轉(zhuǎn)置,實現(xiàn)。</p><p> 7.2 三元組的加法</p><p> 三元組的加法,實現(xiàn)。</p><p> 7.3 三元組的減法</p><p> 三元組的減法,實現(xiàn)。</p><p> 7.4 三元組
121、的乘法</p><p> 三元組的乘法,實現(xiàn)。</p><p> 7.5 十字鏈表的轉(zhuǎn)置</p><p> 十字鏈表的轉(zhuǎn)置,實現(xiàn)。</p><p> 7.6十字鏈表的加法</p><p> 十字鏈表的加法,實現(xiàn)。</p><p> 7.7 十字鏈表的減法</p><
122、;p> 十字鏈表的減法,實現(xiàn)。</p><p> 7.8 十字鏈表的乘法</p><p> 十字鏈表的乘法,實現(xiàn)。</p><p><b> 7.9總結(jié)</b></p><p> 通過上述測試,本系統(tǒng)實現(xiàn)了三元組和十字鏈表的轉(zhuǎn)置、加、減、乘功能,且實現(xiàn)各個功能的時間復(fù)雜度均為 n平方。</p>
123、<p><b> 8結(jié)論</b></p><p> 通過上述測試,本系統(tǒng)用C語言在VC++6.0的平臺上進行編程,實現(xiàn)了三元組和十字鏈表的轉(zhuǎn)置、加、減、乘功能。</p><p> 在進行稀疏矩陣的相加時,用十字鏈表更方便;進行相乘時,用三元組更方便。</p><p><b> 參考文獻</b><
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 稀疏矩陣的運算課程設(shè)計
- 稀疏矩陣的運算課程設(shè)計
- 稀疏矩陣相乘課程設(shè)計報告
- 數(shù)據(jù)結(jié)構(gòu)--稀疏矩陣課程設(shè)計
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計---稀疏矩陣
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計-稀疏矩陣實現(xiàn)與應(yīng)用
- 數(shù)據(jù)結(jié)構(gòu)與課程設(shè)計---稀疏矩陣
- 課程設(shè)計---稀疏矩陣加法運算器
- 稀疏矩陣的轉(zhuǎn)置課程設(shè)計報告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計-- 稀疏矩陣的運算
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--稀疏矩陣的操作
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--稀疏矩陣運算器
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計論文----稀疏矩陣的轉(zhuǎn)置
- 《數(shù)據(jù)結(jié)構(gòu)》課程設(shè)計報告--稀疏矩陣運算器
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告--稀疏矩陣運算器
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告 稀疏矩陣運算器
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告 稀疏矩陣運算器設(shè)計
- 稀疏矩陣的轉(zhuǎn)置論文-數(shù)據(jù)結(jié)構(gòu)課程設(shè)計論文
- 課程設(shè)計報告—稀疏矩陣的完全鏈表表示及其運算
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--基本稀疏矩陣運算的運算器
評論
0/150
提交評論