版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 目錄</b></p><p> 題目介紹.............................................................................4</p><p> 1、題目.......................................................
2、.........................................4</p><p> 2、任務(wù)................................................................................................4</p><p> 3、要求...........................
3、.....................................................................4</p><p> 二、需求分析..............................................................................4</p><p> 1、應(yīng)用環(huán)境設(shè)定.........
4、........................................................................4</p><p> 2、用戶界面命令行界面.....................................................................4</p><p> 3、輸入方式............
5、.............................................................................5</p><p> 4、輸出方式.........................................................................................5</p><p>
6、5、數(shù)據(jù)存儲(chǔ)方式.................................................................................5</p><p> 6、程序功能.........................................................................................5</p>
7、<p> 概要設(shè)計(jì)..............................................................................5</p><p> 1、自定義數(shù)據(jù)類型.............................................................................5</p><
8、;p> 2、數(shù)據(jù)存儲(chǔ)結(jié)構(gòu).................................................................................6</p><p> 3、程序所用各函數(shù)功能.....................................................................6</p><p&
9、gt; 4、程序流程圖.....................................................................................8</p><p> 詳細(xì)設(shè)計(jì)..............................................................................9</p><
10、;p> 1、自定義數(shù)據(jù)結(jié)構(gòu).............................................................................9</p><p> 2、主函數(shù)main()............................................................................9 </p>
11、<p> 3、子函數(shù)一.......................................................................................11</p><p> 4、子函數(shù)二....................................................................................
12、...12</p><p> 5、子函數(shù)三.......................................................................................13</p><p> 6、case1.h.................................................................
13、........................14</p><p> 7、case2.h.........................................................................................15</p><p> 8、case3.h.......................................
14、..................................................16</p><p> 9、case4.h.........................................................................................17</p><p> 五、調(diào)試結(jié)果...............
15、..............................................................17</p><p> 進(jìn)入菜單界面...........................................................................................17</p><p> 選擇1,構(gòu)建只含根結(jié)點(diǎn)
16、的帶權(quán)二叉樹(shù)................................................18</p><p> 選擇2,輸出對(duì)應(yīng)二叉樹(shù)的赫夫曼樹(shù)....................................................18</p><p> 選擇3,測(cè)試赫夫曼樹(shù)在電報(bào)通信中的運(yùn)用.............................
17、...........19</p><p> 選擇4,退出菜單界面............................................................................19</p><p> 六、心得總結(jié)..................................................................
18、...........20</p><p> 七、參考資料.............................................................................21</p><p><b> 題目介紹</b></p><p><b> 1、 題目:</b><
19、/p><p><b> 赫夫曼樹(shù)的建立</b></p><p><b> 2、 任務(wù):</b></p><p> 按給定的數(shù)據(jù)建立赫夫曼樹(shù)</p><p><b> 3、 要求:</b></p><p> ?。?)可以建立函數(shù)輸入二叉樹(shù);</p
20、><p> ?。?)輸出其赫夫曼樹(shù)。</p><p> (3)在上交資料中請(qǐng)寫(xiě)明:存儲(chǔ)結(jié)構(gòu)、基本算法(可以使用程序流程圖)、輸入輸出、源程序、測(cè)試數(shù)據(jù)和結(jié)果。提供良好的菜單操作界面</p><p><b> 需求分析</b></p><p><b> 1、應(yīng)用環(huán)境設(shè)定:</b></p>
21、<p> 電報(bào)通信的數(shù)碼撥號(hào)時(shí),我通常會(huì)用到十進(jìn)制、八進(jìn)制、或者十六進(jìn)制數(shù)等。而輸入數(shù)字后,數(shù)據(jù)將以二進(jìn)制數(shù)編碼后進(jìn)行遠(yuǎn)距離通信傳送。電文傳輸過(guò)程中,為了提高通訊效率,通常會(huì)要求所傳輸?shù)亩M(jìn)制數(shù)碼盡可能的短。如果對(duì)每個(gè)字符設(shè)計(jì)長(zhǎng)度不等的編碼,且讓電文中出現(xiàn)次數(shù)較多的字符采用盡可能短的編碼,則傳送電文的總長(zhǎng)便可減少。但是同時(shí)要求各數(shù)字編碼之間互不為前綴,從而不出現(xiàn)誤碼。設(shè)計(jì)一個(gè)程序構(gòu)建一個(gè)赫夫曼樹(shù)輸出最優(yōu)傳輸碼。</
22、p><p> 2、用戶界面命令行界面:</p><p> ?。?)構(gòu)建只含根結(jié)點(diǎn)的帶權(quán)二叉樹(shù)。</p><p> ?。?)輸出第一部對(duì)應(yīng)二叉樹(shù)的赫夫曼樹(shù)。</p><p> ?。?)給定任意進(jìn)制(小于17)的數(shù)字在電報(bào)通信中各自出現(xiàn)的頻率,然后分別列出十個(gè)數(shù)字各自的最佳編碼(最佳前綴碼)以及打印出傳輸10m個(gè)按照給定頻率出現(xiàn)的十進(jìn)制數(shù)字時(shí)所需要
23、的二進(jìn)制數(shù)碼的個(gè)數(shù)。</p><p><b> 3、輸入方式:</b></p><p> ?。?)輸入二叉樹(shù)的個(gè)數(shù)(小于17)以及各個(gè)二叉樹(shù)的權(quán)值。</p><p> ?。?)輸入相關(guān)數(shù)據(jù):</p><p> ①、按順序輸入n個(gè)n個(gè)數(shù)字在電報(bào)中出現(xiàn)的頻率。</p><p> ?、?、輸入需要傳輸
24、的n進(jìn)制數(shù)字的個(gè)數(shù)參數(shù)m(總數(shù)為</p><p><b> 10m 個(gè))。</b></p><p><b> 4、輸出方式:</b></p><p> ?。?)輸出所創(chuàng)建赫夫曼樹(shù)中各結(jié)點(diǎn)的信息:(權(quán)值,父節(jié)點(diǎn)位置,左兒子位置,右兒子位置)。</p><p> ?。?)輸出相關(guān)數(shù)據(jù):</p&
25、gt;<p> ?。?)輸出0到n各個(gè)數(shù)字的最佳編碼(最佳前綴碼)。</p><p> (4)輸出所創(chuàng)建的赫夫曼樹(shù)的樹(shù)權(quán)值(WPL)。</p><p> (5)輸出所傳輸?shù)亩M(jìn)制數(shù)碼(電文長(zhǎng)度)的總長(zhǎng)度。</p><p><b> 5、數(shù)據(jù)存儲(chǔ)方式:</b></p><p> 全部在內(nèi)存存放,不使用
26、硬盤(pán)上的文件或其他數(shù)據(jù)源,程序執(zhí)行過(guò)程中和結(jié)束后不保存數(shù)據(jù)。</p><p><b> 6、程序功能:</b></p><p> ?。?)創(chuàng)建赫夫曼數(shù)。</p><p> ?。?)實(shí)現(xiàn)赫夫曼樹(shù)在電報(bào)通信中的應(yīng)用。</p><p><b> 三、概要設(shè)計(jì)</b></p><p&
27、gt; 1、自定義數(shù)據(jù)類型:</p><p><b> ?、?</b></p><p> typedef struct</p><p><b> {</b></p><p> int weight;/*假設(shè)葉子權(quán)值為整型*/</p><p> int lchild,
28、rchild,parent;/*左孩子,右孩子,父結(jié)點(diǎn)*/</p><p> }Htnode;/*哈夫曼樹(shù)結(jié)點(diǎn)類型*/</p><p><b> Htnode</b></p><p><b> ?、?</b></p><p> typedef struct</p><p&g
29、t;<b> {</b></p><p> char *code;/*編碼*/</p><p> int length;/*編碼的長(zhǎng)度*/</p><p> }CodeType;/*葉編碼類型 */</p><p><b> CodeType</b></p><p>
30、;<b> 2、數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)</b></p><p><b> ?、?</b></p><p> 用線性表存儲(chǔ)二叉樹(shù)各個(gè)結(jié)點(diǎn),通過(guò)線性表構(gòu)造赫夫曼樹(shù):</p><p> Htnode huftree[]</p><p><b> ?、?</b></p>&l
31、t;p> 用線性表存儲(chǔ)各葉子的二進(jìn)制編碼:</p><p> CodeType[]</p><p> 3、程序所用各函數(shù)功能:</p><p><b> ?。?)創(chuàng)建赫夫曼樹(shù)</b></p><p> void Hufcreating(Htnode huftree[], int n)</p>
32、<p> 輸入用線性表Htnode huftree[]存儲(chǔ)的n個(gè)只含根結(jié)點(diǎn)的二叉樹(shù),及其權(quán)值。函數(shù)將各個(gè)根結(jié)點(diǎn)的父節(jié)點(diǎn)及孩子都初始化為-1,表示赫夫曼樹(shù)創(chuàng)建之前,每個(gè)根結(jié)點(diǎn)不存在父節(jié)點(diǎn)和孩子,通過(guò)Selection()函數(shù)對(duì)各根結(jié)點(diǎn)的調(diào)用,逐步創(chuàng)建各個(gè)節(jié)點(diǎn)的父節(jié)點(diǎn),最后構(gòu)建成為赫夫曼樹(shù),n個(gè)二叉樹(shù)最終成為了赫夫曼樹(shù)的葉子。</p><p><b> 選擇最小兩個(gè)結(jié)點(diǎn)</b>&l
33、t;/p><p> void Selection(Htnode huftree[], int n, int *s1, int *s2)</p><p> 對(duì)線性表Htnode huftree[]存儲(chǔ)的n個(gè)只含根結(jié)點(diǎn)的二叉樹(shù)進(jìn)行選擇。選擇兩個(gè)權(quán)值最小的根結(jié)點(diǎn)分別作為新產(chǎn)生結(jié)點(diǎn)孩子,新結(jié)點(diǎn)作為兩最小結(jié)點(diǎn)的父結(jié)點(diǎn),繼續(xù)存儲(chǔ)到線性表Htnode huftree[]的n個(gè)根結(jié)點(diǎn)后面。循環(huán)調(diào)用Sele
34、ction()函數(shù)對(duì)父結(jié)點(diǎn)為-1的所有結(jié)點(diǎn)再做選擇,逐步構(gòu)建赫夫曼樹(shù)。</p><p> 給哈夫曼樹(shù)中各個(gè)節(jié)點(diǎn)的編碼</p><p> void HuftreeCode(Htnode huftree[], CodeType cd[], int n)</p><p> 對(duì)創(chuàng)建好的赫夫曼樹(shù)的葉子進(jìn)行編碼。</p><p><b>
35、 函數(shù)功能示意圖</b></p><p><b> 4、程序流程圖</b></p><p><b> 詳細(xì)設(shè)計(jì)</b></p><p><b> 1、自定義數(shù)據(jù)結(jié)構(gòu)</b></p><p> /*構(gòu)造數(shù)據(jù)類型: */</p><p>
36、; typedef struct</p><p><b> {</b></p><p> int weight;/*假設(shè)葉子權(quán)值為整型*/</p><p> int lchild,rchild,parent;/*左孩子,右孩子,父結(jié)點(diǎn)*/</p><p> }Htnode;/*哈夫曼樹(shù)結(jié)點(diǎn)類型*/</p&
37、gt;<p> typedef struct</p><p><b> {</b></p><p> char *code;/*編碼*/</p><p> int length;/*編碼的長(zhǎng)度*/</p><p> }CodeType;/*葉編碼類型 */</p><p>
38、<b> 主函數(shù)main()</b></p><p> #include "windows.h"</p><p> #include "data.h"</p><p> #include "stdio.h"</p><p> #include &quo
39、t;stdlib.h"</p><p> #include "s1s2.h"</p><p> #include "creatingheftree.h"</p><p> #include "leafcoding.h"</p><p> #include "
40、;case1.h"</p><p> #include "case2.h"</p><p> #include "case3.h"</p><p> #include "case4.h"</p><p> #include "math.h"<
41、;/p><p><b> /*主函數(shù):*/</b></p><p> void main()</p><p><b> {</b></p><p><b> char d;</b></p><p><b> int* n;</b&g
42、t;</p><p><b> int m=0;</b></p><p><b> n=&m;</b></p><p> Htnode huftree[34];</p><p> printf(" 《O(∩_∩)O~大家好!歡迎進(jìn)入
43、菜單界面!》\n\n");/*程序開(kāi)始*/</p><p> loop: printf (" * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");</p><p> printf (" * 1.構(gòu)建只含根結(jié)點(diǎn)的帶權(quán)二叉樹(shù)
44、 *\n"); </p><p> printf (" * 2.輸出對(duì)應(yīng)二叉樹(shù)的赫夫曼樹(shù)(必須先創(chuàng)建二叉樹(shù)) *\n"); </p><p> printf (" * 3.赫夫曼樹(shù)在電報(bào)通信中的應(yīng)用
45、 *\n");</p><p> printf (" * 4.退出 *\n"); </p><p> printf (" * * * * * * * * * * * * * * * * * * * * * *
46、 * * * * * * *\n"); </p><p> printf (" 請(qǐng)選擇指令:"); </p><p> fflush(stdin);</p><p> d=getchar();</p><p><b> switch(d)</b
47、></p><p><b> { </b></p><p> case '1': {</p><p> case1(huftree,n);</p><p> printf("\n\n按回車鍵返回菜單欄!");</p><p> fflush(s
48、tdin);</p><p> getchar();</p><p> system("cls");</p><p> goto loop;</p><p><b> }</b></p><p> case '2': {</p><
49、;p> case2(huftree,n);</p><p> printf("\n\n按回車鍵返回菜單欄!");</p><p> fflush(stdin);</p><p> getchar();</p><p> system("cls");</p><p>
50、; goto loop;</p><p><b> }</b></p><p> case '3': {</p><p><b> case3();</b></p><p> printf("\n\n按回車鍵返回菜單欄!");</p>&
51、lt;p> fflush(stdin);</p><p> getchar();</p><p> system("cls");</p><p> goto loop;</p><p><b> }</b></p><p> case '4':
52、 {</p><p><b> case4();</b></p><p> fflush(stdin);</p><p> getchar();</p><p> system("cls");</p><p><b> break;</b>&l
53、t;/p><p><b> }</b></p><p> default : {printf("\n╮(╯_╰)╭SORRY! 輸入值錯(cuò)誤!請(qǐng)?jiān)俅屋斎?\n");</p><p> goto loop;</p><p><b> }</b></p><
54、p><b> }</b></p><p><b> }</b></p><p> 3、子函數(shù)一:創(chuàng)建赫夫曼樹(shù)</p><p> void Hufcreating(Htnode huftree[], int n)</p><p><b> {</b></p&
55、gt;<p> int i,s1,s2,m,sum;</p><p> m = 2 * n - 1;/*計(jì)算哈夫曼樹(shù)的結(jié)點(diǎn)總數(shù)*/</p><p> for(i = 1; i <= n; i++)/*初始化每片葉子自成一棵樹(shù)*/</p><p><b> {</b></p><p> huf
56、tree[i].lchild = -1;</p><p> huftree[i].rchild =-1;</p><p> huftree[i].parent = -1;</p><p> }/*end for*/</p><p> for(i = n + 1; i <= m; i++)/*給剩下的節(jié)點(diǎn)左孩子,右孩子,父結(jié)點(diǎn)初&
57、lt;/p><p><b> 始化-1*/</b></p><p><b> {</b></p><p> huftree[i].weight = -1;</p><p> huftree[i].lchild = -1;</p><p> huftree[i].rchi
58、ld = -1;</p><p> huftree[i].parent = -1;</p><p> }/*end for*/</p><p> for(i=1; i<=n-1; i++)/*生成n-1個(gè)非葉子結(jié)點(diǎn)的循環(huán)&&*/</p><p><b> {</b></p>&
59、lt;p> Selection(huftree, n-1+i, &s1, &s2);</p><p> sum = huftree[s1].weight + huftree[s2].weight;/*求和,構(gòu)造父節(jié)點(diǎn)*/</p><p> huftree[n + i].weight = sum;</p><p> huftree[s1]
60、.parent = n+i;</p><p> huftree[s2].parent = n+i;/*最小的兩個(gè)節(jié)點(diǎn)的父節(jié)點(diǎn)的數(shù)組的下標(biāo)*/</p><p> huftree[n + i].lchild = s1;/*父節(jié)點(diǎn)的左孩子下標(biāo)*/</p><p> huftree[n + i].rchild = s2;/*父節(jié)點(diǎn)的右孩子下標(biāo)*/</p>
61、<p> }/*end for*/</p><p><b> }</b></p><p> 4、子函數(shù)二:選擇最小兩個(gè)節(jié)點(diǎn)</p><p> void Selection(Htnode huftree[], int n, int *s1, int *s2)</p><p><b> {&l
62、t;/b></p><p> int i,min1,min2;/*兩個(gè)最小數(shù)*/</p><p> for(i=1;i<n+1;i++)</p><p> if(huftree[i].parent==-1)</p><p><b> {</b></p><p> min1 =
63、huftree[i].weight;</p><p> *s1 = i;break;</p><p><b> }</b></p><p> for(i = 1; i <= n; i++)</p><p><b> {</b></p><p> if(huft
64、ree[i].parent == -1)</p><p><b> {</b></p><p> if(huftree[i].weight < min1)</p><p><b> {</b></p><p> min1 =huftree[i].weight;</p>&
65、lt;p><b> *s1 = i;</b></p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> min2 =huftree[i].weight;<
66、/p><p><b> *s2 = i;</b></p><p><b> }</b></p><p><b> } </b></p><p><b> }</b></p><p> for(i = 1; i <= n;
67、 i++)</p><p><b> {</b></p><p> if(huftree[i].parent == -1 && huftree[i].weight < min2 && huftree[i].weight >= min1 && *s1 != i)</p><p>&l
68、t;b> {</b></p><p> min2 = huftree[i].weight;</p><p><b> *s2 = i;</b></p><p><b> } </b></p><p><b> }</b></p>&
69、lt;p><b> }</b></p><p> 5、子函數(shù)三:求哈夫曼樹(shù)中各個(gè)節(jié)點(diǎn)的編碼</p><p> void HuftreeCode(Htnode huftree[], CodeType cd[], int n)</p><p><b> {</b></p><p> in
70、t i,c,f,k;</p><p> char temp[17];/*暫存葉子編碼字符串,最后需要轉(zhuǎn)置*/</p><p> for(i = 1; i <= n; i++)/*開(kāi)始求每個(gè)葉子結(jié)點(diǎn)的編碼*/ </p><p><b> {</b></p><p><b> c = 0;</
71、b></p><p> for(k = i, f = huftree[i].parent; f != -1; k = f,f = huftree[f].parent)</p><p><b> {</b></p><p> // printf("父節(jié)點(diǎn)%d\n",f);</p><p>
72、 if(huftree[f].lchild == k)/*左分支是0*/</p><p> temp[c++] = '0'; </p><p><b> else</b></p><p> temp[c++] = '1';/*右分支是1*/</p><p> }/*內(nèi)循環(huán)結(jié)束后,第
73、一份葉子編碼結(jié)束*/</p><p> cd[i].code = (char *)malloc(c+1); /*產(chǎn)生存儲(chǔ)編碼的空間*/</p><p> cd[i].code[c--] = '\0';</p><p><b> k = 0;</b></p><p> while(c >= 0
74、)</p><p> cd[i].code[k++] = temp[c--];/*將temp轉(zhuǎn)置到cd中*/</p><p> /*cd[i].leaf = huftree[i].ch;*/</p><p> cd[i].length = k;</p><p> }/*end for*/</p><p><
75、;b> }</b></p><p> 6、case1.h(構(gòu)建只含根結(jié)點(diǎn)的帶權(quán)二叉樹(shù))</p><p> void case1(Htnode huftree[],int *n)</p><p><b> {</b></p><p> system("cls");</p
76、><p> printf(" 《歡迎構(gòu)建二叉樹(shù)!O(∩_∩)O~》\n\n");</p><p><b> int i,m;</b></p><p> printf("請(qǐng)輸入只含根結(jié)點(diǎn)的帶權(quán)二叉樹(shù)的個(gè)數(shù):");</p><p> scanf(&q
77、uot;%d",&m);</p><p><b> *n=m;</b></p><p><b> if(m>17)</b></p><p> printf("\n╮(╯_╰)╭SORRY! 輸入值過(guò)大!請(qǐng)?jiān)俅屋斎?\n\n");</p><p>&l
78、t;b> else</b></p><p><b> {</b></p><p> printf("分別輸入每一個(gè)二叉樹(shù)的權(quán)值:(不含小數(shù))\n");</p><p> for(i=1;i<m+1;i++)</p><p><b> {</b>&
79、lt;/p><p> printf("第%d個(gè)二叉樹(shù)的權(quán)值:",i);</p><p> scanf("%d",&(huftree[i].weight));</p><p><b> }</b></p><p> Hufcreating(huftree, m);<
80、/p><p> printf("\n\n O(∩_∩)O~GOOD!只含根結(jié)點(diǎn)的帶權(quán)二叉樹(shù)構(gòu)建完畢!\n\n");</p><p><b> }</b></p><p><b> }</b></p><p> 7、case2.h(輸出對(duì)應(yīng)二叉樹(shù)的赫夫曼樹(shù)(必
81、須先創(chuàng)建二叉樹(shù)))</p><p> void case2(Htnode huftree[],int*n)</p><p><b> {</b></p><p> system("cls");</p><p><b> int i,m;</b></p>&l
82、t;p><b> m=*n;</b></p><p><b> if(m==0)</b></p><p> printf("╮(╯﹏╰)╭Sorry!您必須在選項(xiàng)一中先創(chuàng)建二叉樹(shù)。");</p><p><b> else</b></p><p&g
83、t;<b> {</b></p><p> printf(" 《歡迎進(jìn)入創(chuàng)建赫夫曼樹(shù)界面!O(∩_∩)O~》\n\n");</p><p> printf("分別輸出個(gè)結(jié)點(diǎn)在線性表中的詳細(xì)信息:('-1'表示該位置不存在)\n");</p><p> for(
84、i=1;i<2*m-1;i++)</p><p><b> {</b></p><p> //printf("第%d個(gè)結(jié)點(diǎn): (權(quán)值:%d,父結(jié)點(diǎn)位置:%d",i,huftree[i].weight,huftree[i].parent);</p><p> //printf(",左兒子位置:%d,
85、右兒子位置:%d)\n",huftree[i].lchild,huftree[i].rchild);</p><p> printf("第%d個(gè)結(jié)點(diǎn): (權(quán)值:%d,父結(jié)點(diǎn)位置:%d,左兒子位置:%d,右兒子位置:%d)\n",i,huftree[i].weight,huftree[i].parent,huftree[i].lchild,huftree[i].rchild);<
86、;/p><p><b> }</b></p><p> printf("\n\n O(∩_∩)O~GOOD!赫夫曼樹(shù)構(gòu)建完畢!\n");</p><p><b> }</b></p><p><b> }</b></p>
87、<p> printf("\n\n O(∩_∩)O~GOOD!赫夫曼樹(shù)構(gòu)建完畢!\n");</p><p><b> }</b></p><p><b> }</b></p><p> 8、case3.h(赫夫曼樹(shù)在電報(bào)通信中的應(yīng)用)</p>&
88、lt;p> void case3()</p><p><b> {</b></p><p> system("cls");</p><p> Htnode huftree[34];/*赫夫曼樹(shù)的數(shù)組*/</p><p> CodeType cd[17];/*葉的編碼數(shù)組*/</p
89、><p> int n,i,wpl=0, sum=0,m;/*節(jié)點(diǎn)權(quán)值的臨時(shí)存放及節(jié)點(diǎn)的個(gè)數(shù)*/ </p><p><b> int temp;</b></p><p><b> char j;</b></p><p> printf(" 《歡迎您使用赫夫
90、曼樹(shù)的通信編碼功能!O(∩_∩)O~》\n\n\n");</p><p> printf("開(kāi)始執(zhí)行!請(qǐng)按回車!\n");</p><p> fflush(stdin);</p><p> getchar();</p><p><b> while (1)</b></p>
91、<p><b> {</b></p><p> printf("輸入電報(bào)撥號(hào)中的數(shù)字進(jìn)制數(shù)(大于1小于17): ");/*輸入帶權(quán)節(jié)點(diǎn)的個(gè)數(shù)*/</p><p> scanf("%d",&n);</p><p> if(n < 17)</p><p
92、><b> {</b></p><p> printf("按提示順序分別輸入各個(gè)數(shù)字在通信中使用的頻率(百分比): \n");/*輸入帶權(quán)值的數(shù)*/</p><p> for(i =0; i < n; i++)</p><p><b> {</b></p><p
93、><b> if(i>9)</b></p><p> 9、case4.h(退出菜單界面)</p><p> void case4()</p><p><b> {</b></p><p> system("cls");</p><p>
94、; printf(" O(∩_∩)O~謝謝您的使用!\n");</p><p><b> }</b></p><p><b> 五、調(diào)試結(jié)果</b></p><p><b> 進(jìn)入菜單界面:</b></p><p&g
95、t; 選擇1,構(gòu)建只含根結(jié)點(diǎn)的帶權(quán)二叉樹(shù):</p><p> 返回菜單后選擇2,輸出對(duì)應(yīng)二叉樹(shù)的赫夫曼樹(shù):</p><p> 4、返回菜單后選擇3,測(cè)試赫夫曼樹(shù)在電報(bào)通信中的運(yùn)用:</p><p> 5、返回菜單后選擇4,退出菜單界面:</p><p><b> 六、心得總結(jié)</b></p>&l
96、t;p> 經(jīng)過(guò)本次課程設(shè)計(jì)的學(xué)習(xí),我對(duì)C語(yǔ)言、數(shù)據(jù)結(jié)構(gòu)對(duì)程序的編寫(xiě)有了更深刻的了解,一個(gè)完整的,健壯的程序需要有合理的算法和數(shù)據(jù)結(jié)構(gòu)作為基礎(chǔ),算法是程序的靈魂,是程序的主線,是實(shí)現(xiàn)問(wèn)題的方法和基本步驟的描述,而一個(gè)好的算法的實(shí)現(xiàn)要建立在合理熟練的邏輯結(jié)構(gòu)和存儲(chǔ)結(jié)構(gòu)上 </p><p> 編寫(xiě)代碼前之前要對(duì)所要編譯的程序有個(gè)整體的了解,需要用什么樣的邏輯結(jié)構(gòu)和存儲(chǔ)結(jié)構(gòu),用什么樣的算法去實(shí)現(xiàn)。要重視對(duì)結(jié)構(gòu)體
97、變量的運(yùn)用,因?yàn)闊o(wú)論是線形結(jié)構(gòu)還是鏈?zhǔn)浇Y(jié)構(gòu)都難免用到結(jié)構(gòu)體變量,結(jié)構(gòu)體中要包含所要描述問(wèn)題的各個(gè)數(shù)據(jù)域和指針域的指向;程序設(shè)計(jì)中最重要的也是最容易出錯(cuò)的地方是指針,因此要熟練掌握指針的使用方法,對(duì)整個(gè)程序中指針的指向,什么時(shí)候?yàn)榭眨写_切的了解,否則很容易出錯(cuò),但要是能將指針用好的話程序設(shè)計(jì)也就簡(jiǎn)單了許多;關(guān)于數(shù)組,在調(diào)用函數(shù)實(shí)參時(shí)也容易出錯(cuò),因?yàn)樵谟脭?shù)組做實(shí)參時(shí)傳遞的是數(shù)組指針,而這一點(diǎn)在本次課程設(shè)計(jì)中,當(dāng)我用到文件包含的方式,讓主函
98、數(shù)main()調(diào)用子文件中的子函數(shù)是,數(shù)組做參數(shù)傳遞過(guò)程中遇到了許多細(xì)節(jié)問(wèn)題,對(duì)編程的進(jìn)度造成了很大的阻礙。 </p><p> 要想編譯出一個(gè)好的程序真不是一件簡(jiǎn)單的事情,這次的作業(yè)又花了我大量的時(shí)間,但是無(wú)論是C語(yǔ)言還是數(shù)據(jù)結(jié)構(gòu),在學(xué)習(xí)過(guò)程中收獲最大的還是最后的大作業(yè),通過(guò)大作業(yè),對(duì)一些實(shí)際操作中算法的描述,數(shù)據(jù)結(jié)構(gòu)的使用才有了更深一層的了解,同時(shí)也積累了一些在解決實(shí)際問(wèn)題中的經(jīng)驗(yàn),處理一般的編譯,
99、連接錯(cuò)誤的方法,并能夠一步一步的進(jìn)行調(diào)試,編程的過(guò)程確實(shí)很辛苦,但是有了成果之后又覺(jué)得很輕松。所以感覺(jué)要是投入進(jìn)去的話編程還不是很難的,只要能夠把基礎(chǔ)的知識(shí)學(xué)好,多在操作中練習(xí),多積累些解決實(shí)際問(wèn)題的經(jīng)驗(yàn),以后再做這方面的工作就簡(jiǎn)單多了。</p><p> 課題設(shè)計(jì)使得我對(duì)這學(xué)期所學(xué)的專業(yè)課有了更為深刻的認(rèn)識(shí),對(duì)于我來(lái)說(shuō)這不僅僅是一次課程設(shè)計(jì),更重要的是使我明白了在學(xué)習(xí)的過(guò)程中,所有的問(wèn)題要一個(gè)人去面對(duì),有問(wèn)題
100、要想盡各種辦法解決,克服困難,在解決這些困難的過(guò)程中提高了我學(xué)習(xí)的能力、解決問(wèn)題的能力和實(shí)際工作的能力,學(xué)到了許多書(shū)本以外的認(rèn)識(shí)。通過(guò)這次課程設(shè)計(jì)我覺(jué)得我學(xué)習(xí)《數(shù)據(jù)結(jié)構(gòu)》的方法存在一定的弊端,《數(shù)據(jù)結(jié)構(gòu)》的效果直接影響到我對(duì)其它專業(yè)課的學(xué)習(xí)和今后業(yè)務(wù)的成長(zhǎng)。我覺(jué)得我對(duì)于《數(shù)據(jù)結(jié)構(gòu)》的學(xué)習(xí)不僅包括理論部分的學(xué)習(xí),還要讓我勤動(dòng)手,多實(shí)踐。最后我要衷心的感謝所有給予我?guī)椭椭笇?dǎo)的莫老師,我的同學(xué):雷艷雄、黎盛才、劉宇等人,沒(méi)有他們的幫助我的課
101、程設(shè)計(jì)也不會(huì)完成得這么順利!</p><p> 最后,通過(guò)這次課程設(shè)計(jì)使我懂得了理論與實(shí)際相結(jié)合是很重要的,只有理論知識(shí)是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識(shí)與實(shí)踐相結(jié)合起來(lái),從理論中得出結(jié)論,才能真正學(xué)以致用,從而提高自己的實(shí)際動(dòng)手能力和獨(dú)立思考的能力。而且,編程非??简?yàn)人的耐心和信心,這也在性格方面給了我很多磨練。通過(guò)這次課程設(shè)計(jì)之后,我把前面所學(xué)過(guò)的知識(shí)又重新溫故了一遍,可以說(shuō)是收獲不少。</p>
102、<p><b> 七、參考資料</b></p><p> 譚浩強(qiáng) 《C程序設(shè)計(jì)》 清華大學(xué)出版社</p><p> 譚浩強(qiáng) 《C++程序設(shè)計(jì)》 清華大學(xué)出版社</p><p> 嚴(yán)蔚敏、吳偉民 《數(shù)據(jù)結(jié)構(gòu)》
溫馨提示
- 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ù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)(赫夫曼樹(shù)的建立)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)----赫夫曼樹(shù)
- 數(shù)據(jù)結(jié)構(gòu)-赫夫曼樹(shù)-課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---哈夫曼樹(shù)的應(yīng)用
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--哈夫曼樹(shù)的應(yīng)用
- 應(yīng)用數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---哈夫曼樹(shù)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--- 哈夫曼樹(shù)的應(yīng)用
- 數(shù)據(jù)結(jié)構(gòu)赫夫曼樹(shù)2
- 哈夫曼樹(shù)_數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)
- 哈夫曼樹(shù)_數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---哈夫曼編碼
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)----哈夫曼編碼
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)哈夫曼編碼
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--哈夫曼編碼
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---哈夫曼編碼
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)哈夫曼編碼
- 數(shù)據(jù)結(jié)構(gòu) 課程設(shè)計(jì)之哈夫曼編碼
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--電文編碼譯碼(哈夫曼編碼)
- 赫夫曼編譯碼器數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)電文編碼譯碼(哈夫曼編碼)
評(píng)論
0/150
提交評(píng)論