版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p> 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告</p><p> 題 目: 哈夫曼編/譯碼器</p><p> 院系名稱: 計(jì)算機(jī)學(xué)院</p><p> 專業(yè)名稱: 軟件工程</p><p> 班 級(jí): 1101班</p><p> 學(xué)生姓名:
2、 </p><p> 學(xué)號(hào)(8位): </p><p> 指導(dǎo)教師: </p><p> 設(shè)計(jì)起止時(shí)間:2012年12月3日~2012年12月14日</p><p><b> 一. 設(shè)計(jì)目的</b></p><p> 1.鞏固和加深對(duì)數(shù)據(jù)結(jié)構(gòu)的理解,提高綜合運(yùn)用
3、本課程所學(xué)知識(shí)的能力;</p><p> 2.深化對(duì)算法課程中基本概念、理論和方法的理解;</p><p> 3.鞏固構(gòu)造哈夫曼樹的算法;</p><p> 4.設(shè)計(jì)試驗(yàn)用程序?qū)嶒?yàn)哈夫曼樹的構(gòu)造,編碼和譯碼。</p><p><b> 二. 設(shè)計(jì)內(nèi)容</b></p><p> 利用哈夫曼
4、編碼進(jìn)行信息通信可以大大提高信道利用率,縮短信息傳輸時(shí)間,降低傳輸成本。但是,這要求在發(fā)送端通過一個(gè)編碼系統(tǒng)對(duì)待傳數(shù)據(jù)預(yù)先編碼,在接收端將傳來的數(shù)據(jù)進(jìn)行譯碼(復(fù)原)。試為這樣的信息收發(fā)站寫一個(gè)哈夫曼的編/譯碼器。</p><p><b> 三.概要設(shè)計(jì)</b></p><p><b> 1.功能模塊圖;</b></p><
5、p> 2.各個(gè)模塊詳細(xì)的功能描述。</p><p><b> ?。?)主程序模塊</b></p><p><b> 打印菜單;</b></p><p> 讓用戶選擇是編碼還是譯碼;</p><p> 讓用戶決定是否觀看一些信息。</p><p><b>
6、; 密碼模塊</b></p><p> void Login()</p><p> 密碼函數(shù),用戶輸入用戶名和密碼,密碼正確方能進(jìn)入系統(tǒng),否則重新輸入。</p><p><b> ?。?)編碼模塊</b></p><p> void OpenSourceFile(char s[])</p>
7、;<p> 打開源文件,并將其內(nèi)容存到s[]中</p><p> void Code(char s[],char str[],char code[],int freq[],HFMTree *HT,CodeNode HC[])</p><p> 編碼函數(shù),調(diào)用編碼所需的所有函數(shù)</p><p> void Search(char s[],char
8、 str[],int freq[])</p><p> 查找各個(gè)字符,將其存到str[]中,并統(tǒng)計(jì)其出現(xiàn)的頻數(shù),即權(quán)值,存放在freq[]中</p><p> void CreateHFMTree(HFMTree *HT,int freq[])</p><p><b> 創(chuàng)建哈夫曼樹</b></p><p> v
9、oid HFMCode(HFMTree HT,CodeNode HC[],char str[])</p><p> 按左0右1的順序進(jìn)行編碼</p><p> AllCode(s,HC,code)</p><p> 將所有字符的編碼連起來,存放到code[]中</p><p> Save(code)</p><p&
10、gt; 將編碼結(jié)果保存到文件code.txt中</p><p><b> (4)譯碼模塊</b></p><p> void DeCode(char code[],char str[],char ss[],HFMTree *HT,CodeNode HC[]) </p><p> 譯碼函數(shù),調(diào)用譯碼所需的所有函數(shù)</p>&
11、lt;p> void OpenCodeFile(char code[])</p><p><b> 打開編碼文件</b></p><p> Decoding(code,*HT,str,ss)</p><p> 從根結(jié)點(diǎn)開始按編碼順序進(jìn)行譯碼</p><p><b> Save(ss)</b
12、></p><p> 將譯碼結(jié)果保存到文件decode.txt中</p><p><b> 四.詳細(xì)設(shè)計(jì)</b></p><p> 1.功能函數(shù)的調(diào)用關(guān)系圖</p><p> 2.各功能函數(shù)的數(shù)據(jù)流程圖</p><p> ?。?)創(chuàng)建哈夫曼樹函數(shù)</p><p&g
13、t;<b> 是</b></p><p><b> 否</b></p><p><b> 否</b></p><p><b> 是</b></p><p><b> (2)編碼函數(shù)</b></p><p&
14、gt;<b> 是</b></p><p><b> 否</b></p><p><b> 是</b></p><p> 是 否</p><p><b> 3.重點(diǎn)設(shè)計(jì)及編碼</b></p>
15、;<p><b> (1)密碼設(shè)計(jì):</b></p><p> void Login()</p><p><b> {</b></p><p> char username[15];</p><p> char password[9];</p><p>
16、;<b> char c;</b></p><p> int i = 0;</p><p> printf("\n\n請(qǐng)輸入用戶名:");</p><p> gets(username);</p><p> printf("\n請(qǐng)輸入密碼:");</p>&
17、lt;p> while ((c=getch())!='\r')</p><p><b> {</b></p><p> if (i<8 && isprint(c))</p><p><b> {</b></p><p> password[i++
18、] = c;</p><p> putchar('*');</p><p><b> }</b></p><p><b> }</b></p><p> putchar('\n');</p><p> password[i] =
19、39;\0';</p><p> if(!(strcmp(password,"04113027")))</p><p><b> {</b></p><p> printf("\n\n恭喜您,登陸成功!\n\n歡迎使用該系統(tǒng)!\n\n");</p><p> sys
20、tem("pause");</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> printf("\n\n密碼錯(cuò)誤,您無權(quán)使用該系統(tǒng)!\n\n請(qǐng)重新輸入!
21、\n\n");</p><p> system("pause");</p><p> system("cls");</p><p><b> Login();</b></p><p><b> }</b></p><p&
22、gt;<b> }</b></p><p><b> 創(chuàng)建哈夫曼樹:</b></p><p> void CreateHFMTree(HFMTree *HT,int freq[])</p><p><b> {</b></p><p><b> int i
23、;</b></p><p> HFMTree p,HT1,HT2;</p><p> p=*HT=(HFMTree)malloc(sizeof(HFMNode)); </p><p> p->next=p->LChild=p->RChild=p->Parent=NULL;</p><p> for
24、(i=1;i<2*n-1;i++)</p><p><b> {</b></p><p> p->next=(HFMTree)malloc(sizeof(HFMNode));</p><p> p=p->next;</p><p> p->next=p->LChild=p->
25、RChild=p->Parent=NULL;</p><p><b> }</b></p><p> for(i=0,p=*HT;i<n;i++)</p><p><b> {</b></p><p> p->weight=freq[i];</p><
26、p> p=p->next;</p><p><b> }</b></p><p> for(i=n;i<2*n-1;i++)</p><p><b> {</b></p><p> Select(*HT,i,&HT1,&HT2);</p>
27、<p> HT1->Parent=HT2->Parent=p;</p><p> p->LChild=HT1;</p><p> p->RChild=HT2;</p><p> p->weight=HT1->weight+HT2->weight;</p><p> p=p-
28、>next; </p><p><b> } </b></p><p><b> }</b></p><p><b> 測(cè)試數(shù)據(jù)及運(yùn)行結(jié)果</b></p><p> 1.正常測(cè)試數(shù)據(jù)和運(yùn)行結(jié)果</p><p> 2.異常測(cè)試數(shù)據(jù)及運(yùn)行結(jié)果
29、</p><p> 六.調(diào)試情況,設(shè)計(jì)技巧及體會(huì)</p><p><b> 改進(jìn)方案</b></p><p> 通過一周的課程設(shè)計(jì)使我對(duì)哈夫曼樹以及哈夫曼編碼有了更深的認(rèn)識(shí)和理解,也使我更加明白哈夫曼編碼譯碼在信息技術(shù)中的重要性和地位。</p><p> 由于時(shí)間問題,對(duì)于哈夫曼的壓縮和解壓縮暫時(shí)不能實(shí)現(xiàn)了。這也
30、是我比較遺憾的一件事了。不過在空閑時(shí)間我還會(huì)繼續(xù)研究這個(gè)問題的。</p><p><b> 2.體會(huì)</b></p><p> 開始的時(shí)候,代碼中有許多的錯(cuò)誤,讓我束手無策,最后我耐心的一步一步慢慢地改正錯(cuò)誤才讓我看到了希望。在實(shí)現(xiàn)文章的讀入時(shí), 由于對(duì)文件不是太熟悉,只好翻開C語言書本仿照其模式編寫。許多的錯(cuò)誤讓我明白了細(xì)心是非常重要的。同時(shí),對(duì)于編程者而言,思
31、路清晰也是相當(dāng)重要的。在適當(dāng)?shù)臅r(shí)候和同學(xué)一起交流探討是一個(gè)十分好的學(xué)習(xí)機(jī)會(huì)。及時(shí)的向老師請(qǐng)教也是很有幫助的,因?yàn)楫吘刮覀兪切率?,?duì)于某些問題很難弄清楚。而且,某些錯(cuò)誤對(duì)于我們來說有時(shí)候想半天都弄不來,但老師幾下下就搞好了,這樣就更加有效地節(jié)約了時(shí)間。</p><p> 這次課程設(shè)計(jì)不但讓我又學(xué)得了一些編程知識(shí),還學(xué)會(huì)了系統(tǒng)的做一份課程設(shè)計(jì)報(bào)告, 學(xué)會(huì)了如何更好的畫流程圖,明白了做事情只有認(rèn)真,才能真正做得更好!
32、</p><p> 通過這次課程設(shè)計(jì),我看清楚了自己的編程功底和動(dòng)手能力還不如人意,這主要是平時(shí)實(shí)踐太少的緣故。我想,在即將到來的寒假中,我會(huì)努力嘗試編寫一些較大的程序。由于我們是軟件工程專業(yè)的學(xué)生,就應(yīng)該更加嚴(yán)格要求自己。</p><p><b> 七.參考文獻(xiàn)</b></p><p> 1. 耿國華主編,《數(shù)據(jù)結(jié)構(gòu)——C語言描述》,高
33、等教育出版社,2005年</p><p> 2. 陳銳,《數(shù)據(jù)結(jié)構(gòu)(C語言版)》,清華大學(xué)出版社 2012年</p><p><b> 附錄</b></p><p> #include <stdio.h> </p><p> #include <stdlib.h></p>&
34、lt;p> #include <string.h> </p><p> #include <conio.h></p><p> #include <ctype.h></p><p> #define M 500 </p><p> #define N 128</p><p
35、> typedef struct node </p><p><b> {</b></p><p> int weight;//權(quán)值</p><p> struct node *Parent,*LChild,*RChild;//雙親結(jié)點(diǎn),左孩子結(jié)點(diǎn),右孩子結(jié)點(diǎn)</p><p> struct nod
36、e *next;//下一個(gè)結(jié)點(diǎn)</p><p> }HFMNode,*HFMTree;</p><p> typedef struct </p><p><b> {</b></p><p> char ch;//字符</p><p> char code[N+1];//編碼&
37、lt;/p><p> int flag;//標(biāo)記</p><p> }CodeNode;</p><p> int n;//葉子結(jié)點(diǎn)個(gè)數(shù)</p><p><b> //密碼</b></p><p> void Login()</p><p><b>
38、 {</b></p><p> char username[15];</p><p> char password[9];</p><p><b> char c;</b></p><p> int i = 0;</p><p> printf("\n\n請(qǐng)輸入用
39、戶名:");</p><p> gets(username);</p><p> printf("\n請(qǐng)輸入密碼:");</p><p> while ((c=getch())!='\r')</p><p><b> {</b></p><p>
40、; if (i<8 && isprint(c))</p><p><b> {</b></p><p> password[i++] = c;</p><p> putchar('*');</p><p><b> }</b></p>&
41、lt;p><b> }</b></p><p> putchar('\n');</p><p> password[i] = '\0';</p><p> if(!(strcmp(password,"04113027")))</p><p><b&g
42、t; {</b></p><p> printf("\n\n恭喜您,登陸成功!\n\n歡迎使用該系統(tǒng)!\n\n");</p><p> system("pause");</p><p><b> }</b></p><p><b> else<
43、/b></p><p><b> {</b></p><p> printf("\n\n密碼錯(cuò)誤,您無權(quán)使用該系統(tǒng)!\n\n請(qǐng)重新輸入!\n\n");</p><p> system("pause");</p><p> system("cls"
44、);</p><p><b> Login();</b></p><p><b> }</b></p><p><b> }</b></p><p> void Menu(void)//菜單</p><p><b> {</
45、b></p><p> printf("\t\t****************************************\n");</p><p> printf("\t\t***** *****\n");</p><p> printf("
46、;\t\t***** 歡迎進(jìn)入 *****\n");</p><p> printf("\t\t***** 哈夫曼編/譯碼系統(tǒng) *****\n");</p><p> printf("\t\t***** *****\n"
47、;);</p><p> printf("\t\t***** 1.顯示源文件。 *****\n");</p><p> printf("\t\t***** 2.編碼。 *****\n");</p><p> printf("\t\t*****
48、 3.譯碼。 *****\n");</p><p> printf("\t\t***** 4.顯示哈夫曼信息。 *****\n");</p><p> printf("\t\t***** 0.退出。 *****\n");</p>
49、<p> printf("\t\t***** *****\n");</p><p> printf("\t\t****************************************\n");</p><p> printf("\t\t*****
50、 *****\n");</p><p> printf("\t\t***** 請(qǐng)輸入相應(yīng)操作的序號(hào)(0-3) *****\n");</p><p> printf("\t\t***** *****\n");</p>
51、<p> printf("\t\t****************************************\n");</p><p><b> }</b></p><p><b> //打開源文件</b></p><p> void OpenSourceFile(char
52、s[])</p><p><b> {</b></p><p><b> FILE *fp;</b></p><p><b> int i=0;</b></p><p> system("cls");</p><p> i
53、f((fp=fopen("source.txt","rt"))==NULL)//打開文件source.txt</p><p><b> {</b></p><p> printf("打開文件失??!\n");</p><p><b> exit(1);</b>
54、;</p><p><b> }</b></p><p> s[i++]=fgetc(fp);</p><p> while(s[i-1]!=EOF)//將文件中的字符串存入s[]中</p><p> s[i++]=fgetc(fp);</p><p> s[i]='\0
55、9;; </p><p> fclose(fp);</p><p><b> }</b></p><p><b> //存儲(chǔ)文件</b></p><p> void Save(char s[])</p><p><b> {</b></
56、p><p> char name[10];</p><p><b> FILE *fp;</b></p><p> printf("請(qǐng)輸入要保存的文件名:");</p><p> gets(name);</p><p> if((fp=fopen(name,"w
57、t"))==NULL)</p><p><b> { </b></p><p> printf("存儲(chǔ)文件失??!\n");</p><p><b> exit(1);</b></p><p><b> }</b></p>&l
58、t;p> fputs(s,fp);</p><p> printf("\n文件保存成功,文件名為:%s。\n\n",name);</p><p> system("pause");</p><p> fclose(fp);</p><p><b> }</b><
59、;/p><p> void Search(char s[],char str[],int freq[])//查找各個(gè)字符,并統(tǒng)計(jì)其出現(xiàn)的頻數(shù)</p><p><b> {</b></p><p> int i,j,k=0;</p><p> for(i=0;i<N;i++)//初始化freq[]</
60、p><p> freq[i]=0; </p><p> for(i=0;s[i];i++)</p><p><b> {</b></p><p> for(j=0;j<k;j++)//統(tǒng)計(jì)各個(gè)字符出現(xiàn)的頻數(shù),即權(quán)值,并將其存放在freq[]</p><p> if(str[j]==
61、s[i]) </p><p><b> { </b></p><p> freq[j]++; </p><p><b> break; </b></p><p><b> }</b></p><p> if(j==k)//查找各個(gè)字符,并將其
62、存放在str[]中</p><p><b> {</b></p><p> str[k]=s[i];</p><p> freq[k++]++; </p><p><b> }</b></p><p><b> }</b></p>
63、<p> str[k]='\0';</p><p> n=k-1;//n為查找后字符的總個(gè)數(shù)</p><p><b> }</b></p><p> void Select(HFMTree HT,int k,HFMTree *HT1,HFMTree *HT2)//查找權(quán)值最小的兩個(gè)結(jié)點(diǎn)</p>
64、<p><b> {</b></p><p> inti,min;</p><p> HFMTreep;</p><p><b> min=1000;</b></p><p> for(i=0,p=HT;i<k;i++,p=p->next)//查找權(quán)值最小
65、的結(jié)點(diǎn)</p><p> if(p->weight<min&&p->Parent==0)</p><p><b> {</b></p><p> min=p->weight;</p><p><b> *HT1=p;</b></p>&l
66、t;p><b> }</b></p><p><b> min=1000;</b></p><p> for(i=0,p=HT;i<k;i++,p=p->next)//查找權(quán)值次小的結(jié)點(diǎn)</p><p> if(p->weight<min&&p->Parent
67、==0&&p!=*HT1)</p><p><b> {</b></p><p> min=p->weight;</p><p><b> *HT2=p;</b></p><p><b> }</b></p><p><
68、;b> }</b></p><p> void CreateHFMTree(HFMTree *HT,int freq[])//創(chuàng)建哈夫曼樹</p><p><b> {</b></p><p><b> int i;</b></p><p> HFMTree p,HT1
69、,HT2;</p><p> p=*HT=(HFMTree)malloc(sizeof(HFMNode)); //申請(qǐng)空間</p><p> p->next=p->LChild=p->RChild=p->Parent=NULL;//初始化</p><p> for(i=1;i<2*n-1;i++)//申請(qǐng)空間,并初始化所有結(jié)點(diǎn)
70、,共2n-1個(gè)</p><p><b> {</b></p><p> p->next=(HFMTree)malloc(sizeof(HFMNode));</p><p> p=p->next;</p><p> p->next=p->LChild=p->RChild=p->P
71、arent=NULL;</p><p><b> }</b></p><p> for(i=0,p=*HT;i<n;i++)//給前n個(gè)結(jié)點(diǎn)賦權(quán)值</p><p><b> {</b></p><p> p->weight=freq[i];</p><p&g
72、t; p=p->next;</p><p><b> }</b></p><p> for(i=n;i<2*n-1;i++)//開始創(chuàng)建哈夫曼樹</p><p><b> {</b></p><p> Select(*HT,i,&HT1,&HT2);//查找
73、權(quán)值最小的兩個(gè)結(jié)點(diǎn)</p><p> HT1->Parent=HT2->Parent=p;</p><p> p->LChild=HT1;</p><p> p->RChild=HT2;</p><p> p->weight=HT1->weight+HT2->weight;//更改雙親結(jié)
74、點(diǎn)的權(quán)值</p><p> p=p->next; </p><p><b> } </b></p><p><b> }</b></p><p> void HFMCode(HFMTree HT,CodeNode HC[],char str[])//編碼</p>&l
75、t;p><b> {</b></p><p><b> int i; </b></p><p> HFMTree q,p=HT; </p><p> for(i=0;i<n;i++)</p><p><b> {</b></p><p&
76、gt; HC[i].ch=str[i];</p><p> HC[i].code[n-1]='\0';//處理編碼的結(jié)束符</p><p><b> }</b></p><p> for(i=0;i<n;i++)//開始解碼</p><p><b> {</b>&
77、lt;/p><p> HC[i].flag=n-1;//根結(jié)點(diǎn)</p><p> for(q=p;q->Parent;q=q->Parent)</p><p> if(q==q->Parent->LChild)</p><p> HC[i].code[--HC[i].flag]='0';//左0
78、</p><p><b> else </b></p><p> HC[i].code[--HC[i].flag]='1';//右1 </p><p> p=p->next; </p><p><b> }</b></p><p><b&
79、gt; }</b></p><p> void AllCode(char s[],CodeNode HC[],char code[])//所有的編碼</p><p><b> {</b></p><p><b> int i,j;</b></p><p> code[0]=&
80、#39;\0';</p><p> for(i=0;s[i];i++)</p><p> for(j=0;j<n;j++) </p><p> if(s[i]==HC[j].ch)</p><p> strcpy(code+strlen(code),HC[j].code+HC[j].flag);</p>&
81、lt;p> //將所有字符的編碼連接起來存放到code[]中</p><p><b> } </b></p><p> void Decoding(char code[],HFMTree HT,char str[],char ss[])//譯碼</p><p><b> {</b></p>&
82、lt;p> int i,j,k=0;</p><p> HFMTree root,p,q; </p><p> for(root=HT;root->Parent;root=root->Parent); //從根結(jié)點(diǎn)開始按編碼順序進(jìn)行譯碼</p><p> for(i=0,p=root;code[i];i++)</p><
83、p><b> {</b></p><p> if(code[i]=='0')</p><p> p=p->LChild; </p><p><b> else</b></p><p> p=p->RChild;</p><p>
84、if(p->LChild==NULL&&p->RChild==NULL)</p><p><b> {</b></p><p> for(j=0,q=HT;q!=p;q=q->next,j++)</p><p><b> ; </b></p><p> s
85、s[k++]=str[j];//到根結(jié)點(diǎn)時(shí)將該字符存放到ss[]中</p><p> p=root;//回到根結(jié)點(diǎn)</p><p><b> }</b></p><p><b> } </b></p><p> ss[k]='\0'; </p><p
86、><b> }</b></p><p> void Code(char s[],char str[],char code[],int freq[],HFMTree *HT,CodeNode HC[]) //編碼函數(shù)</p><p><b> { </b></p><p> system("cls&
87、quot;);</p><p> Search(s,str,freq);//查找各個(gè)字符,并統(tǒng)計(jì)其出現(xiàn)的頻數(shù)</p><p> CreateHFMTree(HT,freq);//創(chuàng)建哈夫曼樹</p><p> HFMCode(*HT,HC,str);//編碼</p><p> AllCode(s,HC,code);//將
88、各個(gè)字符的編碼連起來</p><p> printf("\n哈夫曼編碼為:\n\n");</p><p> puts(code);//輸出編碼</p><p> printf("\n保存編碼,"); </p><p> Save(code);</p><p><
89、;b> }</b></p><p> void DeCode(char code[],char str[],char ss[],HFMTree *HT,CodeNode HC[]) //譯碼函數(shù)</p><p><b> {</b></p><p><b> FILE *fp;</b></p
90、><p><b> int i=0;</b></p><p> system("cls");</p><p> if((fp=fopen("code.txt","rt"))==NULL)//打開編碼文件code.txt</p><p><b>
91、 {</b></p><p> printf("打開文件失敗!\n");</p><p><b> exit(1);</b></p><p><b> }</b></p><p> fclose(fp);</p><p> Decod
92、ing(code,*HT,str,ss);//譯碼 </p><p> printf("\n譯碼后的字符串為:\n\n"); </p><p> puts(ss);//輸出譯碼后的字符串</p><p> printf("\n保存譯碼,");</p><p><b> Save(s
93、s);</b></p><p><b> }</b></p><p> //將創(chuàng)建好的哈弗曼樹的字符,權(quán)值和密碼存入文件hfmtree.txt中</p><p> void HFMFile(int freq[],CodeNode HC[])</p><p><b> {</b>&
94、lt;/p><p><b> int i;</b></p><p><b> FILE *fp;</b></p><p> if ((fp=fopen("hfmtree.txt","wt"))==NULL)</p><p><b> {</
95、b></p><p> printf("打開文件出錯(cuò)!\n");</p><p><b> exit(0);</b></p><p><b> }</b></p><p> for(i=0;i<n;i++)</p><p> fpri
96、ntf(fp,"%c\t%d\t%s\n",HC[i].ch,freq[i],&(HC[i].code[HC[i].flag]));</p><p> printf("\n哈夫曼樹創(chuàng)建成功,并已存入文件hfmtree.txt中。\n\n");</p><p> fclose(fp);</p><p><b&g
97、t; }</b></p><p> void main() </p><p><b> {</b></p><p> char s[M];//存放從文件source.txt中讀取的字符串</p><p> char ss[M];//存放譯碼后的字符串</p><p>
98、char str[N];//存放統(tǒng)計(jì)后的所有字符</p><p> int i,freq[N];//存放統(tǒng)計(jì)后的各個(gè)字符出現(xiàn)的頻數(shù),即權(quán)值</p><p> char code[M];//存放從文件code.txt中讀取的編碼</p><p> int choice;</p><p> HFMTree HT;</p>
99、<p> CodeNode HC[N];</p><p><b> Login();</b></p><p><b> do</b></p><p><b> {</b></p><p> system("cls");</p&g
100、t;<p> printf("\n"); </p><p> Menu();//調(diào)用菜單函數(shù)</p><p> printf("\n");</p><p> scanf("%d",&choice);//選擇要執(zhí)行的操作</p><p> getc
101、har();</p><p> switch(choice)</p><p><b> {</b></p><p> case 1:OpenSourceFile(s);//打開源文件</p><p> printf("\n源文件source.txt中的字符串為:\n\n"); </p&
102、gt;<p> puts(s);//輸出要編譯的字符串</p><p> printf("\n");</p><p> system("pause");</p><p><b> break;</b></p><p> case 2:Code(s,str,
103、code,freq,&HT,HC);//編碼</p><p><b> break;</b></p><p> case 3:DeCode(code,str,ss,&HT,HC);//譯碼</p><p><b> break;</b></p><p> case 4:
104、system("cls");</p><p> printf("\n文件中各個(gè)字符及其權(quán)值的情況如下所示:\n");</p><p> printf("\n字符\t權(quán)值\t編碼\n");</p><p> for(i=0;i<n;i++)</p><p> printf
105、("%c\t%d\t%s\n",HC[i].ch,freq[i],&(HC[i].code[HC[i].flag]));</p><p> HFMFile(freq,HC);//將創(chuàng)建好的哈弗曼樹的字符,權(quán)值和密碼存入文件</p><p> system("pause");</p><p><b>
106、break;</b></p><p> case 0:system("cls");</p><p> printf("\n感謝您的使用,再見!\n\n");//退出</p><p><b> break; </b></p><p> default :syst
107、em("cls");</p><p> printf("\n抱歉,您輸入錯(cuò)誤!\n請(qǐng)重新開始輸入哦!\n\n"); </p><p> system("pause");</p><p><b> }</b></p><p> }while(choice
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(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ì)報(bào)告
- 哈夫曼(huffman)編譯碼器課程設(shè)計(jì)
- 哈夫曼(huffman)編譯碼器課程設(shè)計(jì)
- 哈夫曼編碼譯碼器課程設(shè)計(jì)
- (哈夫曼編碼譯碼器)(課程設(shè)計(jì)報(bào)告)
- 哈夫曼編碼譯碼器課程設(shè)計(jì)--- 哈夫曼樹的建立與實(shí)現(xiàn)
- java哈夫曼編碼譯碼器
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-哈夫曼編碼譯碼器
- 哈夫曼編碼與譯碼課程設(shè)計(jì)報(bào)告
- 課程設(shè)計(jì) 哈夫曼樹及哈夫曼編碼
- 課程設(shè)計(jì)--哈夫曼編碼與譯碼
- 哈夫曼課程設(shè)計(jì)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告——哈夫曼編譯器
- 數(shù)據(jù)結(jié)構(gòu)哈夫曼編碼譯碼器課程設(shè)計(jì)報(bào)告(有源程序)
- 哈夫曼編碼課程設(shè)計(jì)報(bào)告
- 哈夫曼樹課程設(shè)計(jì)報(bào)告
- 哈夫曼編碼譯碼的實(shí)現(xiàn)課程設(shè)計(jì)
- 課程設(shè)計(jì)-哈夫曼編碼
- 赫夫曼編譯碼器數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)
- 哈夫曼樹課程設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論