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

下載本文檔

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

文檔簡介

1、<p>  課 程 設(shè) 計(jì) 報(bào) 告</p><p>  題目: 《哈夫曼編碼》 </p><p>  院 系: 計(jì)算機(jī)科學(xué)與應(yīng)用系</p><p>  專業(yè)年級(jí): 計(jì)算機(jī)科學(xué)與技術(shù) </p><p>  學(xué) 號(hào): </p><p>  

2、學(xué)生姓名:   </p><p>  指導(dǎo)老師:   </p><p>  2013年06月25日</p><p><b>  目 錄</b></p><p>  1.設(shè)計(jì)任務(wù)書………………………………………………………………3</p>&

3、lt;p>  1.1題目與要求…………………………………………………………3</p><p>  1.2涉及知識(shí)點(diǎn)…………………………………………………………3</p><p>  1.3輸入輸出分析………………………………………………………3</p><p>  1.4測試數(shù)據(jù)分析………………………………………………………3</p><p

4、>  2.概要設(shè)計(jì)…………………………………………………………………4</p><p>  2.1結(jié)構(gòu)體類型定義及函數(shù)聲明………………………………………4</p><p>  2.2主程序流程…………………………………………………………5</p><p>  3.詳細(xì)設(shè)計(jì)…………………………………………………………………7</p><p&g

5、t;  3.1數(shù)據(jù)類型實(shí)現(xiàn)………………………………………………………7</p><p>  3.2程序偽碼……………………………………………………………</p><p>  3.3程序主要流程圖……………………………………………………</p><p>  4.調(diào)試分析…………………………………………………………………</p><p>  4.

6、1問題分析及回顧……………………………………………………</p><p>  4.2算法時(shí)空分析………………………………………………………</p><p>  4.3設(shè)想改進(jìn)……………………………………………………………</p><p>  4.4經(jīng)驗(yàn)和體會(huì)…………………………………………………………</p><p>  5.用戶使用說明……

7、………………………………………………………</p><p>  5.1操作說明及詳細(xì)步驟………………………………………………</p><p>  6.測試結(jié)果…………………………………………………………………</p><p>  6.1測試數(shù)據(jù)及結(jié)果……………………………………………………</p><p>  7.參考文獻(xiàn)…………………………

8、………………………………………</p><p>  8.致謝………………………………………………………………………</p><p><b>  設(shè)計(jì)任務(wù)書</b></p><p><b>  1.1題目與要求</b></p><p><b>  題目:哈夫曼編碼</b><

9、/p><p><b>  要求:</b></p><p>  1、I:初始化(Initialization),從終端讀入字符集大小n,以及n個(gè)字符和n個(gè)權(quán)值,建立哈夫曼樹,并將它存于文件hfmTree中。2、E:編碼(Encoding),利用已建好的哈夫曼樹(如不在內(nèi)存,則從文件hfmTree中讀人),對(duì)文件ToBeTran中的正文進(jìn)行編碼,然后將結(jié)果存入文件CodeF

10、ile中。3、D:譯碼(Decoding),利用已建好的哈夫曼樹將文件CodeFile中的代碼進(jìn)行譯碼,結(jié)果存入文件TextFile中。4、P:輸出代碼文件(Print),將文件CodeFile以緊湊格式顯示在終端上,每行50個(gè)代碼。同時(shí)將此字符形式的編碼文件寫入文件CodePrin中。5、T:輸出哈夫曼樹(TreePrinting),將已在內(nèi)存中的哈夫曼樹以直觀的方式(樹或凹人表形式)顯示在終端上,同時(shí)將此字符形式的哈夫曼樹寫入

11、文件TreePrint中。</p><p><b>  1.2設(shè)計(jì)知識(shí)點(diǎn)</b></p><p>  哈夫曼樹的建立,哈夫曼編碼的生成,對(duì)編碼信息的翻譯,文件、結(jié)構(gòu)體、指針、鏈表、數(shù)組、循環(huán)語句、選擇語句、輸入輸出控制等。</p><p><b>  1.3輸入輸出分析</b></p><p> 

