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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、<p><b>  09計算機課程設計</b></p><p>  哈夫曼編碼/譯碼器(樹的應用)</p><p><b>  題目</b></p><p>  哈弗曼樹編碼/譯碼(樹的應用)</p><p><b>  二 .目的</b></p>&l

2、t;p>  鞏固數據結構基礎知識,了解并初步掌握設計、實現較大系統的完整過程,包括系統分析、編碼設計、系統集成、以及調試分析,從而提高分析問題、解決問題的能力,提高編程技能,培養(yǎng)理論結合實踐的能力。</p><p>  熟練掌握數據結構的線性表、樹、圖等結構的應用的設計實現以及操作方法,為進一步的應用開發(fā)打好基礎。</p><p>  3. 培養(yǎng)查閱文獻和撰寫文檔的能力。</p

3、><p><b>  三. 要求</b></p><p>  1. 課程設計題目可從指導老師提供的題目列表中選擇或自行提出。從實際情況出發(fā)選擇工作量適當、難度適中的題目。自選題目必須要得到指導老師的同意才能開題,否則不予承認,要求課題能夠體現學生綜合運用所學知識的能力。</p><p>  2. 課程設計可參考已有的成果,但必須在功能、數據結構

4、及算法上體現自己的獨到之處。</p><p>  3. 程序源代碼和課程設計說明書必須按照相關要求和格式完成。</p><p>  四.題目設計分析:簡述算法實現的過程。</p><p><b>  1.定義哈弗曼樹。</b></p><p>  2.設計算法CrtHuffmanTree存放哈弗曼樹的各個權值,建立哈弗

5、曼樹。</p><p>  3.設計算法CrtHuffmanCode從葉子結點到根,逆向求每個葉子結點對應的哈夫曼編碼,即“密文”。</p><p>  4.設計算法TrsHuffmanTree求哈弗曼編碼對應的“明文”。</p><p>  5.設計main函數,利用以上函數實現建立哈弗曼函數、求編碼和譯文的目的。</p><p><

6、b>  五.設計源代碼</b></p><p>  #include <stdio.h></p><p>  #include <stdlib.h></p><p>  #include <string.h></p><p>  typedef char* HuffmanCode;/*動態(tài)

