數(shù)據(jù)結(jié)構(gòu)基于三元組表的存儲(chǔ)結(jié)構(gòu)實(shí)現(xiàn)稀疏矩陣的應(yīng)用 課程設(shè)計(jì) 實(shí)驗(yàn)報(bào)告_第1頁(yè)
數(shù)據(jù)結(jié)構(gòu)基于三元組表的存儲(chǔ)結(jié)構(gòu)實(shí)現(xiàn)稀疏矩陣的應(yīng)用 課程設(shè)計(jì) 實(shí)驗(yàn)報(bào)告_第2頁(yè)
數(shù)據(jù)結(jié)構(gòu)基于三元組表的存儲(chǔ)結(jié)構(gòu)實(shí)現(xiàn)稀疏矩陣的應(yīng)用 課程設(shè)計(jì) 實(shí)驗(yàn)報(bào)告_第3頁(yè)
數(shù)據(jù)結(jié)構(gòu)基于三元組表的存儲(chǔ)結(jié)構(gòu)實(shí)現(xiàn)稀疏矩陣的應(yīng)用 課程設(shè)計(jì) 實(shí)驗(yàn)報(bào)告_第4頁(yè)
數(shù)據(jù)結(jié)構(gòu)基于三元組表的存儲(chǔ)結(jié)構(gòu)實(shí)現(xiàn)稀疏矩陣的應(yīng)用 課程設(shè)計(jì) 實(shí)驗(yàn)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩17頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、數(shù) 據(jù) 結(jié) 構(gòu) 課 程 設(shè) 計(jì)設(shè)計(jì)題目:基于三元組表的存儲(chǔ)結(jié)構(gòu)實(shí)現(xiàn)稀疏矩陣的應(yīng)用課題名稱(chēng)基于三元組表的存儲(chǔ)結(jié)構(gòu)實(shí)現(xiàn)稀疏矩陣的應(yīng)用院 系年級(jí)專(zhuān)業(yè)學(xué) 號(hào)姓 名成 績(jī)課題設(shè)計(jì)目的與設(shè)計(jì)意義課題設(shè)計(jì)目的:熟練的掌握三元組表的存儲(chǔ)結(jié)構(gòu)來(lái)實(shí)現(xiàn)稀疏矩陣的應(yīng)用。讓同學(xué)們能夠很好的將數(shù)據(jù)結(jié)構(gòu)的思想轉(zhuǎn)化為C語(yǔ)言程序并進(jìn)行運(yùn)行生成答案。提高同學(xué)們的編程能力。使同學(xué)們更注重編程的思想而不單單是編程。同時(shí)也為了今后的學(xué)習(xí)打下基礎(chǔ)。課題設(shè)計(jì)意義:由于矩陣在程序中常使用二維陣列表示,二維陣列的大小與使用的存儲(chǔ)器空間成正比,如果多數(shù)元素沒(méi)有數(shù)據(jù),則會(huì)造成存儲(chǔ)器空間的浪費(fèi),為此,必須設(shè)計(jì)稀疏矩陣的陣列儲(chǔ)存方式,利用較少的存儲(chǔ)器

2、空間儲(chǔ)存完整的矩陣數(shù)據(jù)。由于稀疏矩陣中含有很多的0元素,在計(jì)算機(jī)中存儲(chǔ)會(huì)浪費(fèi)很多的空間,因此我們通常采用壓縮存儲(chǔ)的方法。其意義是讓我們?cè)趯W(xué)習(xí)完C、數(shù)據(jù)結(jié)構(gòu)等課程基礎(chǔ)上,掌握多維數(shù)組的邏輯結(jié)構(gòu)和存儲(chǔ)結(jié)構(gòu)、掌握稀疏矩陣的壓縮存儲(chǔ)及轉(zhuǎn)置,相加等基本操作,并用不同的方法輸出結(jié)果,進(jìn) 一步掌握設(shè)計(jì)、實(shí)現(xiàn)較大系統(tǒng)的完整過(guò)程,包括系統(tǒng)分析、編碼設(shè)計(jì)、系統(tǒng)集成、以及調(diào)試分析,熟練掌握數(shù)據(jù)結(jié)構(gòu)的選擇、設(shè)計(jì)、實(shí)現(xiàn)以及操作方法,為進(jìn)一步的應(yīng)用開(kāi)發(fā)打好基礎(chǔ)。指導(dǎo)教師:年 月 日目 錄 TOC o 1-3 h z u HYPERLINK l _Toc342742878 一、課程設(shè)計(jì)的目的及意義 PAGEREF _Toc

