2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩14頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

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ù)先編碼,在接收端將傳來(lái)的數(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>  (1)主程序模塊</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>  將所有字符的編碼連起來(lái),存放到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> ?。?)編碼函數(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> ?。?)密碼設(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ò)誤,您無(wú)權(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ò)誤,讓我束手無(wú)策,最后我耐心的一步一步慢慢地改正錯(cuò)誤才讓我看到了希望。在實(shí)現(xiàn)文章的讀入時(shí), 由于對(duì)文件不是太熟悉,只好翻開C語(yǔ)言書本仿照其模式編寫。許多的錯(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ì)于我們來(lái)說有時(shí)候想半天都弄不來(lái),但老師幾下下就搞好了,這樣就更加有效地節(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í)踐太少的緣故。我想,在即將到來(lái)的寒假中,我會(huì)努力嘗試編寫一些較大的程序。由于我們是軟件工程專業(yè)的學(xué)生,就應(yīng)該更加嚴(yán)格要求自己。</p><p><b>  七.參考文獻(xiàn)</b></p><p>  1. 耿國(guó)華主編,《數(shù)據(jù)結(jié)構(gòu)——C語(yǔ)言描述》,高

33、等教育出版社,2005年</p><p>  2. 陳銳,《數(shù)據(jù)結(jié)構(gòu)(C語(yǔ)言版)》,清華大學(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ò)誤,您無(wú)權(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>  //將所有字符的編碼連接起來(lái)存放到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è)字符的編碼連起來(lái)</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. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論