7、分配數組,存儲哈夫曼編碼*/</p><p>  typedef struct </p><p><b>  {</b></p><p>  unsigned int weight ; /* 用來存放各個結點的權值*/</p><p>  unsigned int parent, LChild,RChild ; /*指向

8、雙親、孩子結點的指針*/</p><p>  }HTNode, * HuffmanTree; /*動態(tài)分配數組,存儲哈夫曼樹*/</p><p>  void select(HuffmanTree *ht,int n, int *s1, int *s2)</p><p><b>  {</b></p><p><

9、;b>  int i;</b></p><p><b>  int min;</b></p><p>  for(i=1; i<=n; i++)</p><p><b>  {</b></p><p>  if((*ht)[i].parent == 0)</p>

10、<p><b>  {</b></p><p><b>  min = i;</b></p><p><b>  i = n+1;</b></p><p><b>  }</b></p><p><b>  }</b>&l

11、t;/p><p>  for(i=1; i<=n; i++)</p><p><b>  {</b></p><p>  if((*ht)[i].parent == 0)</p><p><b>  {</b></p><p>  if((*ht)[i].weight &l

12、t; (*ht)[min].weight)</p><p><b>  min = i;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  *s1 = min;</p><p>  for(i=1

13、; i<=n; i++)</p><p><b>  {</b></p><p>  if((*ht)[i].parent == 0 && i!=(*s1))</p><p><b>  {</b></p><p><b>  min = i;</b>&l

14、t;/p><p><b>  i = n+1;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  for(i=1; i<=n; i++)</p><p><b>  {</b&g

15、t;</p><p>  if((*ht)[i].parent == 0 && i!=(*s1))</p><p><b>  {</b></p><p>  if((*ht)[i].weight < (*ht)[min].weight)</p><p><b>  min = i;<

16、;/b></p><p><b>  }</b></p><p><b>  }</b></p><p>  *s2 = min;</p><p><b>  }</b></p><p>  void CrtHuffmanTree(HuffmanT

17、ree *ht , int *w, int n)</p><p>  { /* w存放已知的n個權值,構造哈夫曼樹ht */</p><p><b>  int m,i;</b></p><p>  int s1,s2;</p><p><b>  m=2*n-1;</b></p>&

18、lt;p>  *ht=(HuffmanTree)malloc((m+1)*sizeof(HTNode)); /*0號單元未使用*/</p><p>  for(i=1;i<=n;i++) </p><p>  {/*1-n號放葉子結點,初始化*/</p><p>  (*ht)[i].weight = w[i];</p><p>

19、;  (*ht)[i].LChild = 0;</p><p>  (*ht)[i].parent = 0;</p><p>  (*ht)[i].RChild = 0;</p><p><b>  } </b></p><p>  for(i=n+1;i<=m;i++)</p><p>

20、<b>  {</b></p><p>  (*ht)[i].weight = 0;</p><p>  (*ht)[i].LChild = 0;</p><p>  (*ht)[i].parent = 0;</p><p>  (*ht)[i].RChild = 0;</p><p>  }

21、 /*非葉子結點初始化*/</p><p>  /* ------------初始化完畢!對應算法步驟1---------*/</p><p>  for(i=n+1;i<=m;i++) /*創(chuàng)建非葉子結點,建哈夫曼樹*/</p><p>  { /*在(*ht)[1]~(*ht)[i-1]的范圍內選擇兩個parent為0且weight最小的結點,其

22、序號分別賦值給s1、s2返回*/</p><p>  select(ht,i-1,&s1,&s2);</p><p>  (*ht)[s1].parent=i;</p><p>  (*ht)[s2].parent=i;</p><p>  (*ht)[i].LChild=s1;</p><p>  (

23、*ht)[i].RChild=s2;</p><p>  (*ht)[i].weight=(*ht)[s1].weight+(*ht)[s2].weight;</p><p><b>  } </b></p><p>  }/*哈夫曼樹建立完畢*/</p><p>  void outputHuffman(Huffman

24、Tree HT, int m)</p><p><b>  {</b></p><p><b>  if(m!=0)</b></p><p><b>  {</b></p><p>  printf("%d ", HT[m].weight);</p&

25、gt;<p>  outputHuffman(HT,HT[m].LChild);</p><p>  outputHuffman(HT,HT[m].RChild);</p><p><b>  }</b></p><p><b>  }</b></p><p>  void CrtHu

26、ffmanCode(HuffmanTree *ht, HuffmanCode *hc, int n)</p><p>  /*從葉子結點到根,逆向求每個葉子結點對應的哈夫曼編碼*/</p><p><b>  {</b></p><p><b>  char *cd;</b></p><p><

27、;b>  int i;</b></p><p>  unsigned int c;</p><p>  int start;</p><p><b>  int p;</b></p><p>  hc=(HuffmanCode *)malloc((n+1)*sizeof(char *)); /*分配n

28、個編碼的頭指針*/</p><p>  cd=(char * )malloc(n * sizeof(char )); /*分配求當前編碼的工作空間*/</p><p>  cd[n-1]='\0'; /*從右向左逐位存放編碼,首先存放編碼結束符*/</p><p>  for(i=1;i<=n;i++) /*求n個葉子結點對應的哈夫曼編

29、碼*/</p><p><b>  {</b></p><p>  start=n-1; /*初始化編碼起始指針*/</p><p>  for(c=i,p=(*ht)[i].parent; p!=0; c=p,p=(*ht)[p].parent) /*從葉子到根結點求編碼*/</p><p>  if( (*ht

30、)[p].LChild == c) </p><p>  cd[--start]='0'; /*左分支標0*/</p><p><b>  else </b></p><p>  cd[--start]='1'; /*右分支標1*/</p><p>  hc[i]=(char *)ma

31、lloc((n-start)*sizeof(char)); /*為第i個編碼分配空間*/</p><p>  strcpy(hc[i],&cd[start]);</p><p><b>  }</b></p><p><b>  free(cd);</b></p><p>  for(i=

32、1;i<=n;i++)</p><p>  printf("%d編碼為%s\n",(*ht)[i].weight,hc[i]);</p><p><b>  }</b></p><p>  void main() </p><p><b>  { </b></p>

33、;<p>  HuffmanTree HT; </p><p>  HuffmanCode HC; </p><p><b>  int *w; </b></p><p>  int i,j,n; // the number of elements; </p><p>  int wei;

34、// the weight of a element; </p><p><b>  int m;</b></p><p>  char a[15];</p><p>  printf("input the total number of the Huffman Tree:" ); </p><p>

35、  scanf("%d",&n);</p><p>  printf("input %d character of the Huffman Tree:", n);</p><p>  for(i=1;i<=n+1;i++)</p><p>  scanf("%c",&a[i]);<

36、;/p><p>  w=(int *)malloc((n+1)*sizeof(int)); </p><p>  for(j=1;j<=n;j++)</p><p><b>  { </b></p><p>  printf("input the %c 's weight:",a[j+1])

37、; </p><p>  fflush(stdin);</p><p>  scanf("%d",&wei); </p><p>  w[j]=wei; </p><p><b>  } </b></p><p>  CrtHuffmanTree(&HT,w,n

38、); </p><p>  m = 2*n-1;</p><p>  printf("the Huffman Tree is: ");</p><p>  outputHuffman(HT,m); </p><p>  printf("\n");</p><p>  CrtHuf

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論