3、342742878 h 1 HYPERLINK l _Toc342742879 1.1 目的 PAGEREF _Toc342742879 h 1 HYPERLINK l _Toc342742880 1.2 意義 PAGEREF _Toc342742880 h 1 HYPERLINK l _Toc342742881 二、需求分析 PAGEREF _Toc342742881 h 1 HYPERLINK l _Toc342742882 設(shè)計(jì)函數(shù)建立稀疏矩陣及初始化值和輸出稀疏矩陣的值 PAGEREF _Toc342742882 h 1 HYPERLINK l _Toc342742883 構(gòu)造函數(shù)進(jìn)行

4、稀疏矩陣的轉(zhuǎn)置并輸出結(jié)果 PAGEREF _Toc342742883 h 1 HYPERLINK l _Toc342742884 構(gòu)造函數(shù)進(jìn)行兩稀疏矩陣相加、減及轉(zhuǎn)置并輸出結(jié)果 PAGEREF _Toc342742884 h 2 HYPERLINK l _Toc342742885 退出系統(tǒng) PAGEREF _Toc342742885 h 2 HYPERLINK l _Toc342742886 2.5 開(kāi)發(fā)環(huán)境 PAGEREF _Toc342742886 h 2 HYPERLINK l _Toc342742887 三、概要設(shè)計(jì) PAGEREF _Toc342742887 h 2 HYPERLIN

5、K l _Toc342742888 3.1 主界面的設(shè)計(jì) PAGEREF _Toc342742888 h 2 HYPERLINK l _Toc342742889 存儲(chǔ)結(jié)構(gòu)的設(shè)計(jì) PAGEREF _Toc342742889 h 2 HYPERLINK l _Toc342742890 3.3 模塊圖 PAGEREF _Toc342742890 h 3 HYPERLINK l _Toc342742891 3.4 流程圖 PAGEREF _Toc342742891 h 4 HYPERLINK l _Toc342742892 四、詳細(xì)設(shè)計(jì) PAGEREF _Toc342742892 h 4 HYPERL

6、INK l _Toc342742893 4.1 設(shè)計(jì)思路及方案 PAGEREF _Toc342742893 h 4 HYPERLINK l _Toc342742894 4.2 主調(diào)函數(shù) PAGEREF _Toc342742894 h 4 HYPERLINK l _Toc342742895 4.3 建立矩陣 PAGEREF _Toc342742895 h 5 HYPERLINK l _Toc342742896 4.4 建立三元組表 PAGEREF _Toc342742896 h 5 HYPERLINK l _Toc342742897 4.5 矩陣相加 PAGEREF _Toc342742897

7、h 6 HYPERLINK l _Toc342742898 4.6 矩陣相減 PAGEREF _Toc342742898 h 6 HYPERLINK l _Toc342742899 4.7 矩陣轉(zhuǎn)置 PAGEREF _Toc342742899 h 6 HYPERLINK l _Toc342742900 4.8 退出系統(tǒng) PAGEREF _Toc342742900 h 7 HYPERLINK l _Toc342742901 五、系統(tǒng)的實(shí)現(xiàn)與調(diào)試以及運(yùn)行結(jié)果 PAGEREF _Toc342742901 h 7 HYPERLINK l _Toc342742902 5.1 系統(tǒng)的實(shí)現(xiàn) PAGEREF

8、_Toc342742902 h 7 HYPERLINK l _Toc342742903 系統(tǒng)的調(diào)試 PAGEREF _Toc342742903 h 7 HYPERLINK l _Toc342742904 5.3 系統(tǒng)的運(yùn)行結(jié)果 PAGEREF _Toc342742904 h 8 HYPERLINK l _Toc342742905 六、心得體會(huì)與總結(jié) PAGEREF _Toc342742905 h 11 HYPERLINK l _Toc342742906 6.1 心得體會(huì) PAGEREF _Toc342742906 h 11 HYPERLINK l _Toc342742907 6.2 總結(jié) PA