12、 對(duì)于用戶輸入數(shù)據(jù)進(jìn)行存儲(chǔ),統(tǒng)計(jì)各字符出現(xiàn)的頻率,然后通過Huffman編碼得到的各種字符的Huffman編碼。此時(shí)程序需要輸入一串Huffman代碼串。輸入完畢程序會(huì)判斷輸入的代碼串是否合法,若合法則輸出譯碼結(jié)果。</p><p><b>  1.4測試數(shù)據(jù)分析</b></p><p>  用下表給出的字符集和頻度的實(shí)際統(tǒng)計(jì)數(shù)據(jù)建立哈夫曼樹,并實(shí)現(xiàn)以下報(bào)文的編碼和譯

13、碼:“aabbccdd”。字符 a b c d e f g h ij k l m n o p q r s t u v w x y z權(quán)值 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26</p><p><b>  概要設(shè)計(jì)</b></p><p>  2.1結(jié)構(gòu)體類型及

14、函數(shù)聲明</p><p>  1. 哈夫曼樹類型(樹形結(jié)構(gòu)):</p><p>  void main(void){ int i; void settree(void); //建立樹 void code(void); //對(duì)文件編碼 void decode(void); // 譯碼 void disp(void); root=(s

15、truct node*)malloc(sizeof(struct node)); puts("*******************哈夫曼編/譯碼器演示******************************");</p><p><b>  建立編碼</b></p><p>  void settree(void){ int

16、 i,j,k; struct node *p1,*p2,*tmp,*p; void go(struct node *); void setcode(struct node *);//建立每一個(gè)字符的編碼 void printtree(struct node *); puts("輸入字符集的大小:"); scanf("%d",&n)

17、; while(getchar()!='\n') continue;</p><p><b>  }</b></p><p><b>  詳細(xì)設(shè)計(jì)</b></p><p><b>  3.1數(shù)據(jù)類型實(shí)現(xiàn)</b></p><p>  1、哈夫

18、曼編碼采用一個(gè)字符串?dāng)?shù)組存儲(chǔ)。2、用戶界面可以設(shè)計(jì)為“菜單”方式:顯示上述功能符號(hào),再加上“Q”,表示退出運(yùn)行Quit。請用戶鍵入一個(gè)選擇功能符。此功能執(zhí)行完畢后再顯示此菜單,直至某次用戶選擇了“Q”為止。3、在程序的一次執(zhí)行過程中,第一次執(zhí)行I、D或C命令之后,哈夫曼樹已經(jīng)在內(nèi)存了,不必再讀入。每次執(zhí)行中不一定執(zhí)行I命令,因?yàn)槲募fmTree可能早已建好。</p><p>  3.Main函數(shù)流程圖<

19、;/p><p><b>  問題分析及回顧</b></p><p><b>  4.1</b></p><p>  問題一:哈夫曼樹的建立</p><p><b>  問題二:編譯進(jìn)行</b></p><p><b>  4.4經(jīng)驗(yàn)與體會(huì)</

20、b></p><p>  此次課程設(shè)計(jì),我編寫程序的時(shí)候遇到了不少問題,在攻克這些問題,最終實(shí)現(xiàn)課題任務(wù)的過程中,我學(xué)到了不少東西:</p><p>  首先,在完成一個(gè)課題之前,要仔細(xì)理解課題要求。通過這次課程設(shè)計(jì),我更加深入了理解了哈夫曼編碼的過程,以及利用哈夫曼編碼對(duì)數(shù)據(jù)進(jìn)行壓縮的優(yōu)越性,并且使我能夠更熟練地運(yùn)用樹形的數(shù)據(jù)結(jié)構(gòu)。并且體會(huì)到了在學(xué)習(xí)中,要嚴(yán)格要求自己,不能因?yàn)橐稽c(diǎn)

21、點(diǎn)的成功就驕傲自滿,停止不前。</p><p><b>  5.用戶使用說明</b></p><p><b>  進(jìn)入程序:</b></p><p><b>  圖 1.程序開始</b></p><p><b>  程序提示:</b></p>

22、<p>  圖2. 輸入字符集的大小</p><p><b>  輸入</b></p><p><b>  編譯</b></p><p><b>  參考文獻(xiàn)</b></p><p>  1.《數(shù)據(jù)結(jié)構(gòu)(C語言描述)》;出版社:中國水利水電出版社;主編:馬秋菊;&l

23、t;/p><p>  2.嚴(yán)蔚敏 《數(shù)據(jù)結(jié)構(gòu)》(C語言版) 清華大學(xué)出版社</p><p>  3.wenku.baidu.com ;百度文庫</p><p><b>  源程序:</b></p><p>  #include<stdio.h></p><p>  #include<

