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

下載本文檔

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

文檔簡介

1、<p><b>  計算機與信息學院</b></p><p><b>  數(shù)據(jù)結(jié)構(gòu)課程設(shè)計</b></p><p>  設(shè)計:電文的編碼譯碼</p><p><b>  姓名: </b></p><p>  專業(yè):2012級數(shù)學與應(yīng)用數(shù)學</p><

2、;p><b>  學號: </b></p><p><b>  目錄</b></p><p><b>  一、需求分析3</b></p><p><b>  二、設(shè)計要求3</b></p><p><b>  三、概要設(shè)計4</

3、b></p><p>  ① 哈夫曼樹的建立4</p><p><b> ?、?哈夫曼編碼5</b></p><p> ?、?代碼文件的譯碼5</p><p><b>  四、詳細設(shè)計5</b></p><p><b> ?、僮址y(tǒng)計5</b&

4、gt;</p><p> ?、诠蚵鼧涞乃惴?</p><p><b> ?、芄蚵g碼7</b></p><p><b> ?、葜骱瘮?shù)7</b></p><p><b>  五、調(diào)試8</b></p><p><b>  附錄10&

5、lt;/b></p><p><b>  電文的曼編碼譯碼</b></p><p><b>  一、需求分析</b></p><p>  在當今信息爆炸時代,如何采用有效的數(shù)據(jù)壓縮技術(shù)節(jié)省數(shù)據(jù)文件的存儲空間和計算機網(wǎng)絡(luò)的傳送時間已越來越引起人們的重視,哈夫曼編碼正是一種應(yīng)用廣泛且非常有效的數(shù)據(jù)壓縮技術(shù)。哈夫曼編碼是一

6、種編碼方式,以哈夫曼樹—即最優(yōu)二叉樹,帶權(quán)路徑長度最小的二叉樹,經(jīng)常應(yīng)用于數(shù)據(jù)壓縮。哈夫曼編碼使用一張?zhí)厥獾木幋a表將源字符(例如某文件中的一個符號)進行編碼。這張編碼表的特殊之處在于,它是根據(jù)每一個源字符出現(xiàn)的估算概率而建立起來的(出現(xiàn)概率高的字符使用較短的編碼,反之出現(xiàn)概率低的則使用較長的編碼,這便使編碼之后的字符串的平均期望長度降低,從而達到無損壓縮數(shù)據(jù)的目的)。哈夫曼編碼的應(yīng)用很廣泛,利用哈夫曼樹求得的用于通信的二進制編碼稱為哈夫

7、曼編碼。樹中從根到每個葉子都有一條路徑,對路徑上的各分支約定:指向左子樹的分支表示“0”碼,指向右子樹的分支表示“1”碼,取每條路徑上的“0”或“1”的序列作為和各個葉子對應(yīng)的字符的編碼,這就是哈夫曼編碼。哈夫曼譯碼輸入字符串可以把它編譯成二進制代碼,輸入二進制代碼時可以編譯成字符串。</p><p><b>  二、設(shè)計要求</b></p><p>  對輸入的一串

8、電文字符實現(xiàn)哈夫曼編碼,再對哈夫曼編碼生成的代碼串進行譯碼,輸出電文字符串。通常我們把數(shù)據(jù)壓縮的過程稱為編碼,解壓縮的過程稱為解碼。電報通信是傳遞文字的二進制碼形式的字符串。但在信息傳遞時,總希望總長度能盡可能短,即采用最短碼。假設(shè)每種字符在電文中出現(xiàn)的次數(shù)為Wi,編碼長度為Li,電文中有n種字符,則電文編碼總長度為∑WiLi。若將此對應(yīng)到二叉樹上,Wi為葉結(jié)點的權(quán),Li為根結(jié)點到葉結(jié)點的路徑長度。那么,∑WiLi恰好為二叉樹上帶權(quán)路徑

9、長度。因此 ,設(shè)計電文總長最短的二進制前綴編碼,就是以n種字符出現(xiàn)的頻率作權(quán),構(gòu)造一棵哈夫曼樹,此構(gòu)造過程稱為哈夫曼編碼。設(shè)計實現(xiàn)的功能: (1) 哈夫曼樹的建立; (2) 哈夫曼編碼的生成; (3) 編碼文件的譯碼。 </p><p><b>  三、概要設(shè)計</b></p><p>  哈夫曼編\譯碼器的主要功能是先建立哈夫曼樹,然后利用建好的哈夫曼樹生成哈