9、GEREF _Toc342742907 h 11 HYPERLINK l _Toc342742908 附錄 PAGEREF _Toc342742908 h 11 HYPERLINK l _Toc342742909 參考文獻(xiàn) PAGEREF _Toc342742909 h 19一、課程設(shè)計(jì)的目的及意義1.1 目的(1)熟練的掌握三元組表的存儲(chǔ)結(jié)構(gòu)來(lái)實(shí)現(xiàn)稀疏矩陣的應(yīng)用。(2)讓同學(xué)們能夠很好的將數(shù)據(jù)結(jié)構(gòu)的思想轉(zhuǎn)化為C語(yǔ)言程序并進(jìn)行運(yùn)行生成答案。(3)提高同學(xué)們的編程能力。(4)使同學(xué)們更注重編程的思想而不單單是編程。(5)同時(shí)也為了今后的學(xué)習(xí)打下基礎(chǔ)。1.2 意義由于矩陣在程序中常使用二維陣列表示

10、,二維陣列的大小與使用的存儲(chǔ)器空間成正比,如果多數(shù)元素沒(méi)有數(shù)據(jù),則會(huì)造成存儲(chǔ)器空間的浪費(fèi),為此,必須設(shè)計(jì)稀疏矩陣的陣列儲(chǔ)存方式,利用較少的存儲(chǔ)器空間儲(chǔ)存完整的矩陣數(shù)據(jù)。由于稀疏矩陣中含有很多的0元素,在計(jì)算機(jī)中存儲(chǔ)會(huì)浪費(fèi)很多的空間,因此我們通常采用壓縮存儲(chǔ)的方法。其意義是讓我們?cè)趯W(xué)習(xí)完C、數(shù)據(jù)結(jié)構(gòu)等課程基礎(chǔ)上,掌握多維數(shù)組的邏輯結(jié)構(gòu)和存儲(chǔ)結(jié)構(gòu)、掌握稀疏矩陣的壓縮存儲(chǔ)及轉(zhuǎn)置,相加等基本操作,并用不同的方法輸出結(jié)果,進(jìn) 一步掌握設(shè)計(jì)、實(shí)現(xiàn)較大系統(tǒng)的完整過(guò)程,包括系統(tǒng)分析、編碼設(shè)計(jì)、系統(tǒng)集成、以及調(diào)試分析,熟練掌握數(shù)據(jù)結(jié)構(gòu)的選擇、設(shè)計(jì)、實(shí)現(xiàn)以及操作方法,為進(jìn)一步的應(yīng)用開(kāi)發(fā)打好基礎(chǔ)。二、需求分析設(shè)計(jì)函

11、數(shù)建立稀疏矩陣及初始化值和輸出稀疏矩陣的值本模塊要求設(shè)計(jì)函數(shù)建立稀疏矩陣并初始化, 包括在三元組結(jié)構(gòu)下和十字鏈 表結(jié)構(gòu)下。在創(chuàng)建稀疏矩陣時(shí),需要設(shè)計(jì)兩個(gè)不同的函數(shù)分別在三元組和十字鏈 表下創(chuàng)建稀疏矩陣,在輸入出現(xiàn)錯(cuò)誤時(shí),能夠?qū)﹀e(cuò)誤進(jìn)行判別處理,初始化稀疏 矩陣都為空值。在設(shè)計(jì)輸出稀疏矩陣的值的函數(shù)時(shí),也要針對(duì)兩種不同的情況, 分別編制函數(shù),才能準(zhǔn)確的輸出稀疏矩陣。在對(duì)稀疏矩陣進(jìn)行初始化時(shí),只輸入非零元素的值和它所在的所在行及所在列。在對(duì)稀疏矩陣輸出時(shí),以矩陣的完整 形式輸出。構(gòu)造函數(shù)進(jìn)行稀疏矩陣的轉(zhuǎn)置并輸出結(jié)果本模塊要求設(shè)計(jì)函數(shù)進(jìn)行稀疏矩陣的轉(zhuǎn)置并輸出轉(zhuǎn)置后的結(jié)果。 在編寫(xiě)函數(shù)時(shí),要先定義一個(gè)

