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