24、string.h></p><p>  #include<stdlib.h></p><p>  #include<ctype.h></p><p><b>  int n;</b></p><p>  struct node{</p><p><b>  

25、int w;</b></p><p><b>  int flag;</b></p><p><b>  char c;</b></p><p>  struct node *plink,*llink,*rlink;</p><p>  char code[20];</p>

26、<p>  }*num[20],*root;</p><p><b>  FILE *fp;</b></p><p>  char tmpcode[20];</p><p><b>  int t=0;</b></p><p>  void main(void)</p>&

27、lt;p><b>  {</b></p><p><b>  int i;</b></p><p>  void settree(void); //建立樹</p><p>  void code(void); //對(duì)文件編碼</p><p>  void decode(void);

28、 // 譯碼</p><p>  void disp(void);</p><p>  root=(struct node*)malloc(sizeof(struct node));</p><p>  puts("*******************哈夫曼編/譯碼器演示******************************");&l

29、t;/p><p><b>  while(1){</b></p><p><b>  start:</b></p><p>  puts("1. 初始化 2.顯示編碼表 3. 退出");</p><p>  while(scanf("%d",

30、&i)!=1)</p><p><b>  {</b></p><p>  while(getchar()!='\n')</p><p><b>  continue;</b></p><p>  puts("輸入錯(cuò)誤!");</p><

31、;p>  puts("請重新輸入!");</p><p>  puts("1. 初始化 2.顯示編碼表 3. 退出");</p><p><b>  }</b></p><p>  switch (i)</p><p><b>  {</b&g

32、t;</p><p><b>  case 1:</b></p><p>  settree();</p><p><b>  break;</b></p><p><b>  case 2: </b></p><p><b>  disp()

33、;</b></p><p><b>  break;</b></p><p><b>  case 3:</b></p><p><b>  exit(0);</b></p><p><b>  break;</b></p>&l

34、t;p><b>  default:</b></p><p>  puts("輸入錯(cuò)誤!");</p><p>  puts("請重新輸入!");</p><p>  goto start;</p><p><b>  }</b></p>

35、<p><b>  }</b></p><p><b>  }</b></p><p>  void settree(void)</p><p><b>  {</b></p><p>  int i,j,k;</p><p>  struct

36、 node *p1,*p2,*tmp,*p;</p><p>  void go(struct node *);</p><p>  void setcode(struct node *);//建立每一個(gè)字符的編碼</p><p>  void printtree(struct node *);</p><p>  puts("輸入

37、字符集的大?。?quot;);</p><p>  scanf("%d",&n);</p><p>  while(getchar()!='\n')</p><p><b>  continue;</b></p><p>  for(i=0;i<n;i++)</p&

38、gt;<p><b>  {</b></p><p>  p=(struct node *)malloc(sizeof(struct node));</p><p>  puts("請輸入一個(gè)字符");</p><p>  scanf("%c",&p->c);</p>

39、;<p>  while(getchar()!='\n')</p><p><b>  continue;</b></p><p>  puts("請輸入該字符的權(quán)值:");</p><p>  scanf("%d",&p->w);</p><

40、;p>  while(getchar()!='\n')</p><p><b>  continue;</b></p><p>  p->plink=NULL;</p><p>  p->rlink=NULL;</p><p>  p->llink=NULL;</p>

41、<p><b>  num[i]=p;</b></p><p><b>  }</b></p><p>  for(i=0;i<n-1;i++) //(遞增)排序</p><p><b>  {</b></p><p>  for(j=i+1;j<n;