12、相應(yīng)的結(jié)構(gòu)體變量用于存放轉(zhuǎn)置后的矩陣,最后把此矩陣輸出。構(gòu)造函數(shù)進(jìn)行兩稀疏矩陣相加、減及轉(zhuǎn)置并輸出結(jié)果本模塊要求設(shè)計(jì)相加、減和相乘函數(shù)對(duì)兩個(gè)矩陣進(jìn)行運(yùn)算,并輸出最終的稀 疏矩陣,定義相應(yīng)的矩陣類(lèi)型用于存放兩個(gè)矩陣操作后的結(jié)果矩陣,這個(gè)結(jié)果矩 陣的行、列數(shù)需要綜合多方面情況來(lái)確定。這些函數(shù)也是整個(gè)程序的難點(diǎn),需要 靈活運(yùn)用數(shù)組及指針的特點(diǎn)。退出系統(tǒng)本模塊要求設(shè)置選項(xiàng)能隨時(shí)結(jié)束程序的運(yùn)行, 本程序中采用 while 循環(huán)。 程序在計(jì)算機(jī)上顯示“提示信息”之后,由用戶(hù)在鍵盤(pán)上輸入演示程序中需要的 相關(guān)信息及命令。2.5 開(kāi)發(fā)環(huán)境 Microsoft三、概要設(shè)計(jì)3.1 主界面的設(shè)計(jì) 圖1 主界面設(shè)計(jì)三

13、元組結(jié)構(gòu)體定義 typedef structint i,j;datatype v;node;typedef structint m,n,t;node datasmax;spmatrix;3.3 模塊圖稀疏矩陣應(yīng)用系統(tǒng)創(chuàng)建矩陣創(chuàng)建三元組表矩陣的轉(zhuǎn)置矩陣的加法矩陣的減法3.4 流程圖Main()函數(shù)Switch()函數(shù)創(chuàng)建矩陣矩陣相加矩陣相減矩陣轉(zhuǎn)置創(chuàng)建三元組表矩陣行列是否相等Yxingjia()函數(shù)N矩陣行列是否相等xingjian()函數(shù)YN四、詳細(xì)設(shè)計(jì)4.1 設(shè)計(jì)思路及方案思路:通過(guò)三元組表的存儲(chǔ)結(jié)構(gòu)先對(duì)稀疏矩陣進(jìn)行存儲(chǔ),存儲(chǔ)過(guò)后在三元組表里進(jìn)行矩陣的基本操作,最后再以三元組表的形式或矩陣形

14、式輸出。方案:先建立一個(gè)三元組表的存儲(chǔ)結(jié)構(gòu),通過(guò)主函數(shù)里調(diào)用其它函數(shù)實(shí)現(xiàn)操作,前提是矩陣的相加、相減和轉(zhuǎn)置函數(shù)已經(jīng)完成。4.2 主調(diào)函數(shù)主調(diào)函數(shù)是一個(gè)C程序必備的函數(shù),它可以對(duì)其它函數(shù)進(jìn)行調(diào)用以達(dá)到便利的效果。具體實(shí)現(xiàn)如下:void main()spmatrix *a,*b,*c;int i=1,j; printf(*nn);printf(ttt 歡迎來(lái)到稀疏矩陣應(yīng)用系統(tǒng)!nnn);printf(*n);while(i)printf(tttt1-創(chuàng)建矩陣ntttt2-創(chuàng)建三元組表ntttt3-矩陣相加n);printf(tttt4-矩陣相減ntttt5-矩陣轉(zhuǎn)置ntttt0-退出系統(tǒng)ntt);

