目录
最终结果展示

总体大纲
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define N 999
char c[N];//存储不同的字符
int weight[N];//存储各个字符的权值
typedef struct hf{
char ch;
int weight;
int parent;
int lchild;
int rchild;
}Huffman;
void HuffmanTree(Huffman huffTree[],char s[],int n);//构造一个Huffman树
void HuffmanCode(Huffman huffTree[],int n);//用来生成Huffman编码并输出
void HuffmanCode1(Huffman huffTree[],int n,char* s);//用来实现译码
void select(Huffman huffTree[],int k,int *i1,int *i2);//找到最小和次最小的节点
void count(int zhenfule[],char s[],char c[]);//用来记录输入的字符串中不同字母的权值
void strcpys(char* s1,char *s2,int n);//复制字符串
int numString(char s[]);//用来求字符串中有几种不同的字符
//界面函数
void menu();
void print(Huffman huffTree[],int n,char *s);
哈夫曼树构建函数
//构建哈夫曼树
void HuffmanTree(Huffman huffTree[],char s[],int n){
count(weight,s,c);
int i1,i2;
for(int i=0;i<2*n-1;i++){//进行树的初始化
if(i<n){
huffTree[i].ch=c[i];
}
huffTree[i].parent=-1;
huffTree[i].lchild=-1;
huffTree[i].rchild=-1;
}
for(int i=0;i<n;i++){
huffTree[i].weight=weight[i];
}
for(int k=n;k<2*n-1;k++){
select(huffTree,k,&i1,&i2);//找到parent为-1的最小和次小的节点
huffTree[k].weight=huffTree[i1].weight+huffTree[i2].weight;
huffTree[i1].parent=k;
huffTree[i2].parent=k;
huffTree[k].lchild=i1;
huffTree[k].rchild=i2;
}
}
//构建哈夫曼树的附带函数————找到最小和次最小节点
void select(Huffman huffTree[],int k,int *i1,int *i2){
int min1=99999;
int min2=99999;
int i;
for(i=0;i<k;i++){//找到i1
if(huffTree[i].weight<min1&

最低0.47元/天 解锁文章
3万+

被折叠的 条评论
为什么被折叠?