10、夫曼編碼后進行譯碼 。</p><p>  在數(shù)據(jù)通信中,經(jīng)常需要將傳送的文字轉(zhuǎn)換成由二進制字符0、1組成的二進制串,稱之為編碼。構(gòu)造一棵哈夫曼樹,規(guī)定哈夫曼樹中的左分之代表0,右分支代表1,則從根節(jié)點到每個葉子節(jié)點所經(jīng)過的路徑分支組成的0和1的序列便為該節(jié)點對應(yīng)字符的編碼,稱之為哈夫曼編碼。</p><p>  最簡單的二進制編碼方式是等長編碼。若采用不等長編碼,讓出現(xiàn)頻率高的字符具有較

11、短的編碼,讓出現(xiàn)頻率低的字符具有較長的編碼,這樣可能縮短傳送電文的總長度。哈夫曼樹課用于構(gòu)造使電文的編碼總長最短的編碼方案。</p><p>  設(shè)計包含的幾個方面:</p><p><b>  ① 哈夫曼樹的建立</b></p><p>  赫夫曼樹的建立由赫夫曼算法的定義可知,初始森林中共有n棵只含有根結(jié)點的二叉樹。算法的第二步是:將當前森

12、林中的兩棵根結(jié)點權(quán)值最小的二叉樹,合并成一棵新的二叉樹;每合并一次,森林中就減少一棵樹,產(chǎn)生一個新結(jié)點。顯然要進行n-1次合并,所以共產(chǎn)生n-1個新結(jié)點,它們都是具有兩個孩子的分支結(jié)點。由此可知,最終求得的哈夫曼樹中一共有2n-1個結(jié)點,其中n個結(jié)點是初始森林的n個孤立結(jié)點。并且哈夫曼樹中沒有度數(shù)為1的分支結(jié)點。我們可以利用一個大小為2n--1的一維數(shù)組來存儲赫夫曼樹中的結(jié)點。定義的結(jié)構(gòu)體類型如下:</p><p&g

13、t;  typedef struct</p><p><b>  {</b></p><p>  char data; //結(jié)點字符</p><p>  int weight; //權(quán)值</p><p>  int parent;

14、 //雙親結(jié)點</p><p>  int lchild; //左孩子結(jié)點</p><p>  int rchild; //右孩子結(jié)點</p><p><b>  }HTNode;</b></p><p><b>  ② 哈夫曼編碼 <

15、/b></p><p>  要求電文的哈夫曼編碼,必須先定義哈夫曼編碼類型,根據(jù)設(shè)計要求和實際需要定義的類型如下: </p><p>  typedet struct { </p><p>  char cd[N]; // 存放編碼的數(shù)組</p><p>  int start; //從start 開始讀cd中的哈夫曼編碼</p

16、><p>  }Hcode; // 編碼結(jié)構(gòu)體類型 </p><p>  ③ 代碼文件的譯碼 </p><p>  譯碼的基本思想是:讀文件中編碼,并與原先生成的哈夫曼編碼表比較,遇到相等時,即取出其對應(yīng)的字符存入一個新串中。</p><p><b>  四、詳細設(shè)計</b></p><p><

17、b>  ①字符統(tǒng)計</b></p><p>  int jsq(char *s,int cnt[],char str[])</p><p><b>  {char *p;</b></p><p>  int i,j,k;</p><p>  for(i=1;i<=256;i++)</p>

18、;<p><b>  cnt[i]=0;</b></p><p>  for(p=s;*p!='\0';p++)</p><p><b>  {</b></p><p><b>  k=*p;</b></p><p><b>  cnt[

19、k]++;</b></p><p><b>  }</b></p><p><b>  j=0;</b></p><p>  for(i=1,j=0;i<=256;i++)</p><p>  if(cnt[i]!=0)</p><p><b> 

20、 {</b></p><p><b>  j++;</b></p><p><b>  }</b></p><p><b>  return j;</b></p><p><b>  }</b></p><p><

21、b> ?、诠蚵鼧涞乃惴?lt;/b></p><p>  void CreateHT(HTNode ht[],int n,char str[],int cn[]) //創(chuàng)建哈夫曼樹函數(shù)</p><p>  {for(int input=1;input<=256;input++)</p><p><b>  

22、{</b></p><p>  str[input]=input;</p><p><b>  }</b></p><p><b>  int l=0;</b></p><p>  for(int output=1;output<=256;output++)</p>

23、<p><b>  {</b></p><p>  if(cn[output] !=0)</p><p>  {ht[l].data=str[output]; //按字母順序?qū)⒊霈F(xiàn)的字母依次存入數(shù)組ht[]</p><p>  ht[l].weight=cn[outpu

24、t];</p><p><b>  l++;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  int i,k,lnode,rnode;</p><p>  int min1,min2;</

25、p><p>  for (i=0;i<2*n-1;i++) </p><p>  ht[i].parent=ht[i].lchild=ht[i].rchild=0; //所有結(jié)點的相關(guān)域置初值0</p><p>  for (i=n;i<2*n-1;i++) //構(gòu)造哈夫曼樹</p><

26、;p><b>  {</b></p><p>  min1=min2=MAX; //int的范圍是-32768-32767</p><p>  lnode=rnode=0; //lnode和rnode記錄最小權(quán)值的兩個結(jié)點位置</p><p>  for (k=0;k<

27、=i-1;k++) //選出每次外層循環(huán)最小權(quán)值的兩個結(jié)點</p><p><b>  {</b></p><p>  if (ht[k].parent==0) //只在尚未構(gòu)造二叉樹的結(jié)點中查找</p><p><b>  {</b></p><p&

28、gt;  if (ht[k].weight<min1) //比min1小時</p><p><b>  {</b></p><p>  min2=min1;rnode=lnode;</p><p>  min1=ht[k].weight;lnode=k;</p><p><b>  }

29、</b></p><p>  else if (ht[k].weight<min2) //比min1大,比min2小</p><p><b>  {</b></p><p>  min2=ht[k].weight;rnode=k;</p><p><b>  }</b>&l

30、t;/p><p><b>  }</b></p><p><b>  }</b></p><p>  ht[lnode].parent=i;ht[rnode].parent=i; //兩個最小節(jié)點的父節(jié)點是i</p><p>  ht[i].weight=ht[lnode]

