版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、<p> 數(shù) 據(jù) 結(jié) 構(gòu) 課 程 設 計</p><p> 設計題目:基于三元組表的存儲結(jié)構(gòu)實現(xiàn)稀疏矩陣的應用</p><p> 學生姓名: </p><p> 專業(yè)班級: </p><p> 指導教師:
2、 </p><p> 完成時間: </p><p><b> 目 錄</b></p><p> 一、課題設計目的及意義1</p><p> 1.1、課題設計目的1</p><p> 1.2、課程設計意義
3、1</p><p><b> 二、需求分析1</b></p><p> 2.1設計函數(shù)建立稀疏矩陣及初始化值和輸出稀疏矩陣的值1</p><p> 2.2 構(gòu)造函數(shù)進行稀疏矩陣的轉(zhuǎn)置并輸出結(jié)果1</p><p> 2.3 構(gòu)造函數(shù)進行兩稀疏矩陣相加、減及相乘并輸出最終稀疏矩陣1</p>&
4、lt;p> 2.4 退出系統(tǒng)2</p><p><b> 三、項目設計2</b></p><p><b> 3.1結(jié)構(gòu)設計2</b></p><p><b> 3.2算法思想2</b></p><p><b> 3.3模塊圖2</b&g
5、t;</p><p><b> 3.4流程圖3</b></p><p><b> 四、系統(tǒng)實現(xiàn)4</b></p><p><b> 4.1主調(diào)函數(shù)4</b></p><p> 4.2三元組表建立4</p><p><b> 4
6、.3矩陣建立4</b></p><p> 4.4矩陣相加減及轉(zhuǎn)置5</p><p><b> 五、系統(tǒng)調(diào)試8</b></p><p> 5.1主菜單輸出8</p><p><b> 5.2矩陣相加9</b></p><p><b>
7、5.3矩陣轉(zhuǎn)置9</b></p><p> 5.4矩陣相減10</p><p><b> 六、實驗總結(jié)10</b></p><p><b> 七、附錄11</b></p><p> 一、課題設計目的及意義</p><p> 1.1、課題設計目的
8、</p><p> (1)掌握稀疏矩陣三元組表的存儲,創(chuàng)建,顯示,轉(zhuǎn)置等方法。</p><p> (2)利用三元組表實現(xiàn)矩陣的相加,減。 </p><p> (3)了解稀疏矩陣的相關(guān)應用。</p><p> 1.2、課程設計意義</p><p> 本次課題設計可以使我們更熟練的掌握有關(guān)三元組表及稀疏矩
9、陣的相關(guān)知識,比一般存儲方法節(jié)省了存儲空間,基于三元組表的存儲結(jié)構(gòu)實現(xiàn)了稀疏矩陣的基本操作。</p><p> 本次課程設計是本組成員共同努力而完成的,第一次進行課程設計是我們的探索過程,這個過程中,我們克服了一個個困難,在摸索中前行,我們相信通過此次課程設計我們每個人都會對數(shù)據(jù)結(jié)構(gòu)這門課程有更深一步的了解。</p><p><b> 二、需求分析</b><
10、/p><p> 稀疏矩陣是指那些多數(shù)元素為零的矩陣。利用“稀疏”特點進行存儲和計算可以大大節(jié)省存儲空間,提高計算效率。實現(xiàn)一個能進行稀疏矩陣基本運算的運算器。以“帶行邏輯鏈接信息”的三元組順序表表示稀疏矩陣,實現(xiàn)兩個矩陣相加、相減和相乘的運算。稀疏矩陣的輸入形式采用三元組表示,而運算結(jié)果的矩陣則通常以陣列形式列出。</p><p> 2.1設計函數(shù)建立稀疏矩陣及初始化值和輸出稀疏矩陣的值&
11、lt;/p><p> 本模塊要求設計函數(shù)建立稀疏矩陣并初始化,包括在三元組結(jié)構(gòu)下和十字鏈表結(jié)構(gòu)下。在創(chuàng)建稀疏矩陣時,需要設計兩個不同的函數(shù)分別在三元組和十字鏈表下創(chuàng)建稀疏矩陣,在輸入出現(xiàn)錯誤時,能夠?qū)﹀e誤進行判別處理,初始化稀疏矩陣都為空值。在設計輸出稀疏矩陣的值的函數(shù)時,也要針對兩種不同的情況,分別編制函數(shù),才能準確的輸出稀疏矩陣。在對稀疏矩陣進行初始化時,只輸入非零元素的值和它所在的所在行及所在列。在對稀疏矩陣
12、輸出時,以矩陣的完整形式輸出。</p><p> 2.2 構(gòu)造函數(shù)進行稀疏矩陣的轉(zhuǎn)置并輸出結(jié)果 </p><p> 本模塊要求設計函數(shù)進行稀疏矩陣的轉(zhuǎn)置并輸出轉(zhuǎn)置后的結(jié)果。在編寫函數(shù)時,要先定義一個相應的結(jié)構(gòu)體變量用于存放轉(zhuǎn)置后的矩陣,最后把此矩陣輸出。 </p><p> 2.3 構(gòu)造函數(shù)進行兩稀疏矩陣相加、減及相乘并輸出最終稀疏矩陣</p>
13、<p> 本模塊要求設計相加、減和相乘函數(shù)對兩個矩陣進行運算,并輸出最終的稀疏矩陣,定義相應的矩陣類型用于存放兩個矩陣操作后的結(jié)果矩陣,這個結(jié)果矩陣的行、列數(shù)需要綜合多方面情況來確定。這些函數(shù)也是整個程序的難點,需要靈活運用數(shù)組及指針的特點。</p><p><b> 2.4 退出系統(tǒng) </b></p><p> 本模塊要求設置選項能隨時結(jié)束程序的運行
14、,本程序中采用do-while循環(huán)。程序在計算機上顯示“提示信息”之后,由用戶在鍵盤上輸入演示程序中需要的相關(guān)信息及命令。 </p><p><b> 三、項目設計</b></p><p><b> 3.1結(jié)構(gòu)設計</b></p><p> 1、以“帶行邏輯鏈接信息”的三元組順序表表示稀疏矩陣,實現(xiàn)兩個矩陣相加、相減
15、和相乘的運算</p><p> 2、稀疏矩陣的輸入形式采用三元組表示,而運算結(jié)果的矩陣則通常以陣列形式列出。</p><p><b> 3.2算法思想</b></p><p> 1、首先應輸入矩陣的行數(shù)和列數(shù)。</p><p> 2、 以“帶行邏輯鏈接信息”的三元組順序表表數(shù),并判別給出的兩個矩陣的行、列數(shù)對于所
16、要求作的運算是否相匹配??稍O矩陣的行數(shù)和列數(shù)均不超過20。</p><p> 3、程序可以對三元組的輸入順序加以限制,例如,按行優(yōu)先。注意研究教材的算法,以便提高計算效率。5.在用三元組表示稀疏矩陣時,相加或相減所得結(jié)果矩陣應該另生成,乘積矩陣也可用二維數(shù)組存放。</p><p> 4、主函數(shù)設置循環(huán)和選擇語句進行運算循環(huán)和選擇,進行稀疏矩陣的加法,減法和轉(zhuǎn)置。</p>
17、<p><b> 3.3模塊圖</b></p><p><b> 3.4流程圖</b></p><p><b> 四、系統(tǒng)實現(xiàn)</b></p><p><b> 4.1主調(diào)函數(shù)</b></p><p> #include<stdi
18、o.h></p><p> #define smax 16</p><p> typedef int datatype;</p><p> typedef struct</p><p> { int i, j;</p><p> datatype v;</p><p>&l
19、t;b> } node;</b></p><p> typedef struct()</p><p> { int m ,n,t;</p><p> node data[smax];</p><p> }spmatrix;</p><p><b> 4.2三元組表建立</
20、b></p><p> void print(spmatrix *a)</p><p><b> {</b></p><p><b> int k;</b></p><p> for(k=0;k<a->t;k++)</p><p> printf(
21、"%d\t%d\t%d\n",a->data[k].i,a->data[k].j,a->data[k].v);</p><p><b> }</b></p><p><b> 4.3矩陣建立</b></p><p> void printjuzhen(spmatrix *a)&l
22、t;/p><p><b> {</b></p><p> int k,p,l;</p><p> int c[5][5]={{0},{0},{0},{0},{0}};</p><p> for(k=0;k<a->t;k++)</p><p> c[a->data[k].i]
23、[a->data[k].j]=a->data[k].v;</p><p> for(p=0;p<a->m;p++)</p><p> {for(l=0;l<a->n;l++)</p><p> printf("%d\t",c[p][l]);</p><p> printf(&qu
24、ot;\n");</p><p><b> }</b></p><p><b> }</b></p><p> 4.4矩陣相加減及轉(zhuǎn)置</p><p> pmatrix * xiangjia(spmatrix *a,spmatrix *b)</p><p>
25、<b> {</b></p><p> spmatrix *c;</p><p> int pa=0,pb=0,pc=0,sum=0;</p><p> c=(spmatrix *)malloc(sizeof(spmatrix));</p><p> if((a->m==b->m)&&
26、;(a->n==b->n))</p><p><b> {</b></p><p> c->m=a->m;</p><p> c->n=a->n;</p><p> while(pa<a->t&&pb<b->t)</p>&
27、lt;p><b> {</b></p><p> if(a->data[pa].i==b->data[pb].i)</p><p><b> {</b></p><p> if(a->data[pa].j==b->data[pb].j)</p><p><
28、b> {</b></p><p> sum=a->data[pa].v+b->data[pb].v;</p><p><b> if(sum)</b></p><p><b> {</b></p><p> c->data[pc].v=sum;</
29、p><p> c->data[pc].i=a->data[pa].i;</p><p> c->data[pc].j=a->data[pa].j;</p><p><b> pc++;</b></p><p><b> }</b></p><p>
30、<b> pa++;</b></p><p><b> pb++;</b></p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><
31、;p> if(a->data[pa].j<b->data[pb].j)</p><p><b> {</b></p><p> if(a->data[pa].v)</p><p><b> {</b></p><p> c->data[pc].v=a-&
32、gt;data[pa].v;</p><p> c->data[pc].i=a->data[pa].i;</p><p> c->data[pc].j=a->data[pa].j;</p><p> pc++;pa++;</p><p><b> }</b></p><
33、p><b> }</b></p><p><b> else</b></p><p> if(b->data[pb].v)</p><p><b> {</b></p><p> c->data[pc].v=b->data[pb].v;<
34、/p><p> c->data[pc].i=b->data[pb].i;</p><p> c->data[pc].j=b->data[pb].j;</p><p> pc++;pb++;</p><p><b> }</b></p><p><b> }&
35、lt;/b></p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> if(a->data[pa].i<b->data[pb].i)</p><
36、p><b> {</b></p><p> if(a->data[pa].v)</p><p><b> {</b></p><p> c->data[pc].v=a->data[pa].v;</p><p> c->data[pc].i=a->data
37、[pa].i;</p><p> c->data[pc].j=a->data[pa].j;</p><p> pc++;pa++;</p><p><b> }</b></p><p><b> }</b></p><p><b> else&
38、lt;/b></p><p> if(b->data[pb].v)</p><p><b> {</b></p><p> c->data[pc].v=b->data[pb].v;</p><p> c->data[pc].i=b->data[pb].i;</p>
39、<p> c->data[pc].j=b->data[pb].j;</p><p> pc++;pb++;</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p>
40、<p><b> }</b></p><p><b> else</b></p><p> return(0);</p><p> while(pa<a->t)</p><p><b> {</b></p><p> c
41、->data[pc].v=a->data[pa].v;</p><p> c->data[pc].i=a->data[pa].i;</p><p> c->data[pc].j=a->data[pa].j;</p><p> pc++;pa++;</p><p><b> }</b&
42、gt;</p><p> while(pb<b->t)</p><p><b> {</b></p><p> c->data[pc].v=b->data[pb].v;</p><p> c->data[pc].i=b->data[pb].i;</p><p
43、> c->data[pc].j=b->data[pb].j;</p><p> pc++;pb++;</p><p><b> }</b></p><p><b> c->t=pc;</b></p><p> return(c);</p><p&
44、gt;<b> 五、系統(tǒng)調(diào)試</b></p><p><b> 5.1主菜單輸出</b></p><p><b> 圖1主菜單輸出</b></p><p><b> 5.2矩陣相加</b></p><p><b> 圖2 矩陣相加&l
45、t;/b></p><p><b> 5.3矩陣轉(zhuǎn)置</b></p><p><b> 圖3 矩陣轉(zhuǎn)置</b></p><p><b> 5.4矩陣相減</b></p><p><b> 圖4矩陣相減</b></p><
46、p><b> 六、實驗總結(jié)</b></p><p> 稀疏矩陣這個課題在我們平時上課時我就感覺對于我而言這是比較困難的,矩陣的相關(guān)知識,三元組表的相關(guān)知識也一直讓我比較惶恐,從拿到這個課題開始我就知道這次的課程設計必須用盡全力去認真對待。我深知團隊合作的必要性,五個人的智慧總好過自己一個閉門造車,所以在課程設計過程中我們組進行了激烈地討論,齊心協(xié)力地把這次課程設計做好。首先,我們根
47、據(jù)課程設計所圍繞的程序進行編程以及調(diào)試;其次,根據(jù)課程設計的要求進行實驗目的以及實驗意義的分析;再次之,進行需求分析的解決;然后將項目設計的算法思想,基本算法,主函數(shù)調(diào)用一一呈現(xiàn)出來。這是我們第一次進行比較專業(yè)的關(guān)于課程設計方面的運算,關(guān)于三元組表以及稀疏函數(shù)的相關(guān)應用,課程設計過程中,我在利用三元組表實現(xiàn)稀疏矩陣相加的程序編制中,出現(xiàn)了很多問題,導致最后編譯、執(zhí)行、鏈接時不能成功,后來我查找了資料,去圖書館借了相關(guān)書籍,詢問老師及本組
48、同學,經(jīng)過了好多次的改進,最后,終于完成了程序的編制。 通過一周的課程設計使我對數(shù)據(jù)結(jié)構(gòu)有了更深的理解,對以前學習中不明白的,不理解的都有了進一步的理解。在實際操作中遇到了很多困難,但通過找資料,請教同學和老師,使我的動手能力和溝</p><p><b> 七、附錄</b></p><p><b> 參考文獻</b></p>&
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于三元組表的存儲結(jié)構(gòu)實現(xiàn)稀疏矩陣的應用課程設計
- 數(shù)據(jù)結(jié)構(gòu)課程設計----三元組表相加
- 數(shù)據(jù)結(jié)構(gòu)實驗報告(稀疏矩陣)
- 數(shù)據(jù)結(jié)構(gòu)課程設計-稀疏矩陣實現(xiàn)與應用
- 數(shù)據(jù)結(jié)構(gòu)--稀疏矩陣課程設計
- 數(shù)據(jù)結(jié)構(gòu)課程設計---稀疏矩陣
- 數(shù)據(jù)結(jié)構(gòu)-鄰接表存儲及遍歷-課程設計-實驗報告
- 數(shù)據(jù)結(jié)構(gòu)課程設計-- 稀疏矩陣的運算
- 數(shù)據(jù)結(jié)構(gòu)課程設計--稀疏矩陣的操作
- 數(shù)據(jù)結(jié)構(gòu)課程設計實驗報告
- 數(shù)據(jù)結(jié)構(gòu)與課程設計---稀疏矩陣
- 《數(shù)據(jù)結(jié)構(gòu)》課程設計報告--稀疏矩陣運算器
- 數(shù)據(jù)結(jié)構(gòu)課程設計報告--稀疏矩陣運算器
- 數(shù)據(jù)結(jié)構(gòu)課程設計報告 稀疏矩陣運算器
- 數(shù)據(jù)結(jié)構(gòu)課程設計論文----稀疏矩陣的轉(zhuǎn)置
- 數(shù)據(jù)結(jié)構(gòu)-串的存儲表示及基本操作--課程設計-實驗報告
- 數(shù)據(jù)結(jié)構(gòu)課程設計報告 稀疏矩陣運算器設計
- 數(shù)據(jù)結(jié)構(gòu)課程設計--稀疏矩陣運算器
- 數(shù)據(jù)結(jié)構(gòu)課程設計實驗報告(赫夫曼編碼)
- 數(shù)據(jù)結(jié)構(gòu)實踐環(huán)節(jié)實驗報告(課程設計)
評論
0/150
提交評論