42、j++)</p><p><b>  {</b></p><p>  if(num[i]->w>num[j]->w)</p><p><b>  {</b></p><p>  tmp=num[i];</p><p>  num[i]=num[j];<

43、/p><p>  num[j]=tmp;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  /*******************************開始建立樹*

44、**********************/</p><p>  num[n]=NULL; //結(jié)束標(biāo)志</p><p><b>  k=n;</b></p><p>  while(num[1]!=NULL)</p><p><b>  {</b></p><p>

45、  p=(struct node *)malloc(sizeof(struct node));</p><p>  p1=num[0];</p><p>  p2=num[1];</p><p>  p->llink=p1;</p><p>  p->rlink=p2;</p><p>  p->pl

46、ink=NULL;</p><p>  p1->plink=p;</p><p>  p2->plink=p;</p><p>  p->w=p1->w+p2->w;</p><p>  for(i=1;i<k;i++)</p><p><b>  {</b>&

47、lt;/p><p>  num[i]=num[i+1];</p><p><b>  }</b></p><p><b>  k--;</b></p><p><b>  num[0]=p;</b></p><p>  for(i=0;i<k-1;i+

48、+) //排序</p><p><b>  {</b></p><p>  for(j=i+1;j<k;j++)</p><p><b>  {</b></p><p>  if(num[i]->w>num[j]->w)</p><p><b&

49、gt;  {</b></p><p>  tmp=num[i];</p><p>  num[i]=num[j];</p><p>  num[j]=tmp;</p><p><b>  }</b></p><p><b>  }</b></p>&

50、lt;p><b>  }</b></p><p><b>  }</b></p><p>  root=num[0];</p><p><b>  /*建立完畢*/</b></p><p>  /*寫入文件,前序*/</p><p>  if((f

51、p=fopen("c:\\hfmtree.wxl","wb"))==NULL)</p><p><b>  {</b></p><p>  puts("文件打開錯(cuò)誤!");</p><p>  getchar();</p><p><b>  exit

52、(0);</b></p><p><b>  }</b></p><p>  setcode(root);</p><p><b>  go(root);</b></p><p>  fclose(fp);</p><p><b>  }</b&g

