




免費(fèi)預(yù)覽已結(jié)束,剩余1頁(yè)可下載查看
下載本文檔
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
實(shí)驗(yàn)五 數(shù)組的運(yùn)算實(shí)驗(yàn)?zāi)康模?掌握稀疏矩陣的壓縮存儲(chǔ)方法及主要運(yùn)算的實(shí)現(xiàn)。實(shí)驗(yàn)內(nèi)容與要求:設(shè)計(jì)一個(gè)稀疏矩陣計(jì)算器,要求能夠:輸入并建立稀疏矩陣;輸出稀疏矩陣;執(zhí)行兩個(gè)矩陣相加;求一個(gè)矩陣的轉(zhuǎn)置矩陣。程序代碼:#include#define smax 20typedef int datatype; typedef struct int i,j; datatype v; node;typedef struct node datasmax; int m,n,t; spmatrix;void creat(spmatrix a)創(chuàng)建輸出稀疏矩陣 int k=0; printf(請(qǐng)輸入稀疏矩陣:n); scanf(%d,%d,%d,&a.m,&a.n,&a.t); scanf(%d,%d,%d,&a.data0.i,&a.data0.j,&a.data0.v); while(a.datak.v!=0)以0元素作為結(jié)束標(biāo)志,因?yàn)橄∈杈仃嚥话?元素 k+; scanf(%d,%d,%d,&a.datak.i,&a.datak.j,&a.datak.v); printf(輸出的稀疏矩陣是:n); printf(%d,%d,%dn,a.m,a.n,a.t); for(k=0;ka.t;k+)一維數(shù)組思想,用for循環(huán)簡(jiǎn)單 printf(%d,%d,%dn,a.datak.i,a.datak.j,a.datak.v); printf(n);void transpose(spmatrix a)轉(zhuǎn)置函數(shù) int p,q,k=0; printf(請(qǐng)輸入稀疏矩陣:n); scanf(%d,%d,%d,&a.m,&a.n,&a.t); scanf(%d,%d,%d,&a.data0.i,&a.data0.j,&a.data0.v); while(a.datak.v!=0) k+; scanf(%d,%d,%d,&a.datak.i,&a.datak.j,&a.datak.v); for(k=0;ka.t;k+)行列交換即可,但沒(méi)有進(jìn)行排序輸出 p=a.datak.i;a.datak.i=a.datak.j;a.datak.j=p; printf(輸出轉(zhuǎn)置后的初步矩陣元素:n); for(k=0;ka.t;k+) printf(%d,%d,%dn,a.datak.i,a.datak.j,a.datak.v); for(p=0;pa.t;p+)冒泡排序法,對(duì)轉(zhuǎn)置后的稀疏矩陣進(jìn)行重新排序 for(k=0;ka.datak+1.i | (a.datak.i=a.datak+1.i & a.datak.ja.datak+1.j) q=a.datak.i;a.datak.i=a.datak+1.i;a.datak+1.i=q; q=a.datak.j;a.datak.j=a.datak+1.j;a.datak+1.j=q; q=a.datak.v;a.datak.v=a.datak+1.v;a.datak+1.v=q; printf(輸出轉(zhuǎn)置后的稀疏矩陣:n); printf(%d,%d,%dn,a.n,a.m,a.t); for(k=1;k(a.t+1);k+)此處下標(biāo)加1是根據(jù)輸出結(jié)果判定而來(lái),不知道原因 printf(%d,%d,%dn,a.datak.i,a.datak.j,a.datak.v); printf(n);void add(spmatrix a,spmatrix b)求和函數(shù)spmatrix c; int x=0,y=0,z=0; int p,q,r=0; printf(請(qǐng)輸入稀疏矩陣a:n); scanf(%d,%d,%d,&a.m,&a.n,&a.t); scanf(%d,%d,%d,&a.data0.i,&a.data0.j,&a.data0.v); while(a.datax.v!=0) x+; scanf(%d,%d,%d,&a.datax.i,&a.datax.j,&a.datax.v); printf(請(qǐng)輸入稀疏矩陣b:n); scanf(%d,%d,%d,&b.m,&b.n,&b.t); scanf(%d,%d,%d,&b.data0.i,&b.data0.j,&b.data0.v); while(a.datay.v!=0) y+; scanf(%d,%d,%d,&b.datay.i,&b.datay.j,&b.datay.v); 以上為重新創(chuàng)建兩個(gè)稀疏矩陣,方便運(yùn)算 if(a.m=b.m & a.n=b.n)首先行列相等的稀疏矩陣才能相加 for(x=0;xa.t;x+) c.dataz.i=a.datax.i; c.dataz.j=a.datax.j; c.dataz.v=a.datax.v; z+; for(y=0;ya.t;y+) c.dataz.i=b.datay.i; c.dataz.j=b.datay.j; c.dataz.v=b.datay.v; z+; 兩個(gè)for循環(huán)先后把a(bǔ),b兩個(gè)稀疏矩陣元素放到一個(gè)新的稀疏矩陣c里去 printf(輸出結(jié)合后的初步稀疏矩陣C的元素:n);進(jìn)行一次打印 for(z=0;z(a.t+b.t);z+) printf(%d,%d,%dn,c.dataz.i,c.dataz.j,c.dataz.v); for(p=0;p(a.t+b.t);p+)冒泡排序法對(duì)新矩陣元素排序 for(z=0;zc.dataz+1.i | (c.dataz.i=c.dataz+1.i & c.dataz.jc.dataz+1.j)有這幾種情況需要重新排序,首先是進(jìn)行行對(duì)比(前行大于后行進(jìn)行交換),然后當(dāng)行相等時(shí)在進(jìn)行列對(duì)比(前列大于后列時(shí)在進(jìn)行交換),其他情況均不用交換 q=c.dataz.i;c.dataz.i=c.dataz+1.i;c.dataz+1.i=q; q=c.dataz.j;c.dataz.j=c.dataz+1.j;c.dataz+1.j=q; q=c.dataz.v;c.dataz.v=c.dataz+1.v;c.dataz+1.v=q; printf(輸出排序后的稀疏矩陣C的元素:n);進(jìn)行一次打印 for(z=1;z(a.t+b.t+1);z+) printf(%d,%d,%dn,c.dataz.i,c.dataz.j,c.dataz.v); for(z=1;z(a.t+b.t+1-r);z+)主循環(huán),保證閱讀每一個(gè)數(shù)組元素 if(c.dataz.i=c.dataz+1.i & c.dataz.j=c.dataz+1.j) 在對(duì)排好序后的矩陣進(jìn)行相等行列元素的合并 c.dataz.v=c.dataz.v+c.dataz+1.v; r+;此處是關(guān)鍵,記錄此時(shí)的步驟,如果進(jìn)行一次運(yùn)算后,那么后面的循環(huán)就要少一次,包括再回到主循環(huán)時(shí)也要少一次 for(z+1;(z+1)(a.t+b.t+1-r);z+)小循環(huán)是讓后面的每一個(gè)數(shù)組元素向前移動(dòng)一個(gè)位置,掩蓋掉相等行列元素 c.dataz+1.i=c.dataz+2.i; c.dataz+1.j=c.dataz+2.j; c.dataz+1.v=c.dataz+2.j; printf(輸出最終結(jié)果的稀疏矩陣C:n); printf(%d,%d,%dn,a.m,a.n,(a.t+b.t-r);輸出稀疏矩陣表頭時(shí)只需將行列元素交換輸出即可,元素個(gè)數(shù)輸出時(shí)要注意相等行列元素合并進(jìn)行了幾次操作,即用r記錄操作步驟的次數(shù),每進(jìn)行一次操作那么最終稀疏矩陣就少一個(gè)數(shù)組元素,同時(shí)r又是伴隨步驟增加的 for(z=1;z(a.t+b.t+1-r);z+)原理同上 printf(%d,%d,%dn,c.dataz.i,c.dataz.j,c.dataz.v); Else給出稀疏矩陣表開(kāi)頭行列總和不等時(shí)則無(wú)法計(jì)算 printf(輸入的稀疏矩陣a,b不是行列相等的矩陣。n);void main()主函數(shù)spmatrix a,b; creat(a); transpose(a); add(a,b);心得體會(huì):程序開(kāi)頭老
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 江蘇省徐州市鼓樓區(qū)東苑中學(xué) 2024-2025學(xué)年八年級(jí)3月月考道德與法治試題(原卷版+解析版)
- 教科版六年級(jí)科學(xué)上冊(cè)教學(xué)計(jì)劃(含進(jìn)度表)
- 關(guān)于電子報(bào)刊制作的一些個(gè)人看法
- 2025年黨政領(lǐng)導(dǎo)干部黨章黨規(guī)黨紀(jì)黨史知識(shí)培訓(xùn)考試題庫(kù)及答案(共220題)
- 未開(kāi)窗通風(fēng)檢討書(shū)
- 別墅裝修合同專(zhuān)用版
- 項(xiàng)目執(zhí)行過(guò)程及成效分析
- 云計(jì)算數(shù)據(jù)中心能耗優(yōu)化方案
- 高效率辦公流程優(yōu)化解決方案
- 停車(chē)場(chǎng)智能管理系統(tǒng)安裝
- 小學(xué)五年級(jí)家長(zhǎng)會(huì)-主題班會(huì)
- DB11T 211-2017 園林綠化用植物材料 木本苗
- 《PLC應(yīng)用技術(shù)(西門(mén)子S7-1200)第二版》全套教學(xué)課件
- 豪邁集團(tuán)筆試在線測(cè)評(píng)題
- 社會(huì)團(tuán)體財(cái)務(wù)報(bào)表
- 行政區(qū)劃管理?xiàng)l例學(xué)習(xí)解讀課件
- GB/T 44143-2024科技人才評(píng)價(jià)規(guī)范
- 沖擊波療法指南解讀2024
- 宏觀經(jīng)濟(jì)學(xué)A智慧樹(shù)知到期末考試答案章節(jié)答案2024年中國(guó)農(nóng)業(yè)大學(xué)
- 2024年第五屆美麗中國(guó)全國(guó)國(guó)家版圖(中小學(xué)組)知識(shí)競(jìng)賽題庫(kù)及答案
- 2024年河南職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫(kù)各版本
評(píng)論
0/150
提交評(píng)論