31、.weight+ht[rnode].weight; //兩個最小節(jié)點的父節(jié)點權(quán)值為兩個最小節(jié)點權(quán)值之和</p><p>  ht[i].lchild=lnode;ht[i].rchild=rnode; //父節(jié)點的左節(jié)點和右節(jié)點</p><p><b>  }</b></p><p><b>

32、;  }</b></p><p><b> ?、酃蚵幋a</b></p><p>  void CreateHCode(HTNode ht[],HCode hcd[],int n)</p><p><b>  {</b></p><p>  int i,p,c;</p>

33、<p><b>  HCode hc;</b></p><p>  for (i=0;i<n;i++) //根據(jù)哈夫曼樹求哈夫曼編碼</p><p><b>  {</b></p><p>  hc.start=n; //初始

34、位置</p><p>  c=i; //從葉子結(jié)點ht[i]開始上溯</p><p>  p=ht[i].parent;</p><p>  while (p!=0) //循序直到樹根結(jié)點結(jié)束循環(huán)</p><p><b>  {</

35、b></p><p>  hc.cd[hc.start--]=(ht[p].lchild)==c?'0':'1'; //左孩子記為0,右孩子記為1</p><p><b>  c=p;</b></p><p>  p=ht[p].parent;

36、 //與上句c=i;p=ht[i].parent同義,促進循環(huán)</p><p><b>  }</b></p><p>  hc.start++; //start指向哈夫曼編碼hc.cd[]中最開始字符</p><p>  hcd[i]=hc;</p&

37、gt;<p><b>  }</b></p><p><b>  }</b></p><p><b> ?、芄蚵g碼</b></p><p>  void deHCode(HTNode ht[],HCode hcd[],int n,char str[]) //譯碼函數(shù)<

38、/p><p><b>  {</b></p><p>  printf("輸出譯碼結(jié)果為:\n");</p><p>  int i,j,k,x,m=0;</p><p>  char code[MAX];</p><p>  for (i=0;i<MAX;i++)

39、 </p><p>  for (j=0;j<n;j++)</p><p>  if(str[i]==ht[j].data) //循環(huán)查找與輸入字符相同的編號,相同的就輸出這個字符的編碼</p><p><b>  {</b></p><p>  for (k=hcd

40、[j].start;k<=n;k++)</p><p><b>  {</b></p><p>  code[m]=hcd[j].cd[k]; //將輸出的編碼賦值到數(shù)組中</p><p><b>  m++;</b></p><p><b>  }</b><

41、/p><p>  break; //輸出完成后跳出當前for循環(huán)</p><p><b>  }</b></p><p>  code[m]='#';</p><p>  //把要進行譯碼的字符串存入code數(shù)組中</p><p>  while(c

42、ode[0]!='#')</p><p>  for (i=0;i<n;i++)</p><p><b>  {</b></p><p>  m=0; //m為想同編碼個數(shù)的計數(shù)器</p><p>  for (k=hcd[i].start

43、,j=0;k<=n;k++,j++) //j為記錄所存儲這個字符的編碼個數(shù)</p><p><b>  {</b></p><p>  if(code[j]==hcd[i].cd[k]) //當有相同編碼時m值加1</p><p><b>  m++;</b></p>&l

