www.pudn.com > haffman.rar > haffman.cpp


#define MAXVALUE 1000 
#define MAXLEAF 30 
#define MAXNODE 59 
#define MAXBIT 10 
#define Maxsize 200 
typedef unsigned char SString[Maxsize] ; 
#include  
 
typedef struct 
{ 
	char data; 
	int Weight; 
	int Flag; 
	int Parent; 
	int LChild; 
	int RChild; 
}hnodetype; 
 
typedef struct 
{ 
	int Bit[MAXBIT]; 
	int Start; 
}hcodetype; 
 
 
void CreatString(SString s) 
{ 
	printf("\n请输入电文,以*结尾\n"); 
    scanf("%s",s);  
    
} 
 
void CountString(SString s,int count[],char alph[]) 
{ 
	//int count[100]; 
	//char alph[100]; 
	int i,j,k; 
	 i=0;j=0;k=0; 
	for(i=0;i<100;i++) 
		count[i]=0; 
	for(i=0;i<100;i++) 
		alph[i]='#'; 
    while(s[j]!='*'){ 
        for(j=0;s[j]!='*';j++){ 
			i=0; 
            while(alph[i]!='#'&&alph[i]!=s[j])i++; 
		    if(alph[i]='#'){ 
			     alph[i]=s[j]; 
		 	     count[i]=count[i]+1; 
			} 
			else if(alph[i]=s[j]) 
				count[i]=count[i]+1; 
		} 
	} 
	printf("\n各字符频数统计\n"); 
	for(i=0;i<100&&alph[i]!='#';i++) 
		printf("%c的权值为%d\n",alph[i],count[i]); 
} 
			 
 
 
 
void TnitHaffman(hnodetype HuffNode[],hcodetype HuffCode[], int n,int count[],char alph[]) 
{ 
	int i; 
    //for(j=0;alph[j]!='#';j++); 
    for(i=0;i<2*n-1;i++) 
	{ 
		HuffNode[i].Weight=0; 
		HuffNode[i].Flag=0; 
		HuffNode[i].Parent=0; 
		HuffNode[i].LChild=-1; 
		HuffNode[i].RChild=-1; 
	} 
	for(i=0;i