哈夫曼算法——数据结构课程设计

假设某文本文档只包含26个英文字母,应用哈夫曼算法对该文档进行压缩和解压缩操作,使得该文档占用较少的存储空间

c++

5个回答

define X 401 # define Y 15/*哈夫曼树的长度*/

typedef struct ptree//定义哈夫曼结点类型
{struct ptree lchild;//左指针
struct ptree *rchild;/
右指针*/
int w;/*w存储节点权值*/
char zha[2];//储存当前节点的字母或数字 字符 如果不是叶子 则为'<'

}Ptree,*Optree;
int shu=0;
char ma[X][Y],b[Y]; //X为编码的个数有多少种字母就是X Y为编码长度
int bianma(Optree p,int a) //初始化a=sum=0;对哈夫曼进行编码的函数
{ int static c=0; //设置静态变量c
if(p) { if(p->lchild) //是左侧
{b[a]='0'; //左零
bianma(p->lchild,a+1); //继续遍历
}
if(p->rchild)
{
b[a]='1'; //右一
bianma(p->rchild,a+1); //继续遍历
}
if(p->zha[0]!='<') //如果是树叶则一个字符编码结束
{
b[a]='\0';
strcat(ma[shu++],b);
printf("%-13s\"%c\"\n",b,p->zha[0]); //输出编码和字符
c+=a*p->w; //计算权值
}
}
return c; //返回静态变量即总权值
}

这里是树和二叉树的实验

私聊我我,我给你代码,还可以显示哈夫曼杈~

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问