44、t;p><b>  }</b></p><p>  if(m==j) //當輸入的字符串與所存儲的編碼字符串個數(shù)相等時則輸出這個的data數(shù)據(jù)</p><p><b>  {</b></p><p>  printf("%c",ht[i]

45、.data);</p><p>  for(x=0;code[x-j]!='#';x++) //把已經(jīng)使用過的code數(shù)組里的字符串刪除</p><p><b>  {</b></p><p>  code[x]=code[x+j]; //刪除j個數(shù),往前移動j位</p&g

46、t;<p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  printf("\n");</p><p><b>  }</b></p>

47、<p><b> ?、葜骱瘮?shù)</b></p><p>  void main()</p><p><b>  {</b></p><p>  char st[MAX],sst[MAX];</p><p>  int cn[257];</p><p><b&

48、gt;  int n,i;</b></p><p>  printf("請輸入字符串(任意字符):\n");</p><p><b>  gets(st);</b></p><p>  n=jsq(st,cn,sst);</p><p>  ////////////////////////

49、///99</p><p>  for(i=0;i<99;i++)</p><p>  sst[i]=st[i];</p><p>  //////////////////////////////////</p><p>  HTNode ht[M];</p><p>  HCode hcd[N];</p&

50、gt;<p>  CreateHT(ht,n,st,cn);</p><p>  CreateHCode(ht,hcd,n);</p><p>  outputHCode(ht,hcd,n);</p><p>  editHCode(ht,hcd,n,sst);</p><p>  deHCode(ht,hcd,n,sst);

51、</p><p><b>  }</b></p><p><b>  五、調(diào)試</b></p><p><b>  輸出哈夫曼編碼</b></p><p><b>  輸出編碼結(jié)果</b></p><p><b>  輸出

52、譯碼結(jié)果</b></p><p><b>  附錄</b></p><p><b>  源程序</b></p><p>  #include <stdio.h></p><p>  #include <string.h> //gets()函數(shù)需

53、要</p><p>  #define N 256 //義用N表示50葉節(jié)點數(shù)</p><p>  #define M 2*N-1 //用M表示節(jié)點總數(shù) 當葉節(jié)點數(shù)位n時總節(jié)點數(shù)為2n-1</p><p>  #define MAX 32767</p><p>  typedef st

54、ruct</p><p><b>  {</b></p><p>  char data; //結(jié)點字符</p><p>  int weight; //權(quán)值</p><p>  int parent; //雙親結(jié)點<

55、/p><p>  int lchild; //左孩子結(jié)點</p><p>  int rchild; //右孩子結(jié)點</p><p><b>  }HTNode;</b></p><p>  ///////////////////////////

56、 </p><p>  typedef struct</p><p><b>  {</b></p><p>  char cd[N]; //存放哈夫曼碼</p><p>  int start; //從start開始讀cd中的哈夫曼碼<

57、/p><p><b>  }HCode;</b></p><p>  ///////////////////////////////////</p><p>  int jsq(char *s,int cnt[],char str[])</p><p><b>  {char *p;</b></p

58、><p>  int i,j,k;</p><p>  for(i=1;i<=256;i++)</p><p><b>  cnt[i]=0;</b></p><p>  for(p=s;*p!='\0';p++)</p><p><b>  {</b>&l

59、t;/p><p><b>  k=*p;</b></p><p><b>  cnt[k]++;</b></p><p><b>  }</b></p><p><b>  j=0;</b></p><p>  for(i=1,j=0;

60、i<=256;i++)</p><p>  if(cnt[i]!=0)</p><p><b>  {</b></p><p><b>  j++;</b></p><p><b>  }</b></p><p><b>  return

61、 j;</b></p><p><b>  }</b></p><p>  ///////////////////////////////////////////////////</p><p>  void CreateHT(HTNode ht[],int n,char str[],int cn[])

