版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、武漢理工大學(xué)數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)說(shuō)明書學(xué) 號(hào): 0121310870534課 程 設(shè) 計(jì)題 目稀疏矩陣相乘學(xué) 院計(jì)算機(jī)科學(xué)與技術(shù)專 業(yè)計(jì)算機(jī)科學(xué)與技術(shù)卓越工程師班 級(jí)計(jì)算機(jī)zy1301姓 名馬良指導(dǎo)教師楊克儉2014年12月25日目 錄課程設(shè)計(jì)任務(wù)書11問(wèn)題描述21.1問(wèn)題描述21.2基本要求31.3測(cè)試數(shù)據(jù)32.實(shí)現(xiàn)分析33程序設(shè)計(jì)33.1存儲(chǔ)結(jié)構(gòu)設(shè)計(jì)33.1.1三元組表示稀疏矩陣33.1.2十字鏈表表示稀疏矩陣43.2主要算法設(shè)計(jì)53.2.1程序主要函數(shù)原型及功能53.2.2各函數(shù)的實(shí)現(xiàn)63.2.3 程序流程圖114.調(diào)試報(bào)告114.1調(diào)試中的問(wèn)題114.2設(shè)計(jì)分析125. 程序運(yùn)行結(jié)果126
2、.經(jīng)驗(yàn)和體會(huì)137.源程序14參考文獻(xiàn):22本科生課程設(shè)計(jì)成績(jī)?cè)u(píng)定表23課程設(shè)計(jì)任務(wù)書學(xué)生姓名: 馬良 專業(yè)班級(jí): 計(jì)算機(jī)zy1301班 指導(dǎo)教師: 楊克儉 工作單位: 計(jì)算機(jī)科學(xué)系 題 目: 稀疏矩陣相乘 初始條件: 稀疏矩陣是指那些多數(shù)元素為零的矩陣。利用“稀疏”特點(diǎn)進(jìn)行存儲(chǔ)和計(jì)算可以大大節(jié)省存儲(chǔ)空間,提高計(jì)算效率。實(shí)現(xiàn)一個(gè)能進(jìn)行稀疏矩陣基本運(yùn)算的運(yùn)算器。(1) 以“帶行邏輯鏈接信息”的三元組順序表表示稀疏矩陣(2) 實(shí)現(xiàn)兩個(gè)矩陣相乘的運(yùn)算。(3) 稀疏矩陣采用十字鏈表表示,而運(yùn)算結(jié)果的矩陣則以通常的陣列形式列出。(4) 測(cè)試用例見(jiàn)嚴(yán)蔚敏數(shù)據(jù)結(jié)構(gòu)習(xí)題集(C語(yǔ)言版)p136。要求完成的主要任
3、務(wù): (包括課內(nèi)實(shí)踐工作量及其技術(shù)要求,以及說(shuō)明書撰寫等具體要求)課內(nèi)實(shí)踐報(bào)告按學(xué)校規(guī)定格式用A4紙打?。〞鴮懀?yīng)包含如下內(nèi)容: 1. 問(wèn)題描述簡(jiǎn)述題目要解決的問(wèn)題是什么。2. 設(shè)計(jì)存儲(chǔ)結(jié)構(gòu)設(shè)計(jì)、主要算法設(shè)計(jì)(用類C/C+語(yǔ)言或用框圖描述)、測(cè)試用例設(shè)計(jì);3. 調(diào)試報(bào)告調(diào)試過(guò)程中遇到的問(wèn)題是如何解決的;對(duì)設(shè)計(jì)和編碼的討論和分析。4. 經(jīng)驗(yàn)和體會(huì)(包括對(duì)算法改進(jìn)的設(shè)想)5. 附源程序清單和運(yùn)行結(jié)果。源程序要加注釋。如果題目規(guī)定了測(cè)試數(shù)據(jù),則運(yùn)行結(jié)果要包含這些測(cè)試數(shù)據(jù)和運(yùn)行輸出。說(shuō)明:1. 設(shè)計(jì)報(bào)告、程序不得相互抄襲和拷貝;若有雷同,則所有雷同者成績(jī)均為0分。2. 凡拷貝往年任務(wù)書或課內(nèi)實(shí)踐充
4、數(shù)者,成績(jī)一律無(wú)效,以0分記。時(shí)間安排:1第16周完成,驗(yàn)收時(shí)間為12月26日(星期五)下午2驗(yàn)收地點(diǎn):實(shí)驗(yàn)中心3驗(yàn)收內(nèi)容:可執(zhí)行程序與源代碼、課內(nèi)實(shí)踐報(bào)告書。指導(dǎo)教師簽名: 2014年11月4日系主任(或責(zé)任教師)簽名: 年 月 日課程設(shè)計(jì)報(bào)告書1問(wèn)題描述1.1問(wèn)題描述稀疏矩陣是指那些多數(shù)元素為零的矩陣。利用“稀疏”特點(diǎn)進(jìn)行存儲(chǔ)和計(jì)算可以大大節(jié)省存儲(chǔ)空間,提高計(jì)算效率。實(shí)現(xiàn)一個(gè)能進(jìn)行稀疏矩陣基本運(yùn)算的運(yùn)算器。1.2基本要求以“帶行邏輯鏈接信息”的三元組順序表表示稀疏矩陣,實(shí)現(xiàn)兩個(gè)矩陣相乘的運(yùn)算。稀疏矩陣采用十字鏈表表示,而運(yùn)算結(jié)果的矩陣則以通常的陣列形式列出。1.3測(cè)試數(shù)據(jù)測(cè)試用例:嚴(yán)蔚敏數(shù)
5、據(jù)結(jié)構(gòu)習(xí)題集(C語(yǔ)言版)p136。4 -3 0 0 1 3 0 0 0 -6 00 0 0 8 0 4 2 0 8 0 00 0 1 0 0 * 0 1 0 = 0 1 00 0 0 0 70 1 0 0 0 0 0 0 0 02.實(shí)現(xiàn)分析(1) 根據(jù)題目要求,稀疏矩陣采用三元組法順序輸入,十字鏈表表示。只存儲(chǔ)稀疏矩陣中極少的非零元素。(2) 各元素按照在原來(lái)矩陣中的位置行優(yōu)先進(jìn)行存放。(3) 在稀疏矩陣十字鏈表的表示中,每一行都是一個(gè)帶附加頭結(jié)點(diǎn)的循環(huán)行鏈表,每一列都是一個(gè)帶附加頭結(jié)點(diǎn)的循環(huán)列鏈表。(4) 逐個(gè)尋找兩個(gè)矩陣中非零元的位置,第一個(gè)矩陣從第一行開(kāi)始,第二個(gè)矩陣從第一列開(kāi)始,逐漸相
6、乘相加,得到第三個(gè)矩陣。(5) 如果矩陣中非零元素個(gè)數(shù)比矩陣元素個(gè)數(shù)多,返回錯(cuò)誤信息,程序結(jié)束。(6) 若輸入成功,輸出三個(gè)矩陣。3程序設(shè)計(jì)3.1存儲(chǔ)結(jié)構(gòu)設(shè)計(jì)3.1.1三元組表示稀疏矩陣只存儲(chǔ)在矩陣中極少數(shù)的非零元素,用來(lái)唯一確定一個(gè)矩陣元素。在三元組數(shù)組中,各矩陣元素按在原矩陣中的位置,以行優(yōu)先的順序依次存放,另外還要存儲(chǔ)原矩陣的行數(shù)、列數(shù)和非零元素個(gè)數(shù)struct Trituple /三元組類Trituple int row,col; /非零元素的行號(hào)、列號(hào)float value; /非零元素的值Trituple& operator=(Trituple &x) row=x.row;col=
7、x.col;value=x.value; 3.1.2十字鏈表表示稀疏矩陣在稀疏矩陣十字鏈表的表示中,每一行都是一個(gè)帶附加頭結(jié)點(diǎn)的循環(huán)行鏈表,每一列都是一個(gè)帶附加頭結(jié)點(diǎn)的循環(huán)列鏈表。所有的結(jié)點(diǎn)都是結(jié)點(diǎn)類Node的對(duì)象。Node類有一個(gè)head域,用來(lái)區(qū)分該結(jié)點(diǎn)是附加頭結(jié)點(diǎn)還是非零元素結(jié)點(diǎn)。每個(gè)附加頭結(jié)點(diǎn)有三個(gè)域:d、r、next。第i個(gè)行鏈表和第i個(gè)列鏈表是一個(gè)附加頭結(jié)點(diǎn),r域存放第i行第一個(gè)結(jié)點(diǎn)的地址,d域存放第i列第一個(gè)結(jié)點(diǎn)的地址, next域鏈接到第i+1個(gè)附加頭結(jié)點(diǎn)。每個(gè)非零元素結(jié)點(diǎn)有6個(gè)域:head,row,col,d,value。r是行鏈表指針,d是列鏈表指針。struct Trit
8、uple /三元組類Trituple int row,col; /非零元素的行號(hào)、列號(hào)float value; /非零元素的值; class Node;class SparseMatrix /稀疏矩陣的類定義friend ostream&operator(istream&,SparseMatrix&);/友元函數(shù):輸入流操作符重載public:SparseMatrix(); /構(gòu)造函數(shù)SparseMatrix(int a,int b); /重載構(gòu)造函數(shù)SparseMatrix(SparseMatrix& T); /復(fù)制構(gòu)造函數(shù)SparseMatrix()makeEmpty(); /析構(gòu)函數(shù)vo
9、id Init(int a,int b); /矩陣初始化函數(shù)void makeEmpty(); /清空矩陣void Insert(int a,int b,float c); /插入矩陣元素Node *Locate(int i); /定位附加頭結(jié)點(diǎn)SparseMatrix Cheng(SparseMatrix b); /兩個(gè)矩陣相乘SparseMatrix &operator=( SparseMatrix &T); /重載賦值運(yùn)算符private:int Row,Col,Terms,t; /矩陣的總行數(shù),總列數(shù),非零元素個(gè)數(shù)和普通變量;Node*headNode; /稀疏矩陣的總表頭;class
10、 Node /矩陣結(jié)點(diǎn)類的定義friend class SparseMatrix;public:Node():head(true) r=d=this; /建立附加頭結(jié)點(diǎn)Node(Trituple *t) /建立非零元素結(jié)點(diǎn)triple.col=t-col;triple.row=t-row;triple.value=t-value;r=d=this;head=false;Node*d,*r; /行列鏈表指針bool head;union Trituple triple; Node*next; ;3.2主要算法設(shè)計(jì)3.2.1程序主要函數(shù)原型及功能1 首先定義兩個(gè)類:class Node /矩陣結(jié)點(diǎn)
11、類定義class SparseMatrix /稀疏矩陣的類定義2 主要函數(shù)原型及功能:void Init(int a,int b)功能:主要完成初始化稀疏矩陣,采用三元組順序輸入,行優(yōu)先存放。并且判斷輸入是否符合常規(guī),若不符合,返回錯(cuò)誤信息。 void makeEmpty() 功能:將矩陣清空,釋放存儲(chǔ)空間。用于析構(gòu)函數(shù)中。 void Insert(int a,int b,float c) 功能:用于向矩陣中插入元素,分兩種情況:1)先定位列再尋找行;2)先定位行再尋找列。另外插入后要確定插入的位置是否符合矩陣的設(shè)置,如果不符合,返回錯(cuò)誤信息。Node *Locate(int i) 功能:對(duì)附
12、加頭結(jié)點(diǎn)進(jìn)行定位。SparseMatrix Cheng(SparseMatrix b)功能:通過(guò)確定列頭指針遍歷實(shí)現(xiàn)稀疏矩陣的相乘,判斷是否符合常規(guī),若不符合,返回錯(cuò)誤信息。SparseMatrix &operator=( SparseMatrix &T);功能:重載賦值運(yùn)算符。void main()功能:完成對(duì)函數(shù)的調(diào)用和與用戶的交互。3.2.2各函數(shù)的實(shí)現(xiàn)(1) 矩陣初始化函數(shù)的實(shí)現(xiàn): 三元組順序輸入,按照行優(yōu)先順序存儲(chǔ) 函數(shù)void SparseMatrix:Init(int a,int b)的實(shí)現(xiàn):void SparseMatrix:Init(int a,int b) /矩陣初始化函數(shù)
13、的實(shí)現(xiàn)Row=a;Col=b;Terms=0;Trituple x;x.row=a;x.col=b;x.value=0;headNode=new Node(&x);Node *current; if(a0&b0)t=a=b?a:b;current=new Node();headNode-r=current; for(int i=1;inext=new Node(); current=current-next;elsecout初始化錯(cuò)誤!endl;(2) 清空矩陣的實(shí)現(xiàn) 函數(shù)void SparseMatrix:makeEmpty()的實(shí)現(xiàn):void SparseMatrix:makeEmpty(
14、) /清空矩陣的實(shí)現(xiàn)Node*del,*current;for(int i=1;id!=Locate(i)del=current-d; /通過(guò)列的附加頭結(jié)點(diǎn)向下刪除結(jié)點(diǎn)current-d=del-d;delete del;(3) 插入函數(shù)的實(shí)現(xiàn) 1)先定位列再尋找行;2)先定位行再尋找列。另外插入后要確定插入的位置是否符合矩陣的設(shè)置,如果不符合,返回錯(cuò)誤信息。 函數(shù)void SparseMatrix:Insert(int a,int b,float c)的實(shí)現(xiàn):void SparseMatrix:Insert(int a,int b,float c) /插入函數(shù)的實(shí)現(xiàn)Trituple x;x.
15、row=a;x.col=b;x.value=c;if(aRow&bCol)Node *NewNode=new Node(&x),*current,*head;head=Locate(a); /先定位行再尋找列current=head-r;if(current=head)current-r=NewNode;NewNode-r=current;elsewhile(current-triple.colr!=head)current=current-r; NewNode-r=current-r;current-r=NewNode; head=Locate(b); /先定位列再尋找行current=he
16、ad-d;if(current=head)current-d=NewNode;NewNode-d=current;elsewhile(current-triple.rowd!=head)current=current-d;NewNode-d=current-d;current-d=NewNode;Terms+; elsecout結(jié)點(diǎn)位置非法,請(qǐng)重新輸入r;for(int j=1;jnext;return current;(5) 矩陣乘法的實(shí)現(xiàn) 函數(shù)SparseMatrix SparseMatrix:Cheng(SparseMatrix b)的實(shí)現(xiàn):SparseMatrix SparseMatr
17、ix:Cheng(SparseMatrix b) /矩陣乘法的實(shí)現(xiàn)if(this-Col=b.Row)SparseMatrix C(this-Row,b.Col); /以A矩陣的行和b矩陣的列為行列建立稀疏矩陣float value;Node *Row_head,*Col_head; /設(shè)兩個(gè)指針,一個(gè)充當(dāng)行頭指針,一個(gè)為列指針 for(int i=1;i=t;i+) /先確定行,再求出C矩陣在該行各列的元素for(int j=1;jr!=Locate(i) /假如行中還有元素不為零就找與之匹配的元素相乘Row_head=Row_head-r;Col_head=Col_head-d; whil
18、e(Row_head-triple.col!=Col_head-triple.row&Col_head-d!=b.Locate(j) /假如行列不相等而且對(duì)應(yīng)列還有元素,就繼續(xù)找匹配的元素否則判斷再循環(huán)if(Row_head-triple.colCol_head-triple.row)Col_head=Col_head-d;else if(Row_head-r=Locate(i)Col_head=Col_head-d; /假如b矩陣該列元素比a矩陣該行元素多elseRow_head=Row_head-r; /則b中該列元素已經(jīng)無(wú)法找到能相乘元素則往下推直至跳出循環(huán)if(Col_head-d!=
19、b.Locate(j)|Col_head-triple.row=Row_head-triple.col)value+=Row_head-triple.value*Col_head-triple.value;if(value!=0)C.Insert(i,j,value);return C;elseSparseMatrix C;cerr兩個(gè)矩陣不能相乘!Row=T.Row;this-Col=T.Col;Node *current;for(int i=1;ir!=current)current=current-r; /通過(guò)行遍歷逐個(gè)賦值this-Insert(current-triple.row,c
20、urrent-triple.col,current-triple.value);return *this;(7) 主函數(shù)設(shè)計(jì)void main() SparseMatrix A,B,C;cout稀疏矩陣的乘法endl;cout請(qǐng)輸入矩陣A:A;cout請(qǐng)輸入矩陣B:B; cout矩陣A為:endl;coutAendl;cout矩陣B為:endl;coutBendl;cout兩個(gè)矩陣的乘積為:endl;coutA.Cheng(B)endl;開(kāi)始進(jìn)行矩陣乘法運(yùn)算并包含必要的判斷輸入矩陣的行數(shù)、列數(shù)、非零元個(gè)數(shù),非零元行號(hào)、列號(hào)、值輸出三個(gè)矩陣結(jié)束3.2.3 程序流程圖本次程序流程圖如下4.調(diào)試報(bào)告
21、4.1調(diào)試中的問(wèn)題 整個(gè)程序的算法沒(méi)有問(wèn)題,不過(guò)在編程過(guò)程中出了許多格式和語(yǔ)法上的錯(cuò)誤。通過(guò)軟件的提示,一個(gè)個(gè)改正錯(cuò)誤。 在使用十字鏈表寫程序的過(guò)程中,由于各種指針和指針域非常多,經(jīng)?;煜鱾€(gè)指針的指向,以至于整個(gè)程序運(yùn)行不了。后來(lái)我在紙上細(xì)細(xì)將頭結(jié)點(diǎn)和非零元素的指針域從頭分析了一邊,重寫了十字鏈表的部分實(shí)現(xiàn),后又修改了幾處小錯(cuò)誤,終于完成了代碼的正確書寫。 在寫稀疏矩陣類定義時(shí)使用了有關(guān)結(jié)點(diǎn)類的指針,而結(jié)點(diǎn)類放在稀疏矩陣類后定義。在稀疏矩陣類定義前沒(méi)有聲明結(jié)點(diǎn)類,使程序?qū)懲旰笥袔讉€(gè)函數(shù)編譯出現(xiàn)問(wèn)題。剛開(kāi)始只修改函數(shù),卻怎么也修改不了。過(guò)了一段時(shí)間之后才想起實(shí)際的原因。于是將程序修改正確。4.
22、2設(shè)計(jì)分析算法的時(shí)間復(fù)雜度為:O(Rows*Cols)。有時(shí)矩陣的非零元素個(gè)數(shù)太多會(huì)導(dǎo)致程序崩潰。另外根據(jù)實(shí)際的矩陣情況,這次的設(shè)計(jì)沒(méi)有使用模板,而僅僅是使用float類型。個(gè)人感覺(jué)float類型已經(jīng)能夠滿足稀疏矩陣的使用要求。由于課程設(shè)計(jì)的要求,這次代碼只實(shí)現(xiàn)了稀疏矩陣的乘法,也可以加入加減法、轉(zhuǎn)置的運(yùn)算。同時(shí)可以在主函數(shù)中加入選擇菜單。5. 程序運(yùn)行結(jié)果經(jīng)過(guò)對(duì)程序錯(cuò)誤的修改后,程序執(zhí)行,經(jīng)過(guò)分析,程序運(yùn)行結(jié)果正確,滿足題目要求!運(yùn)行結(jié)果主要截圖如下:6.經(jīng)驗(yàn)和體會(huì)這次的題目是稀疏矩陣的乘法。本來(lái)拿到這個(gè)題目的時(shí)候感覺(jué)應(yīng)該很簡(jiǎn)單,因?yàn)殡m說(shuō)這部分的內(nèi)容在課本上是不要求掌握的內(nèi)容,但畢竟課本上都
23、有,如果不會(huì)的話可以參考一下課本上的代碼??煽吹饺蝿?wù)書的時(shí)候才知道沒(méi)那么簡(jiǎn)單。當(dāng)時(shí)我根本不知道什么是十字鏈表和“帶行邏輯鏈接信息”,百度后才失望的發(fā)現(xiàn)在課本上關(guān)于十字鏈表的介紹竟然只有半面。我只有在認(rèn)真學(xué)習(xí)了三元組法乘法的實(shí)現(xiàn)了之后,在網(wǎng)上查找學(xué)習(xí)有關(guān)十字鏈表的知識(shí)學(xué)習(xí)??墒鞘宙湵淼闹羔樣虿糠治疫€是迷迷糊糊的。于是我決定先試著寫一寫。就這樣,我慢慢的將整個(gè)程序磨了出來(lái)。感覺(jué)程序還是要先有一個(gè)整體規(guī)劃,然后一氣呵成比較好。就像這次,我在十字鏈表的指針那里有疑問(wèn),寫了一半就已經(jīng)很晚了,就決定第二天繼續(xù)寫。不過(guò)第二天再開(kāi)始的時(shí)候,卻對(duì)前一天寫的程序有些許的陌生,思路也忘記了好多。下次一定要避免這種
24、情況的發(fā)生。即使實(shí)在寫不完,也要先記下此時(shí)的思路,以便第二天復(fù)習(xí)。這次數(shù)據(jù)結(jié)構(gòu)課內(nèi)設(shè)計(jì)是我第一次完整的編寫這么長(zhǎng)的程序,收獲特別多。相對(duì)于其他同學(xué)3、4頁(yè)的代碼,我的8頁(yè)代碼顯得特別多,不過(guò)一分耕耘一分收獲。我接下來(lái)還要好好研究一下數(shù)據(jù)結(jié)構(gòu)這門課,學(xué)無(wú)止境,繼續(xù)加油吧!7.源程序#include#includeusing namespace std;struct Trituple /三元組類Trituple int row,col; /非零元素的行號(hào)、列號(hào)float value; /非零元素的值; class Node;class SparseMatrix /稀疏矩陣的類定義friend os
25、tream&operator(istream&,SparseMatrix&);/友元函數(shù):輸入流操作符重載public:SparseMatrix(); /構(gòu)造函數(shù)SparseMatrix(int a,int b); /重載構(gòu)造函數(shù)SparseMatrix(SparseMatrix& T); /復(fù)制構(gòu)造函數(shù)SparseMatrix()makeEmpty(); /析構(gòu)函數(shù)void Init(int a,int b); /矩陣初始化函數(shù)void makeEmpty(); /清空矩陣void Insert(int a,int b,float c); /插入矩陣元素Node *Locate(int i)
26、; /定位附加頭結(jié)點(diǎn)SparseMatrix Cheng(SparseMatrix b); /兩個(gè)矩陣相乘SparseMatrix &operator=( SparseMatrix &T); /重載賦值運(yùn)算符private:int Row,Col,Terms,t; /矩陣的總行數(shù),總列數(shù),非零元素個(gè)數(shù)和普通變量;Node*headNode; /稀疏矩陣的總表頭;class Node /矩陣結(jié)點(diǎn)類定義friend class SparseMatrix;public:Node():head(true) r=d=this; /建立附加頭結(jié)點(diǎn)Node(Trituple *t) /建立非零元素結(jié)點(diǎn)tri
27、ple.col=t-col;triple.row=t-row;triple.value=t-value;r=d=this;head=false;Node*d,*r; /行列鏈表指針bool head;union Trituple triple; Node*next; /聯(lián)合;SparseMatrix: SparseMatrix():Row(0),Col(0),Terms(0) /構(gòu)造函數(shù)的實(shí)現(xiàn)Trituple x;x.row=Row;x.col=Col;x.value=0;SparseMatrix: SparseMatrix(int a,int b):Row(a),Col(b) /重載構(gòu)造函數(shù)
28、的實(shí)現(xiàn)Trituple x;x.row=a;x.col=b;x.value=0;Terms=0;t=a=b?a:b;Node *current;headNode=new Node(&x);current=headNode-r=new Node();for(int i=1;inext=new Node();current=current-next;SparseMatrix: SparseMatrix(SparseMatrix&T) /復(fù)制構(gòu)造函數(shù)的實(shí)現(xiàn)Init(T.Row,T.Col);Node*current;for(int i=1;ir!=T.Locate(i) /通過(guò)行遍歷逐個(gè)賦值curr
29、ent=current-r; Insert(current-triple.row,current-triple.col,current-triple.value);void SparseMatrix:Init(int a,int b) /矩陣初始化函數(shù)的實(shí)現(xiàn)Row=a;Col=b;Terms=0;Trituple x;x.row=a;x.col=b;x.value=0;headNode=new Node(&x);Node *current; if(a0&b0)t=a=b?a:b;current=new Node();headNode-r=current; for(int i=1;inext=n
30、ew Node(); current=current-next;elsecout初始化錯(cuò)誤!r;for(int j=1;jnext;return current;void SparseMatrix:Insert(int a,int b,float c) /插入函數(shù)的實(shí)現(xiàn)Trituple x;x.row=a;x.col=b;x.value=c;if(aRow&bCol)Node *NewNode=new Node(&x),*current,*head;head=Locate(a); /先定位行再尋找列current=head-r;if(current=head)current-r=NewNode
31、;NewNode-r=current;elsewhile(current-triple.colr!=head)current=current-r; NewNode-r=current-r;current-r=NewNode; head=Locate(b); /先定位列再尋找行current=head-d;if(current=head)current-d=NewNode;NewNode-d=current;elsewhile(current-triple.rowd!=head)current=current-d;NewNode-d=current-d;current-d=NewNode;Ter
32、ms+; elsecout結(jié)點(diǎn)位置非法,請(qǐng)重新輸入(istream &in, SparseMatrix &b) /輸入函數(shù)重載int R,C,m,n,S;float a;cout請(qǐng)輸入矩陣的行數(shù)、列數(shù)、非零元素個(gè)數(shù):RCS;b.Init(R,C);if(S(R*C)cerr輸入元素個(gè)數(shù)超過(guò)設(shè)定endl;exit(1);elsecout請(qǐng)輸入各非零元素的行數(shù)、列數(shù)、值endl;cout行數(shù) 列數(shù) 值endl;for(int i=1;i=S;i+) /輸入元素結(jié)點(diǎn)并且插入矩陣coutimna;b.Insert(m,n,a); /插入結(jié)點(diǎn)return in;ostream &operator(ost
33、ream &out, SparseMatrix &b) /輸出函數(shù)重載Node *x;for(int i=1;ir;for(int j=1;jhead=false&(x-triple.col=j)cout.width(4);outtriple.value;x=x-r;else if(x-head=true)for(j;j=b.t;j+)cout.width(4);cout0;break;elsecout.width(4);cout0;coutRow=T.Row;this-Col=T.Col;Node *current;for(int i=1;ir!=current)current=curren
34、t-r; /通過(guò)行遍歷逐個(gè)賦值this-Insert(current-triple.row,current-triple.col,current-triple.value);return *this;void SparseMatrix:makeEmpty() /清空矩陣的實(shí)現(xiàn)Node*del,*current;for(int i=1;id!=Locate(i)del=current-d; /通過(guò)列的附加頭結(jié)點(diǎn)向下刪除結(jié)點(diǎn)current-d=del-d;delete del;SparseMatrix SparseMatrix:Cheng(SparseMatrix b) /矩陣乘法的實(shí)現(xiàn)if(this-Col=b.Row)SparseMatrix C(this-Row,b.Col); /以A矩陣的
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度新型自動(dòng)販賣機(jī)租賃與銷售代理合同
- 2025年度漁船租賃與漁業(yè)保險(xiǎn)配套服務(wù)合同
- 二零二五年度購(gòu)房合同簽訂后的房屋驗(yàn)收與交付標(biāo)準(zhǔn)
- 2025年度舞蹈大賽參賽嘉賓演藝合同協(xié)議
- 2025年度商砼行業(yè)市場(chǎng)拓展與品牌建設(shè)合同
- 2025版家居床墊品牌代理銷售合作協(xié)議書3篇
- 二零二五年度污水處理廠污水處理設(shè)施運(yùn)營(yíng)與優(yōu)化管理合同
- 2025年度環(huán)保項(xiàng)目貸款用途監(jiān)管協(xié)議
- 2025年度智能家居設(shè)備試用反饋協(xié)議
- 2025年度中小企業(yè)發(fā)展銀行過(guò)橋墊資貸款合同
- 保險(xiǎn)專題課件教學(xué)課件
- 牛津上海版小學(xué)英語(yǔ)一年級(jí)上冊(cè)同步練習(xí)試題(全冊(cè))
- 室上性心動(dòng)過(guò)速-醫(yī)學(xué)課件
- 建設(shè)工程法規(guī)及相關(guān)知識(shí)試題附答案
- 中小學(xué)心理健康教育課程標(biāo)準(zhǔn)
- 四年級(jí)上冊(cè)脫式計(jì)算400題及答案
- 新課標(biāo)人教版小學(xué)數(shù)學(xué)六年級(jí)下冊(cè)集體備課教學(xué)案全冊(cè)表格式
- 人教精通版三年級(jí)英語(yǔ)上冊(cè)各單元知識(shí)點(diǎn)匯總
- 教案:第三章 公共管理職能(《公共管理學(xué)》課程)
- 諾和關(guān)懷俱樂(lè)部對(duì)外介紹
- 保定市縣級(jí)地圖PPT可編輯矢量行政區(qū)劃(河北省)
評(píng)論
0/150
提交評(píng)論