




已閱讀5頁(yè),還剩18頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告題目:十字鏈表成為存儲(chǔ)結(jié)構(gòu),實(shí)現(xiàn)稀疏矩陣的求和運(yùn)算學(xué)生姓名:張旋班級(jí):軟件三班 學(xué)號(hào):201213040304指導(dǎo)教師: 吳小平 一、需求分析 1.問(wèn)題描述:要求:十字鏈表下的稀疏矩陣的加、轉(zhuǎn)、乘的實(shí)現(xiàn)。 2.基本功能 實(shí)現(xiàn)十字鏈表下的轉(zhuǎn)置,乘法,加法運(yùn)算。 3.輸入輸出 (1)設(shè)計(jì)函數(shù)建立稀疏矩陣,初始化值。(2)設(shè)計(jì)函數(shù)輸出稀疏矩陣的值。(3)構(gòu)造函數(shù)進(jìn)行兩個(gè)稀疏矩陣相加,輸出最終的稀疏矩陣。(4)構(gòu)造函數(shù)進(jìn)行兩個(gè)稀疏矩陣的相乘,輸出最終的稀疏矩陣。(5)構(gòu)造函數(shù)進(jìn)行稀疏矩陣的轉(zhuǎn)置,并輸出結(jié)果。(6)退出系統(tǒng)。二、 概要設(shè)計(jì)1.設(shè)計(jì)思路:本實(shí)驗(yàn)要求在三元組,十字鏈表下實(shí)現(xiàn)稀疏矩陣的加、轉(zhuǎn)、乘。首先要進(jìn)行矩陣的初始化操作,定義三元組和十字鏈表的元素對(duì)象。寫出轉(zhuǎn)置,加法,乘法的操作函數(shù)。通過(guò)主函數(shù)調(diào)用實(shí)現(xiàn)在一個(gè)程序下進(jìn)行矩陣的運(yùn)算操作。 2.數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì):抽象數(shù)據(jù)類型稀疏矩陣的定義如下:ADT SparseMatrix 數(shù)據(jù)對(duì)象:D=aij | i=1,2,m; j=1,2,.,n;aijElemset, m和n分別稱為矩陣的行數(shù)和列數(shù)。數(shù)據(jù)關(guān)系:R=Row,ColRow= | 1=i=m, 1=j=n-1 Col= | 1=i=m-1, 1=j=n基本操作:CreateSMatrix(&M); 操作結(jié)果:創(chuàng)建稀疏矩陣M。DestroySMatrix(&M); 初始條件:稀疏矩陣M存在。 操作結(jié)果:銷毀稀疏矩陣M。PrintSMatrix(M); 初始條件:稀疏矩陣M存在。 操作結(jié)果:輸出稀疏矩陣M。AddSMatrix(M,N,&Q); 初始條件:稀疏矩陣M與N的行數(shù)和列數(shù)對(duì)應(yīng)相等 操作結(jié)果:求稀疏矩陣的和Q=M+N。MultSMatrix(M,N,Q); 初始條件:稀疏矩陣M的列數(shù)等于N的行數(shù)。 操作結(jié)果:求稀疏矩陣乘積Q=M*N。 TransposeSMatrix(M,T); 初始條件:稀疏矩陣M存在。 操作結(jié)果:求稀疏矩陣M的轉(zhuǎn)置矩陣T。 ADT SparseMatrix 3.軟件結(jié)構(gòu)設(shè)計(jì):(1)主程序模塊:Void main()初始化;do 接受命令;處理命令;while(“命令”=“退出”);(2)稀疏矩陣模塊實(shí)現(xiàn)矩陣的相加bool AddSMatrix();實(shí)現(xiàn)矩陣的相乘bool MultSMatrix();實(shí)驗(yàn)矩陣的轉(zhuǎn)置bool TransposeSMatrix();(3)十字鏈表模塊 創(chuàng)建十字鏈表bool CreateSMatrix_OL(CrossList & M); 輸出十字鏈表bool OutPutSMatrix_OL(CrossList T);(4) 主程序模塊 稀疏矩陣模塊 十字鏈表模塊三、 詳細(xì)設(shè)計(jì) 1. 定義程序中所有用到的數(shù)據(jù)及其數(shù)據(jù)結(jié)構(gòu),及其基本操作的實(shí)現(xiàn);typedef struct int i, j; int e; Triple; / 定義三元組的元素typedef struct Triple dataMAXSIZE + 1; int mu, nu, tu; TSMatrix; / 定義普通三元組對(duì)象typedef struct Triple dataMAXSIZE + 2; int rposMAXROW + 1; int mu, nu, tu; RLSMatrix; / 定義帶鏈接信息的三元組對(duì)象typedef struct OLNode / 定義十字鏈表元素 int i, j; int e; struct OLNode *right, *down; / 該非零元所在行表和列表的后繼元素 OLNode, *OLink; / 定義十字鏈表元素typedef struct / 定義十字鏈表對(duì)象結(jié)構(gòu)體 OLink *rhead, *chead; int mu, nu, tu; / 系數(shù)矩陣的行數(shù),列數(shù),和非零元素個(gè)數(shù) CrossList; / 定義十字鏈表對(duì)象結(jié)構(gòu)體2主函數(shù)int main() int t; cout.fill(*); cout setw(80) *; cout.fill( ); cout setw(50) *歡迎使用矩陣運(yùn)算程序* endl; /輸出頭菜單 cout.fill(*); cout setw(80) *; cout.fill( ); cout 請(qǐng)選擇要進(jìn)行的操作: endl; cout 1:矩陣的轉(zhuǎn)置。 endl; cout 2:矩陣的加法。 endl; cout 3:矩陣的乘法。 endl; cout 4:退出程序。 endl;while(t)cout請(qǐng)輸入您要進(jìn)行的操作:t;switch(t)case 1:TransposeSMatrix(); /調(diào)用矩陣轉(zhuǎn)置函數(shù)break;case 2:AddSMatrix(); /調(diào)用矩陣相加函數(shù)break;case 3: MultSMatrix(); /調(diào)用矩陣相乘函數(shù)break;case 4:t=0;break;return 0;矩陣的轉(zhuǎn)置函數(shù)bool TransposeSMatrix() / 求矩陣的轉(zhuǎn)置矩陣 TSMatrix M, T; /定義預(yù)轉(zhuǎn)置的矩陣 InPutTSMatrix(M, 0); /輸入矩陣 int numMAXROW + 1; int cpotMAXROW + 1; / 構(gòu)建輔助數(shù)組 int q, p, t; T.tu = M.tu; T.mu = M.nu; T.nu = M.mu; if (T.tu) for (int col = 1; col = M.nu; col+) numcol = 0; for (t = 1; t = M.tu; t+) +numM.datat.j; cpot1 = 1; for (int i = 2; i = M.nu; i+) cpoti = cpoti - 1 + numi - 1; / 求出每一列中非零元素在三元組中出現(xiàn)的位置 for (p = 1; p = M.tu; p+) int col = M.datap.j; q = cpotcol; T.dataq.i = M.datap.j; T.dataq.j = M.datap.i; T.dataq.e = M.datap.e; +cpotcol; cout 輸入矩陣的轉(zhuǎn)置矩陣為 endl; OutPutSMatrix(T); return true;bool Count(RLSMatrix &T) int numMAXROW + 1; for (int row = 1; row = T.mu; row+) numrow = 0; for (int col = 1; col = T.tu; col+) +numT.datacol.i; T.rpos1 = 1; for (int i = 2; i = T.mu; i+) T.rposi = T.rposi - 1 + numi - 1; / 求取每一行中非零元素在三元組中出現(xiàn)的位置 return true;矩陣的乘法函數(shù)bool MultSMatrix() / 兩個(gè)矩陣相乘 RLSMatrix M, N, Q; / 構(gòu)建三個(gè)帶“鏈接信息”的三元組表示的數(shù)組 InPutTSMatrix(M, 1); / 用普通三元組形式輸入數(shù)組 InPutTSMatrix(N, 1); Count(M); Count(N); cout 輸入的兩矩陣的乘矩陣為: endl; if (M.nu != N.mu) return false; Q.mu = M.mu; Q.nu = N.nu; Q.tu = 0; / Q初始化 int ctempMAXROW + 1; / 輔助數(shù)組 int arow, tp, p, brow, t, q, ccol; if (M.tu * N.tu) / Q是非零矩陣 for (arow = 1; arow = M.mu; arow+) /memset(ctemp,0,N.nu); for (int x = 1; x = N.nu; x+) / 當(dāng)前行各元素累加器清零 ctempx = 0; Q.rposarow = Q.tu + 1; / 當(dāng)前行的首個(gè)非零元素在三元組中的位置為此行前所有非零元素+1 if (arow M.mu) tp = M.rposarow + 1; else tp = M.tu + 1; for (p = M.rposarow; p tp; p+) / 對(duì)當(dāng)前行每個(gè)非零元素進(jìn)行操作 brow = M.datap.j; / 在N中找到i值也操作元素的j值相等的行 if (brow N.mu) t = N.rposbrow + 1; else t = N.tu + 1; for (q = N.rposbrow; q t; q+) / 對(duì)找出的行當(dāng)每個(gè)非零元素進(jìn)行操作 ccol = N.dataq.j; ctempccol += M.datap.e * N.dataq.e; / 將乘得到對(duì)應(yīng)值放在相應(yīng)的元素累加器里面 for (ccol = 1; ccol MAXSIZE) return false; Q.dataQ.tu.e = ctempccol; Q.dataQ.tu.i = arow; Q.dataQ.tu.j = ccol; OutPutSMatrix(Q); return true;矩陣的加法函數(shù)bool AddSMatrix() /矩陣的加法 CrossList M, N; / 創(chuàng)建兩個(gè)十字鏈表對(duì)象,并初始化 CreateSMatrix_OL(M); CreateSMatrix_OL(N); cout 輸入的兩矩陣的和矩陣為: endl; OLink pa, pb, pre, hlMAXROW + 1; /定義輔助指針,pa,pb分別為M,N當(dāng)前比較的元素,pre為pa的前驅(qū)元素 for (int x = 1; x = M.nu; x+) hlx = M.cheadx; for (int k = 1; k e = pb-e; p-i = pb-i; p-j = pb-j; if (NULL = pa | pa-j pb-j) / 當(dāng)M此行已經(jīng)檢查完或者pb因該放在pa前面 if (NULL = pre) M.rheadp-i = p; else pre-right = p; p-right = pa; pre = p; if (NULL = M.cheadp-j) / 進(jìn)行列插入 M.cheadp-j = p; p-down = NULL; else p-down = hlp-j-down; hlp-j-down = p; hlp-j = p; pb = pb-right; else if (NULL != pa) & pa-j j) / 如果此時(shí)的pb元素因該放在pa后面,則取以后的pa再來(lái)比較 pre = pa; pa = pa-right; else if (pa-j = pb-j) / 如果pa,pb位于同一個(gè)位置上,則將值相加 pa-e += pb-e; if (!pa-e) / 如果相加后的和為0,則刪除此節(jié)點(diǎn),同時(shí)改變此元素坐在行,列的前驅(qū)元素的相應(yīng)值 if (NULL = pre) / 修改行前驅(qū)元素值 M.rheadpa-i = pa-right; else pre-right = pa-right; p = pa; pa = pa-right; if (M.cheadp-j = p) M.cheadp-j = hlp-j = p-down; / 修改列前驅(qū)元素值 else hlp-j-down = p-down; free(p); pb = pb-right; else pa = pa-right; pb = pb-right; OutPutSMatrix_OL(M); return true;創(chuàng)建十字鏈表bool CreateSMatrix_OL(CrossList & M)/ 創(chuàng)建十字鏈表 int x, y, m; cout 請(qǐng)輸入矩陣的行,列,及非零元素個(gè)數(shù) M.mu M.nu M.tu; if (!(M.rhead = (OLink*) malloc(M.mu + 1) * sizeof (OLink) exit(0); if (!(M.chead = (OLink*) malloc(M.nu + 1) * sizeof (OLink) exit(0); for (x = 0; x = M.mu; x+) M.rheadx = NULL; / 初始化各行,列頭指針,分別為NULL for (x = 0; x = M.nu; x+) M.cheadx = NULL; cout 請(qǐng)按三元組的格式輸入數(shù)組: endl; for (int i = 1; i x y m; / 按任意順序輸入非零元,(普通三元組形式輸入) OLink p, q; if (!(p = (OLink) malloc(sizeof (OLNode) exit(0); / 開(kāi)辟新節(jié)點(diǎn),用來(lái)存儲(chǔ)輸入的新元素p-i = x; p-j = y; p-e = m; if (M.rheadx = NULL | M.rheadx-j y) p-right = M.rheadx; M.rheadx = p; else for (q = M.rheadx; (q-right) & (q-right-j right); / 查找節(jié)點(diǎn)在行表中的插入位置 p-right = q-right; q-right = p; / 完成行插入 if (M.cheady = NULL | M.cheady-i x) p-down = M.cheady; M.cheady = p; else for (q = M.cheady; (q-down) & (q-down-i down); / 查找節(jié)點(diǎn)在列表中的插入位置 p-down = q-down; q-down = p; / 完成列插入 return true;十字鏈表的輸出bool OutPutSMatrix_OL(CrossList T)/ 輸出十字鏈表,用普通數(shù)組形式輸出 for (int i = 1; i = T.mu; i+) OLink p = T.rheadi; for (int j = 1; j j) cout setw(3) e; p = p-right; else cout setw(3) 0; cout endl; return true;3.主要函數(shù)的程序流程圖,實(shí)現(xiàn)設(shè)計(jì)中主程序和其他子模塊的算法,以流程圖的形式表示。 矩陣的相加流程圖 矩陣的相乘流程圖 矩陣轉(zhuǎn)置的流程圖 主函數(shù)流程圖4. 畫(huà)出函數(shù)之間的調(diào)用關(guān)系圖。 Main AddSMatrix TransposeSMatrix MultSMatrix CreateSMatrix_OL InPutTSMatrix OutPutSMatrix InPutTSMatrix OutPutSMatrix_OL 四、 調(diào)試分析 1.實(shí)際完成的情況說(shuō)明(完成的功能,支持的數(shù)據(jù)類型等);完成了稀疏矩陣的建立,初始化及輸出值的操作。 實(shí)現(xiàn)三元組,十字鏈表下的稀疏矩陣的加法,乘法以及轉(zhuǎn)置運(yùn)算。2.程序的性能分析,包括時(shí)空分析;能應(yīng)對(duì)一般小的錯(cuò)誤輸入,如果復(fù)雜則自動(dòng)退出程序3.上機(jī)過(guò)程中出現(xiàn)的問(wèn)題及其解決方案; 1.起始有錯(cuò)誤,設(shè)定的變量名相同。經(jīng)檢查,改正。2一些邏輯錯(cuò)誤。經(jīng)討論改正。運(yùn)行出現(xiàn)部分語(yǔ)法錯(cuò)誤修正4.程序中可以改進(jìn)的地方說(shuō)明;程序在運(yùn)行中一旦出現(xiàn)矩陣數(shù)據(jù)格式錯(cuò)誤如輸入漢字,則程序自動(dòng)退出。需要重新啟動(dòng)。更新程序?qū)Ω噱e(cuò)誤輸入情況的分析能力。5.程序中可以擴(kuò)充的功能及設(shè)計(jì)實(shí)現(xiàn)假想。對(duì)退出操作的擴(kuò)充在主菜單下,用戶輸入4回車選擇退出程序是,詢問(wèn)是否真的退出系統(tǒng),如果是,則即退出系統(tǒng),否則顯示continue并且返回主菜單。為了方便由于誤按導(dǎo)致程序退出。在退出時(shí)可以增加一段感謝使用本程序的結(jié)束語(yǔ)。五、測(cè)試結(jié)果系統(tǒng)運(yùn)行主界面輸入需要執(zhí)行的操作1矩陣的轉(zhuǎn)置輸入需要執(zhí)行的操作2矩陣的加法輸入需要執(zhí)行的操作3矩陣的乘法輸入錯(cuò)誤操作時(shí)需要重新選擇退出操作六、用戶手冊(cè)1.本程序執(zhí)行文件為:crosslist.exe2進(jìn)入本系統(tǒng)之后,隨即顯示系統(tǒng)主菜單界面。用戶可在該界面下輸入各子菜單前對(duì)應(yīng)的數(shù)字并按回車,執(zhí)行相應(yīng)子菜單命令3執(zhí)行操作時(shí),按要求輸入數(shù)字。彼此之間用空格隔開(kāi)。4執(zhí)行加法運(yùn)算時(shí),輸入的兩個(gè)矩陣的行必須相同,列數(shù)也必須相同。這是基本的矩陣運(yùn)算常識(shí)。5.執(zhí)行乘法運(yùn)算時(shí),第一個(gè)矩陣的行數(shù)和第二個(gè)矩陣的列數(shù)相同。6.當(dāng)輸入錯(cuò)誤時(shí)請(qǐng)嘗試退出程序重新運(yùn)行。請(qǐng)盡量遵守矩陣運(yùn)算的規(guī)則輸入有效的運(yùn)算。七、體會(huì)與自我評(píng)價(jià) 我選的上機(jī)題目是實(shí)現(xiàn)三元組,十字鏈表下的轉(zhuǎn)置,乘法,加法運(yùn)算。對(duì)這個(gè)題目,我覺(jué)得有點(diǎn)難,因?yàn)槲覀償?shù)據(jù)結(jié)構(gòu)這一部分并沒(méi)有講,可是選題必須是每人選擇一個(gè)不許選重。有點(diǎn)無(wú)奈吧,當(dāng)作是考驗(yàn)了。各種資料收集,各種代碼整合。各種錯(cuò)誤。雖然上機(jī)的時(shí)間只有短短兩個(gè)星期,但從中學(xué)到了不少知識(shí)。數(shù)據(jù)結(jié)構(gòu)可以說(shuō)是計(jì)算機(jī)里一門基礎(chǔ)課程,對(duì)于以后的學(xué)習(xí)尤為重要。所以我們一定要把基礎(chǔ)學(xué)扎實(shí),這兩周的上機(jī)幫我們重新鞏固基礎(chǔ)知識(shí),提高了我們專業(yè)的動(dòng)手實(shí)踐能力。在實(shí)踐的過(guò)程中我們應(yīng)當(dāng)有良好的規(guī)劃,每天完成一小部分。盡量減少操作的盲目性,提高我們學(xué)習(xí)的效率。有個(gè)總體的大綱來(lái)逐步實(shí)現(xiàn)。我也曾經(jīng)犯過(guò)這種錯(cuò)誤。每個(gè)函數(shù)都做出來(lái)部分。結(jié)果都沒(méi)做完。所以計(jì)劃很重要在實(shí)驗(yàn)中我們要培養(yǎng)自己獨(dú)立的思考能力和解決問(wèn)題的能力。培養(yǎng)這種能力主要看我們對(duì)待這次實(shí)驗(yàn)的態(tài)度。我們要把它當(dāng)作以后工作時(shí)接的項(xiàng)目一樣認(rèn)真對(duì)待。積極的朝著更好地一面發(fā)展不斷的完善程序。不能馬馬虎虎隨便應(yīng)付一下。 通過(guò)這次實(shí)驗(yàn)我也認(rèn)識(shí)到了數(shù)據(jù)結(jié)構(gòu)這門課程的重要性,以及C語(yǔ)言功能的強(qiáng)大。它可以令計(jì)算機(jī)執(zhí)行各種你想要的操作。當(dāng)然前提是你的技術(shù)水平。使我深刻的認(rèn)識(shí)到要學(xué)好數(shù)據(jù)結(jié)構(gòu)這門課程,為了以后打好堅(jiān)實(shí)的基礎(chǔ)。提高自己的動(dòng)手實(shí)踐能力,把所學(xué)的理論知識(shí)和實(shí)踐相結(jié)合。就像古人云,紙上得來(lái)終覺(jué)淺,得知此事要躬行。為了以后的計(jì)算機(jī)道路。不斷的提高自身的專業(yè)素養(yǎng)。奮斗。 也希望在今后的學(xué)習(xí)生活中向老師學(xué)到更多的知識(shí)。不斷的充實(shí)自己。努力改正自己的壞毛病,做個(gè)奮發(fā)向上的大學(xué)生。源代碼:#include #include using namespace std;const int MAXSIZE = 100; / 定義非零元素的對(duì)多個(gè)數(shù)const int MAXROW = 10; / 定義數(shù)組的行數(shù)的最大值 typedef struct int i, j; int e; Triple; / 定義三元組的元素typedef struct Triple dataMAXSIZE + 1; int mu, nu, tu; TSMatrix; / 定義普通三元組對(duì)象typedef struct Triple dataMAXSIZE + 2; int rposMAXROW + 1; int mu, nu, tu; RLSMatrix; / 定義帶鏈接信息的三元組對(duì)象typedef struct OLNode / 定義十字鏈表元素 int i, j; int e; struct OLNode *right, *down; / 該非零元所在行表和列表的后繼元素 OLNode, *OLink; / 定義十字鏈表元素typedef struct / 定義十字鏈表對(duì)象結(jié)構(gòu)體 OLink *rhead, *chead; int mu, nu, tu; / 系數(shù)矩陣的行數(shù),列數(shù),和非零元素個(gè)數(shù) CrossList; / 定義十字鏈表對(duì)象結(jié)構(gòu)體template bool InPutTSMatrix(P & T, int y) /輸入矩陣,按三元組格式輸入 cout 輸入矩陣的行,列和非零元素個(gè)數(shù): T.mu T.nu T.tu; cout 請(qǐng)輸出非零元素的位置和值: endl; for (int k = 1; k T.datak.i T.datak.j T.datak.e; return true;template bool OutPutSMatrix(P T) int m, n, k = 1; for (m = 0; m T.mu; m+) for (n = 0; n T.nu; n+) if (T.datak.i - 1) = m & (T.datak.j - 1) = n) cout.width(4); cout T.datak+.e; else cout.width(4); cout 0; cout endl; return true;/ 輸出矩陣,按標(biāo)準(zhǔn)格式輸出bool TransposeSMatrix() / 求矩陣的轉(zhuǎn)置矩陣 TSMatrix M, T; /定義預(yù)轉(zhuǎn)置的矩陣 InPutTSMatrix(M, 0); /輸入矩陣 int numMAXROW + 1; int cpotMAXROW + 1; / 構(gòu)建輔助數(shù)組 int q, p, t; T.tu = M.tu; T.mu = M.nu; T.nu = M.mu; if (T.tu) for (int col = 1; col = M.nu; col+) numcol = 0; for (t = 1; t = M.tu; t+) +numM.datat.j; cpot1 = 1; for (int i = 2; i = M.nu; i+) cpoti = cpoti - 1 + numi - 1; / 求出每一列中非零元素在三元組中出現(xiàn)的位置 for (p = 1; p = M.tu; p+) int col = M.datap.j; q = cpotcol; T.dataq.i = M.datap.j; T.dataq.j = M.datap.i; T.dataq.e = M.datap.e; +cpotcol; cout 輸入矩陣的轉(zhuǎn)置矩陣為 endl; OutPutSMatrix(T); return true;bool Count(RLSMatrix &T) int numMAXROW + 1; for (int row = 1; row = T.mu; row+) numrow = 0; for (int col = 1; col = T.tu; col+) +numT.datacol.i; T.rpos1 = 1; for (int i = 2; i = T.mu; i+) T.rposi = T.rposi - 1 + numi - 1; / 求取每一行中非零元素在三元組中出現(xiàn)的位置 return true;bool MultSMatrix() / 兩個(gè)矩陣相乘 RLSMatrix M, N, Q; / 構(gòu)建三個(gè)帶“鏈接信息”的三元組表示的數(shù)組 InPutTSMatrix(M, 1); / 用普通三元組形式輸入數(shù)組 InPutTSMatrix(N, 1); Count(M); Count(N); cout 輸入的兩矩陣的乘矩陣為: endl; if (M.nu != N.mu) return false; Q.mu = M.mu; Q.nu = N.nu; Q.tu = 0; / Q初始化 int ctempMAXROW + 1; / 輔助數(shù)組 int arow, tp, p, brow, t, q, ccol; if (M.tu * N.tu) / Q是非零矩陣 for (arow = 1; arow = M.mu; arow+) /memset(ctemp,0,N.nu); for (int x = 1; x = N.nu; x+) / 當(dāng)前行各元素累加器清零 ctempx = 0; Q.rposarow = Q.tu + 1; / 當(dāng)前行的首個(gè)非零元素在三元組中的位置為此行前所有非零元素+1 if (arow M.mu) tp = M.rposarow + 1; else tp = M.tu + 1; for (p = M.rposarow; p tp; p+) / 對(duì)當(dāng)前行每個(gè)非零元素進(jìn)行操作 brow = M.datap.j; / 在N中找到i值也操作元素的j值相等的行 if (brow N.mu) t = N.rposbrow + 1; else t = N.tu + 1; for (q = N.rposbrow; q t; q+) / 對(duì)找出的行當(dāng)每個(gè)非零元素進(jìn)行操作 ccol = N.dataq.j; ctempccol += M.datap.e * N.dataq.e; / 將乘得到對(duì)應(yīng)值放在相應(yīng)的元素累加器里面 for (ccol = 1; ccol MAXSIZE) return false; Q.dataQ.tu.e = ctempccol; Q.dataQ.tu.i = arow; Q.dataQ.tu.j = ccol; OutPutSMatrix(Q); return true;bool CreateSMatrix_OL(CrossList & M)/ 創(chuàng)建十字鏈表 int x, y, m; cout 請(qǐng)輸入矩陣的行,列,及非零元素個(gè)數(shù) M.mu M.nu M.tu; if (!(M.rhead = (OLink*) malloc(M.mu + 1) * sizeof (OLink) exit(0); if (!(M.chead = (OLink*) malloc(M.nu + 1) * sizeof (OLink) exit(0); for (x = 0; x = M.mu; x+) M.rheadx = NULL; / 初始化各行,列頭指針,分別為NULL for (x = 0; x = M.nu; x+) M.cheadx = NULL; cout 請(qǐng)按三元組的格式輸入數(shù)組: endl; for (int i = 1; i x y m; / 按任意順序輸入非零元,(普通三元組形式輸入) OLink p, q; if (!(p = (OLink) malloc(sizeof (OLNode) exit(0); / 開(kāi)辟新節(jié)點(diǎn),用來(lái)存儲(chǔ)輸入的新元素p-i = x; p-j = y; p-e = m; if (M.rheadx = NULL | M.rheadx-j y) p-right = M.rheadx; M.rheadx = p; else for (q = M.rheadx; (q-right) & (q-right-j right); / 查找節(jié)點(diǎn)在行表中的插入位置 p-righ
溫馨提示
- 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至2030年中國(guó)防滑毛刺丁腈手套市場(chǎng)分析及競(jìng)爭(zhēng)策略研究報(bào)告
- 2025至2030年中國(guó)貼片式普通整流二極管市場(chǎng)分析及競(jìng)爭(zhēng)策略研究報(bào)告
- 2025至2030年中國(guó)膩?zhàn)踊沂袌?chǎng)分析及競(jìng)爭(zhēng)策略研究報(bào)告
- 2025至2030年中國(guó)筆式變倍顯微鏡市場(chǎng)分析及競(jìng)爭(zhēng)策略研究報(bào)告
- 2025至2030年中國(guó)皇刮漿筆市場(chǎng)分析及競(jìng)爭(zhēng)策略研究報(bào)告
- 2025至2030年中國(guó)環(huán)保廢舊輪胎磨粉機(jī)市場(chǎng)分析及競(jìng)爭(zhēng)策略研究報(bào)告
- 2025至2030年中國(guó)滌棉紡織品市場(chǎng)分析及競(jìng)爭(zhēng)策略研究報(bào)告
- 2025至2030年中國(guó)氣動(dòng)工具零件市場(chǎng)分析及競(jìng)爭(zhēng)策略研究報(bào)告
- 2025至2030年中國(guó)智能型住宅管理系統(tǒng)市場(chǎng)分析及競(jìng)爭(zhēng)策略研究報(bào)告
- 2025至2030年中國(guó)手自動(dòng)封口機(jī)市場(chǎng)分析及競(jìng)爭(zhēng)策略研究報(bào)告
- 孤獨(dú)癥相關(guān)培訓(xùn)課件
- 2025至2030中國(guó)數(shù)據(jù)中心液冷行業(yè)發(fā)展趨勢(shì)分析與未來(lái)投資戰(zhàn)略咨詢研究報(bào)告
- Unit 2 Home Sweet Home 第5課時(shí)(Section B 2a-3c) 2025-2026學(xué)年人教版英語(yǔ)八年級(jí)下冊(cè)
- 高水平研究型大學(xué)建設(shè)中教育、科技與人才的協(xié)同發(fā)展研究
- 山西省2025年普通高中學(xué)業(yè)水平合格性考試適應(yīng)性測(cè)試化學(xué)試卷(含答案)
- 房屋市政工程生產(chǎn)安全重大事故隱患臺(tái)賬
- 2025年中考一模卷(貴州)英語(yǔ)試題含答案解析
- T/ISEAA 006-2024大模型系統(tǒng)安全測(cè)評(píng)要求
- 礦山股東協(xié)議書(shū)
- 數(shù)字媒體藝術(shù)與設(shè)計(jì)原理2025年考試試卷及答案
- 小學(xué)一年級(jí)語(yǔ)文下冊(cè)語(yǔ)文看拼音寫詞語(yǔ)全冊(cè)
評(píng)論
0/150
提交評(píng)論