62、 //創(chuàng)建哈夫曼樹函數(shù)</p><p>  {for(int input=1;input<=256;input++)</p><p><b>  {</b></p><p>  str[input]=input;</p><p><b>  }</b></p><p>

63、<b>  int l=0;</b></p><p>  for(int output=1;output<=256;output++)</p><p><b>  {</b></p><p>  if(cn[output] !=0)</p><p>  {ht[l].data=str[outp

64、ut]; //按字母順序?qū)⒊霈F(xiàn)的字母依次存入數(shù)組ht[]</p><p>  ht[l].weight=cn[output];</p><p><b>  l++;</b></p><p><b>  }</b></p><p>&l

65、t;b>  }</b></p><p>  int i,k,lnode,rnode;</p><p>  int min1,min2;</p><p>  for (i=0;i<2*n-1;i++) </p><p>  ht[i].parent=ht[i].lchild=ht[i].rchild=0;

66、 //所有結(jié)點的相關(guān)域置初值0</p><p>  for (i=n;i<2*n-1;i++) //構(gòu)造哈夫曼樹</p><p><b>  {</b></p><p>  min1=min2=MAX; //int的范圍是-32768-32767</p>&

67、lt;p>  lnode=rnode=0; //lnode和rnode記錄最小權(quán)值的兩個結(jié)點位置</p><p>  for (k=0;k<=i-1;k++) //選出每次外層循環(huán)最小權(quán)值的兩個結(jié)點</p><p><b>  {</b></p><p>  if (ht[k

68、].parent==0) //只在尚未構(gòu)造二叉樹的結(jié)點中查找</p><p><b>  {</b></p><p>  if (ht[k].weight<min1) //比min1小時</p><p><b>  {</b></p><p> 

69、 min2=min1;rnode=lnode;</p><p>  min1=ht[k].weight;lnode=k;</p><p><b>  }</b></p><p>  else if (ht[k].weight<min2) //比min1大,比min2小</p><p><b>  

70、{</b></p><p>  min2=ht[k].weight;rnode=k;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  ht[lnode

71、].parent=i;ht[rnode].parent=i; //兩個最小節(jié)點的父節(jié)點是i</p><p>  ht[i].weight=ht[lnode].weight+ht[rnode].weight; //兩個最小節(jié)點的父節(jié)點權(quán)值為兩個最小節(jié)點權(quán)值之和</p><p>  ht[i].lchild=lnode;ht[i].rchild=rno

72、de; //父節(jié)點的左節(jié)點和右節(jié)點</p><p><b>  }</b></p><p><b>  }</b></p><p>  //////////////////////////////////////////////////////</p><p>  v

73、oid CreateHCode(HTNode ht[],HCode hcd[],int n)</p><p><b>  {</b></p><p>  int i,p,c;</p><p><b>  HCode hc;</b></p><p>  for (i=0;i<n;i++)

74、 //根據(jù)哈夫曼樹求哈夫曼編碼</p><p><b>  {</b></p><p>  hc.start=n; //初始位置</p><p>  c=i; //從葉子結(jié)點ht[i]開始上溯</p><p>

75、  p=ht[i].parent;</p><p>  while (p!=0) //循序直到樹根結(jié)點結(jié)束循環(huán)</p><p><b>  {</b></p><p>  hc.cd[hc.start--]=(ht[p].lchild)==c?'0':'1'

76、;; //左孩子記為0,右孩子記為1</p><p><b>  c=p;</b></p><p>  p=ht[p].parent; //與上句c=i;p=ht[i].parent同義,促進循環(huán)</p><p><b>  }</b&g

77、t;</p><p>  hc.start++; //start指向哈夫曼編碼hc.cd[]中最開始字符</p><p>  hcd[i]=hc;</p><p><b>  }</b></p><p><b>  }</b></p&

78、gt;<p>  /////////////////////////////////////////////////</p><p>  void outputHCode(HTNode ht[],HCode hcd[],int n) //輸出哈夫曼編碼的列表</p><p><b>  {</b></p><p><

79、b>  int i,k;</b></p><p>  printf(" 輸出哈夫曼編碼:\n"); </p><p>  for (i=0;i<n;i++) //輸出data中的所有數(shù)據(jù),</p><p><b>  {</b></p

80、><p>  printf(" %c:\t",ht[i].data); </p><p>  for (k=hcd[i].start;k<=n;k++) //輸出所有data中數(shù)據(jù)的編碼</p><p><b>  {</b></p>

81、<p>  printf("%c",hcd[i].cd[k]); //從初最開始的字符起輸出</p><p><b>  }</b></p><p>  printf("\n");</p><p><b>  }</b></p

82、><p><b>  }</b></p><p>  ////////////////////////////////////////////</p><p>  void editHCode(HTNode ht[],HCode hcd[],int n,char str[]) //編碼函數(shù)</p><p>  {int

83、 i,j,k;</p><p>  printf("\n輸出編碼結(jié)果:\n");</p><p>  for (i=0;i<MAX;i++) </p><p>  for (j=0;j<n;j++)</p><p>  if(str[i]==ht[j].data)

84、 //循環(huán)查找與輸入字符相同的編號,相同的就輸出這個字符的編碼</p><p><b>  {</b></p><p>  for (k=hcd[j].start;k<=n;k++)</p><p><b>  {</b></p><p>  printf("%c"

85、;,hcd[j].cd[k]);</p><p><b>  }</b></p><p>  break; //輸出完成后跳出當前for循環(huán)</p><p><b>  }</b></p><p>  printf("\n");</p&g