15、scanf(%d,&j);switch(j)if(i!=0)printf(nntttt0-退出系統(tǒng)ntttt1-繼續(xù)操作ntt);scanf(%d,&i);4.3 建立矩陣 要實(shí)現(xiàn)稀疏矩陣的應(yīng)用必須先建立矩陣,所以矩陣的建立是必不可少的,這在本算法中也起到了至關(guān)重要的作用。矩陣的建立是在三元組表的基礎(chǔ)上實(shí)現(xiàn)的,只要?jiǎng)?chuàng)建好了三元組表直接按三元組表輸出矩陣即可。體實(shí)現(xiàn)如下:a=(spmatrix *)malloc(sizeof(spmatrix);creat(a);printf(tt你創(chuàng)建的矩陣如下:n);printjuzhen(a);break;4.4 建立三元組表所謂稀疏矩陣就是其中非零元素的

16、個(gè)數(shù)較少,因此會(huì)用到三元組表的存儲(chǔ)結(jié)構(gòu),所以建立三元組表也是必要的。建立三元組表就是輸入矩陣中非零元素的信息,如行號(hào)、列號(hào)、非零元素的值。將信息依次輸入再以三元組表的形式輸出即可得到創(chuàng)建的三元組表。具體實(shí)現(xiàn)如下:a=(spmatrix *)malloc(sizeof(spmatrix);creat(a);printf(tt你創(chuàng)建的三元組表如下:n);print(a);break;4.5 矩陣相加 矩陣相加是矩陣中最基本的運(yùn)算之一,既然能夠相加說(shuō)明這兩個(gè)矩陣是等行等列的,所以在兩個(gè)矩陣相加之前必須要先做出判斷,判斷是否可以相加。矩陣相加就是將矩陣中的元素對(duì)應(yīng)相加組成一個(gè)新矩陣,將這個(gè)新矩陣輸出即

17、可得到相加后矩陣。具體實(shí)現(xiàn)如下:a=(spmatrix *)malloc(sizeof(spmatrix); b=(spmatrix *)malloc(sizeof(spmatrix);c=(spmatrix *)malloc(sizeof(spmatrix);printf(tt請(qǐng)輸入第一個(gè)矩陣的信息n); creat(a); printf(tt請(qǐng)輸入第二個(gè)矩陣的信息n);creat(b);if(a-m!=b-m|a-n!=b-n)printf(tt對(duì)不起! 你輸入的矩陣的行列不相等不能相加!n);break;4.6 矩陣相減 矩陣相減也是矩陣中最基本的運(yùn)算之一,同矩陣相加一樣如果要對(duì)兩個(gè)矩陣

18、進(jìn)行減法運(yùn)算同樣需要判斷矩陣的行列是否相等,如果相等才可以進(jìn)行矩陣相減運(yùn)算。具體實(shí)現(xiàn)如下:a=(spmatrix *)malloc(sizeof(spmatrix); b=(spmatrix *)malloc(sizeof(spmatrix);c=(spmatrix *)malloc(sizeof(spmatrix);printf(tt請(qǐng)輸入第一個(gè)矩陣的信息n); creat(a);printf(tt請(qǐng)輸入第二個(gè)矩陣的信息n);creat(b); if(a-m!=b-m|a-n!=b-n)printf(tt對(duì)不起! 你輸入的矩陣的行列不相等不能相減!n);break;4.7 矩陣轉(zhuǎn)置 眾所周知

19、只要是個(gè)矩陣它就有它的轉(zhuǎn)置矩陣,轉(zhuǎn)置矩陣也很好求。首先要先建立矩陣,建立之后只要將二維數(shù)組中行列的下標(biāo)對(duì)換即可。具體實(shí)現(xiàn)如下: a=(spmatrix *)malloc(sizeof(spmatrix);c=(spmatrix *)malloc(sizeof(spmatrix);printf(tt請(qǐng)輸入你要轉(zhuǎn)置的矩陣的信息n); creat(a);printf(tt你輸入的三元組表的信息如下:n); print(a);printf(tt三元組表對(duì)應(yīng)的矩陣如下:n);printjuzhen(a);printf(tt轉(zhuǎn)置后的三元組表的信息如下:n);c=transmat(a);print(c);p

20、rintf(tt轉(zhuǎn)置后的三元組表對(duì)應(yīng)的矩陣如下:n);printjuzhen(c);break;4.8 退出系統(tǒng)退出系統(tǒng)其實(shí)只是退出循環(huán)就可以了,要想退出循環(huán)只要結(jié)束while(i)即可。因此將0賦給while(i)循環(huán)即可。具體實(shí)現(xiàn)如下:i=0;break;五、系統(tǒng)的實(shí)現(xiàn)與調(diào)試以及運(yùn)行結(jié)果5.1 系統(tǒng)的實(shí)現(xiàn)系統(tǒng)的實(shí)現(xiàn)主要由以下幾個(gè)函數(shù)組成:creat(spmatrix *a);此函數(shù)的功能是創(chuàng)建三元組表,節(jié)省內(nèi)存空間,為矩陣的操作打下基礎(chǔ)。print(spmatrix *a);此函數(shù)的功能是輸出三元組表,以便使用者更加直觀(guān)的看出矩陣的元素信息。printjuzhen(spmatrix *a)

21、;此函數(shù)是做輸出矩陣之用,光輸出三元組表沒(méi)有輸出矩陣更加直觀(guān),輸出矩陣也可以和三元組表形成對(duì)比,檢驗(yàn)輸出結(jié)果是否出錯(cuò);spmatrix * xiangjia(spmatrix *a,spmatrix *b);此函數(shù)是用來(lái)完成矩陣相加運(yùn)算的,并且輸出相加后的結(jié)果,結(jié)果以三元組表和矩陣形式輸出。spmatrix * xiangjian(spmatrix *a,spmatrix *b);此函數(shù)是用來(lái)完成矩陣相減運(yùn)算的,并且輸出相減后的結(jié)果,結(jié)果以三元組表和矩陣形式輸出。spmatrix *transmat(spmatrix *a);此函數(shù)是矩陣的轉(zhuǎn)置函數(shù),通過(guò)它可以計(jì)算出矩陣的轉(zhuǎn)置矩陣,并以三元組表

22、和矩陣形式輸出。編譯鏈接執(zhí)行圖2 執(zhí)行界面5.3 系統(tǒng)的運(yùn)行結(jié)果創(chuàng)建矩陣圖3 矩陣的創(chuàng)建創(chuàng)建三元組表圖4 三元組表的創(chuàng)建矩陣相加圖5 矩陣的相加矩陣相減圖6 矩陣的相減矩陣轉(zhuǎn)置圖7 矩陣的轉(zhuǎn)置六、心得體會(huì)與總結(jié)6.1 心得體會(huì)曾經(jīng)在編程上遇到過(guò)很多困難,編了一學(xué)期的程序,有時(shí)會(huì)因?yàn)榫幊鲎鳂I(yè)題目而又高興幾天,有時(shí)會(huì)因編不出程序而失落幾天,總之,我喜歡 編程的過(guò)程,包括與同學(xué)交流,上網(wǎng)百度,從中學(xué)到了很多。 此次的課程設(shè)計(jì)更讓我們意識(shí)到了數(shù)據(jù)結(jié)構(gòu)的高深, 與小組成員的討論讓我們學(xué)到了更多關(guān)于數(shù)據(jù)結(jié)構(gòu)的知識(shí),這是一次團(tuán)隊(duì)合作的收獲成果。6.2 總結(jié)在本次課程設(shè)計(jì)中,我掌握了稀疏矩陣的存儲(chǔ)以及應(yīng)用的相

23、關(guān)知識(shí)。我通過(guò)程序編寫(xiě)出了矩陣的一些操作,包括矩陣的相加、相減、轉(zhuǎn)置等。并且我知道稀疏矩陣的應(yīng)用可以很大程度的減少存儲(chǔ)空間。從中我也學(xué)到很多。不管是討論交流還是百度搜索我都學(xué)到了東西。從而我也知道我們要學(xué)的東西還有很多很多。但是我會(huì)去慢慢積累!附錄源代碼:#include#define smax 20typedef int datatype;typedef structint i,j; /矩陣的行號(hào)列號(hào)datatype v; /矩陣的值node;typedef structint m,n,t; /矩陣的行列及非零元素的個(gè)數(shù)node datasmax; /非零元素個(gè)數(shù)為SMAX的數(shù)組spmatr

24、ix;void creat(spmatrix *a) /創(chuàng)建三元組表int k;printf(tt請(qǐng)輸入矩陣的行數(shù)、列數(shù)、非零元素個(gè)數(shù):ntt);scanf(%d%d%d,&a-m,&a-n,&a-t);printf(tt請(qǐng)輸入非零元素所在的行號(hào)、列號(hào)、非零元素的值:n);for(k=0;kt;k+)printf(tt); scanf(%d%d%d,&a-datak.i,&a-datak.j,&a-datak.v);void print(spmatrix *a) /輸出三元組表 int k;printf(tt行號(hào)t列號(hào)t值n);for(k=0;kt;k+)printf(tt%dt%dt%dn,

25、a-datak.i,a-datak.j,a-datak.v);void printjuzhen(spmatrix *a) /輸出矩陣int k,p,l;int c1010=0,0,0,0,0,0,0,0,0,0;for(k=0;kt;k+)ca-datak.ia-datak.j=a-datak.v;for(p=0;pm;p+)printf(tt);for(l=0;ln;l+)printf(%dt,cpl);printf(n);spmatrix * xiangjia(spmatrix *a,spmatrix *b) /矩陣相加運(yùn)算spmatrix *c;int pa=0,pb=0,pc=0,su

26、m=0;c=(spmatrix *)malloc(sizeof(spmatrix);if(a-m=b-m)&(a-n=b-n)c-m=a-m;c-n=a-n;while(pat&pbt)if(a-datapa.i=b-datapb.i)if(a-datapa.j=b-datapb.j)sum=a-datapa.v+b-datapb.v;if(sum)c-datapc.v=sum;c-datapc.i=a-datapa.i;c-datapc.j=a-datapa.j;pc+;pa+;pb+;elseif(a-datapa.jdatapb.j)if(a-datapa.v)c-datapc.v=a-

27、datapa.v;c-datapc.i=a-datapa.i;c-datapc.j=a-datapa.j;pc+;pa+;elseif(b-datapb.v)c-datapc.v=b-datapb.v;c-datapc.i=b-datapb.i;c-datapc.j=b-datapb.j;pc+;pb+;elseif(a-datapa.idatapb.i)if(a-datapa.v)c-datapc.v=a-datapa.v; c-datapc.i=a-datapa.i; c-datapc.j=a-datapa.j; pc+;pa+;elseif(b-datapb.v)c-datapc.v=b

28、-datapb.v; c-datapc.i=b-datapb.i; c-datapc.j=b-datapb.j; pc+;pb+;elsereturn(0);while(pat)c-datapc.v=a-datapa.v; c-datapc.i=a-datapa.i; c-datapc.j=a-datapa.j; pc+;pa+;while(pbt)c-datapc.v=b-datapb.v; c-datapc.i=b-datapb.i;c-datapc.j=b-datapb.j;pc+;pb+;c-t=pc;return(c);spmatrix * xiangjian(spmatrix *a

29、,spmatrix *b) /矩陣相減運(yùn)算spmatrix *c;int pa=0,pb=0,pc=0,sum=0;c=(spmatrix *)malloc(sizeof(spmatrix);if(a-m=b-m)&(a-n=b-n)c-m=a-m;c-n=a-n;while(pat&pbt)if(a-datapa.i=b-datapb.i)if(a-datapa.j=b-datapb.j)sum=a-datapa.v-b-datapb.v;if(sum)c-datapc.v=sum;c-datapc.i=a-datapa.i;c-datapc.j=a-datapa.j;pc+;pa+;pb+

30、;elseif(a-datapa.jdatapb.j)if(a-datapa.v)c-datapc.v=a-datapa.v;c-datapc.i=a-datapa.i;c-datapc.j=a-datapa.j;pc+;pa+;elseif(b-datapb.v)c-datapc.v=-(b-datapb.v);c-datapc.i=b-datapb.i;c-datapc.j=b-datapb.j;pc+;pb+;elseif(a-datapa.idatapb.i)if(a-datapa.v)c-datapc.v=a-datapa.v; c-datapc.i=a-datapa.i; c-da

31、tapc.j=a-datapa.j; pc+;pa+;elseif(b-datapb.v)c-datapc.v=-(b-datapb.v); c-datapc.i=b-datapb.i; c-datapc.j=b-datapb.j; pc+;pb+;elsereturn(0);while(pat)c-datapc.v=a-datapa.v; c-datapc.i=a-datapa.i; c-datapc.j=a-datapa.j; pc+;pa+;while(pbt)c-datapc.v=-(b-datapb.v); c-datapc.i=b-datapb.i;c-datapc.j=b-dat

32、apb.j;pc+;pb+;c-t=pc;return(c);spmatrix *transmat(spmatrix *a) /矩陣的轉(zhuǎn)置int pa,pb,col;spmatrix *b;b=(spmatrix *)malloc(sizeof(spmatrix);b-m=a-n;b-n=a-m;b-t=a-t;if(b-t0)pb=0;for(col=0;coln;col+)for(pa=0;pat;pa+)if(a-datapa.j=col)b-datapb.i=a-datapa.j;b-datapb.j=a-datapa.i;b-datapb.v=a-datapa.v;pb+;retur

33、n(b); void main()spmatrix *a,*b,*c;int i=1,j; printf(*nn);printf(ttt 歡迎來(lái)到稀疏矩陣應(yīng)用系統(tǒng)!nnn);printf(*n);while(i)printf(tttt1-創(chuàng)建矩陣ntttt2-創(chuàng)建三元組表ntttt3-矩陣相加n);printf(tttt4-矩陣相減ntttt5-矩陣轉(zhuǎn)置ntttt0-退出系統(tǒng)ntt);scanf(%d,&j);switch(j)case 0:i=0;break;case 5: a=(spmatrix *)malloc(sizeof(spmatrix);c=(spmatrix *)malloc(sizeof(spmatrix);printf(tt請(qǐng)輸入你要轉(zhuǎn)置的矩陣的信息n); creat(a);

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論