53、t;</p><p>  void setcode(struct node *p)</p><p><b>  {</b></p><p>  if(p->llink==NULL&&p->rlink==NULL)</p><p><b>  {</b></p>

54、<p>  tmpcode[t]='\0';</p><p>  strcpy(p->code,tmpcode);</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b>&

55、lt;/p><p>  tmpcode[t++]='0';</p><p>  setcode(p->llink);</p><p><b>  t--;</b></p><p>  tmpcode[t++]='1';</p><p>  setcode(p-&g

56、t;rlink);</p><p><b>  t--;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void go(struct node *p)</p><p><b>  {

57、</b></p><p>  if(p->llink==NULL&&p->rlink==NULL)</p><p><b>  {</b></p><p>  fputc('(',fp);</p><p>  fputc(p->c,fp);</p>

58、<p>  fputs(p->code,fp);</p><p>  fputc(')',fp);</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p>

59、;<p>  go(p->llink);</p><p>  go(p->rlink);</p><p><b>  }</b></p><p><b>  }</b></p><p>  void code(void)</p><p><b&

60、gt;  {</b></p><p>  FILE *fp1,*fp2,*fp3;</p><p>  char ch1,ch2,c;</p><p>  if((fp1=fopen("c:\\hfmtree.wxl","rb"))==NULL)</p><p><b>  {&l

61、t;/b></p><p>  puts("文件打開錯(cuò)誤!");</p><p>  getchar();</p><p><b>  exit(0);</b></p><p><b>  }</b></p><p>  if((fp2=fopen(

62、"c:\\tobetrans.txt","wb"))==NULL)</p><p><b>  {</b></p><p>  puts("文件打開錯(cuò)誤!");</p><p>  getchar();</p><p><b>  exit(0);&l

63、t;/b></p><p><b>  }</b></p><p>  if((fp3=fopen("c:\\codefile.wxl","wb"))==NULL)</p><p><b>  {</b></p><p>  puts("文件打

64、開錯(cuò)誤!");</p><p>  getchar();</p><p><b>  exit(0);</b></p><p><b>  }</b></p><p>  while((ch1=fgetc(fp2))!=EOF)</p><p><b> 

65、 {</b></p><p><b>  t=0;</b></p><p>  while((ch2=fgetc(fp1))!=EOF)</p><p><b>  {</b></p><p>  if(ch1==ch2)</p><p><b>  {

66、</b></p><p>  while((c=fgetc(fp1))!=')')</p><p><b>  {</b></p><p>  tmpcode[t++]=c;</p><p><b>  }</b></p><p>  tmpcod

67、e[t]='\0';</p><p>  fputs(tmpcode,fp3);</p><p>  fputc('@',fp3);</p><p>  rewind(fp1);</p><p><b>  break;</b></p><p><b> 

68、 }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  fclose(fp1);</p><p>  fclose(fp2);</p><p>  fclose(fp3);</p><p

69、><b>  }</b></p><p>  void decode(void)</p><p><b>  {</b></p><p>  FILE *fp1,*fp2,*fp3;</p><p>  char ch1,ch2,ch3;</p><p>  char

70、temp_3[20];</p><p>  char temp_1[20];</p><p>  int t1,t3;</p><p>  if((fp1=fopen("c:\\hfmtree.wxl","rb"))==NULL)</p><p><b>  {</b></p

71、><p>  puts("文件打開錯(cuò)誤!");</p><p>  getchar();</p><p><b>  exit(0);</b></p><p><b>  }</b></p><p>  if((fp2=fopen("c:\\text

72、file.txt","wb"))==NULL)</p><p><b>  {</b></p><p>  puts("文件打開錯(cuò)誤!");</p><p>  getchar();</p><p><b>  exit(0);</b></p&

73、gt;<p><b>  }</b></p><p>  if((fp3=fopen("c:\\codefile.wxl","rb"))==NULL)</p><p><b>  {</b></p><p>  puts("文件打開錯(cuò)誤!");<

74、;/p><p>  getchar();</p><p><b>  exit(0);</b></p><p><b>  }</b></p><p>  while((ch3=fgetc(fp3))!=EOF)</p><p><b>  {</b><

75、;/p><p><b>  t3=0;</b></p><p>  while(ch3!='@')</p><p><b>  {</b></p><p>  temp_3[t3++]=ch3;</p><p>  ch3=fgetc(fp3);</p>

76、;<p><b>  }</b></p><p>  temp_3[t3]='\0';</p><p>  while((ch1=fgetc(fp1))!=EOF)</p><p><b>  {</b></p><p>  if(isalpha(ch1))</p

77、><p><b>  {</b></p><p><b>  ch2=ch1;</b></p><p><b>  t1=0;</b></p><p>  while((ch1=fgetc(fp1))!=')')</p><p><b&

78、gt;  {</b></p><p>  temp_1[t1++]=ch1;</p><p><b>  }</b></p><p>  temp_1[t1]='\0';</p><p>  if(strcmp(temp_1,temp_3)==0)</p><p>&l

79、t;b>  {</b></p><p>  fputc(ch2,fp2);</p><p>  rewind(fp1);</p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }<

80、;/b></p><p><b>  }</b></p><p><b>  }</b></p><p>  fclose(fp1);</p><p>  fclose(fp2);</p><p>  fclose(fp3);</p><p>&

81、lt;b>  }</b></p><p>  void disp(void)</p><p><b>  {</b></p><p>  FILE *fp1,*fp2;</p><p>  char ch1,ch2;</p><p>  char tmp[20];</p&g

82、t;<p><b>  int t;</b></p><p>  if((fp1=fopen("c:\\hfmtree.wxl","rb"))==NULL)</p><p><b>  {</b></p><p>  puts("文件打開錯(cuò)誤!");

83、</p><p>  getchar();</p><p><b>  exit(0);</b></p><p><b>  }</b></p><p>  if((fp2=fopen("c:\\hfmcode.txt","wb"))==NULL)</p

84、><p><b>  {</b></p><p>  puts("文件打開錯(cuò)誤!");</p><p>  getchar();</p><p><b>  exit(0);</b></p><p><b>  }</b></p&g

85、t;<p>  while((ch1=fgetc(fp1))!=EOF)</p><p><b>  {</b></p><p>  if(ch1=='(')</p><p><b>  {</b></p><p><b>  t=0;</b>&l

86、t;/p><p>  ch1=fgetc(fp1);</p><p><b>  ch2=ch1;</b></p><p>  while((ch1=fgetc(fp1))!=')')</p><p><b>  {</b></p><p>  tmp[t++]=

87、ch1;</p><p><b>  }</b></p><p>  tmp[t]='\0';</p><p>  printf("%c-----%s\n",ch2,tmp);</p><p>  fputc(ch2,fp2);</p><p>  fputc(

88、'-',fp2);</p><p>  fputc('-',fp2);</p><p>  fputc('-',fp2);</p><p>  fputs(tmp,fp2);</p><p>  fputc('\n',fp2);</p><p><b

89、>  }</b></p><p><b>  }</b></p><p>  fclose(fp1);</p><p>  fclose(fp2);</p><p><b>  }</b></p><p>  《數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)》評(píng)分標(biāo)準(zhǔn)</p>

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論