86、t;<p><b>  }</b></p><p>  /////////////////////////////////////////////</p><p>  void deHCode(HTNode ht[],HCode hcd[],int n,char str[]) //譯碼函數(shù)</p><p><b&g

87、t;  {</b></p><p>  printf("輸出譯碼結(jié)果為:\n");</p><p>  int i,j,k,x,m=0;</p><p>  char code[MAX];</p><p>  for (i=0;i<MAX;i++) </p>

88、<p>  for (j=0;j<n;j++)</p><p>  if(str[i]==ht[j].data) //循環(huán)查找與輸入字符相同的編號,相同的就輸出這個字符的編碼</p><p><b>  {</b></p><p>  for (k=hcd[j].start;k<=n;k++)&l

89、t;/p><p><b>  {</b></p><p>  code[m]=hcd[j].cd[k]; //將輸出的編碼賦值到數(shù)組中</p><p><b>  m++;</b></p><p><b>  }</b></p><p>  break

90、; //輸出完成后跳出當前for循環(huán)</p><p><b>  }</b></p><p>  code[m]='#';</p><p>  //把要進行譯碼的字符串存入code數(shù)組中</p><p>  while(code[0]!='#')<

91、/p><p>  for (i=0;i<n;i++)</p><p><b>  {</b></p><p>  m=0; //m為想同編碼個數(shù)的計數(shù)器</p><p>  for (k=hcd[i].start,j=0;k<=n;k++,j++)

92、 //j為記錄所存儲這個字符的編碼個數(shù)</p><p><b>  {</b></p><p>  if(code[j]==hcd[i].cd[k]) //當有相同編碼時m值加1</p><p><b>  m++;</b></p><p><b>  }</

93、b></p><p>  if(m==j) //當輸入的字符串與所存儲的編碼字符串個數(shù)相等時則輸出這個的data數(shù)據(jù)</p><p><b>  {</b></p><p>  printf("%c",ht[i].data);</p><p

94、>  for(x=0;code[x-j]!='#';x++) //把已經(jīng)使用過的code數(shù)組里的字符串刪除</p><p><b>  {</b></p><p>  code[x]=code[x+j]; //刪除j個數(shù),往前移動j位</p><p><b>  

95、}</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  printf("\n");</p><p><b>  }</b></p><p>  ///////////

96、/////////////////////////////</p><p>  void main()</p><p><b>  {</b></p><p>  char st[MAX],sst[MAX];</p><p>  int cn[257];</p><p><b>  in

97、t n,i;</b></p><p>  printf("請輸入字符串(任意字符):\n");</p><p><b>  gets(st);</b></p><p>  n=jsq(st,cn,sst);</p><p>  ///////////////////////////99&l

98、t;/p><p>  for(i=0;i<99;i++)</p><p>  sst[i]=st[i];</p><p>  //////////////////////////////////</p><p>  HTNode ht[M];</p><p>  HCode hcd[N];</p>&l

99、t;p>  CreateHT(ht,n,st,cn);</p><p>  CreateHCode(ht,hcd,n);</p><p>  outputHCode(ht,hcd,n);</p><p>  editHCode(ht,hcd,n,sst);</p><p>  deHCode(ht,hcd,n,sst);</p&

溫馨提示

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

評論

0/150

提交評論