第六周作業 哈夫曼編碼實現

2021-06-22 08:18:36 字數 1505 閱讀 5129

[cpp]view plain

copy

#include

#include

#include//malloc的標頭檔案,也可以用malloc.h

#include

using

namespace std;  

int num[26];    //存放個字母出現的次數

char str[50];  

typedef

structhtnode,*huffmantree;  

typedef

char **hfmcode;  

void select(huffmantree &ht,int n,int *p1,int *p2) //select函式,選出ht樹到n為止,權值最小且parent為-1的2個節點

}  for(i=j+1;iif(ht[i].weight  

}  for(j=0;jif(ht[j].parent==-1&&x!=j)  

}  for(i=j+1;i  

}  if(x>y)  

else  

}  void hfmcoding(huffmantree &ht,hfmcode &hc,int w,int n) //構建哈夫曼樹ht,並求出n個字元的哈夫曼編碼hc

m=2*n-1;  

ht=(huffmantree)malloc((m+1)*sizeof(htnode));  

for(i=0;i//初始化n個葉子結點

for(;i//初始化其餘的結點

for(i=n;i//建立哈夫曼樹

hc=(hfmcode)malloc((n+1)*sizeof(char *));  

cd=(char *)malloc(n*sizeof(char));  

cd[n-1]='\0';  

for(i=0;i//給n個字元編碼

else  

}  hc[i]=(char*)malloc((n-start)*sizeof(char));  

strcpy(hc[i],&cd[start]);  

}  free(cd);  

}  void main()  

cout<

}  hfmcoding(ht,hc,w,n);  

cout<

int k=2*n-2;  

cout<

cin>>str1;  

cout<

for(i=0;i  

}  else

if(str1[i]=='1')  

}  }  cout<

}                   

執行結果:

第六周作業1 利用哈夫曼編碼字母表

1.哈夫曼編碼。對教材p167中習題5.18,思考並完成問題a d。下表給出了英文本母 包括用於分割單詞的空格 在某文集中的出現頻率。空格 18.3 r 4.8 y 1.6 e 10.2 d 3.5 p 1.6 t 7.7 l 3.4 b 1.3 a 6.8 c 2.6 v 0.9 o 5.9 u ...

哈夫曼編碼實現

define huffmancode char typedef struct node huffmantree struct node 葉節點為n的哈夫曼樹有2 n 1個節點 用 1表示當前parent未被訪問 huffmantree createhuffmantree int wet,int n ...

實現哈夫曼編碼

include include include include include using namespace std typedef struct node vector nodes 表示結點的指標組 double char number 0 每個字元平均花費的編碼長度 const int cha...