云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > 用C++实现哈夫曼树的代码

用C++实现哈夫曼树的代码

  • 62 次阅读
  • 3 次下载
  • 2025/7/15 0:45:10

韩山师范学院

数据结构中的哈夫曼树的实现

班级:2015级软工班 作者:黄俊聪

#include #include #include #include using namespace std; typedefstruct{ char data; int weight;

intparent,lchild,rchild; }HTNode,*HuffmanTree;

typedef char ** HuffmanCode;

void Select(HuffmanTree&HT,intn,int m) {

HuffmanTree p=HT; inttmp;

for(int j=n+1;j<=m;j++) {

int tag1,tag2,s1,s2;

tag1=tag2=256; for(int x=1;x<=j-1;x++) { if(p[x].parent==0&&p[x].weight

tag1=p[x].weight; s1=x; } }

for(int y=1;y<=j-1;y++) {

if(p[y].parent==0&&y!=s1&&p[y].weight

if(s1>s2) //将选出的两个节点中的序号较小的始终赋给s1 { tmp=s1; s1=s2; s2=tmp; }

p[s1].parent=j; p[s2].parent=j; p[j].lchild=s1; p[j].rchild=s2; p[j].weight=p[s1].weight+p[s2].weight; } }

voidHuffmanCoding(HuffmanTree&HT,intn,char *w1,int*w2) {

int m=2*n-1;

if(n<=1) return;

HT=new HTNode[m+1]; HuffmanTree p=HT; for(int i=1;i<=m;i++) {

p[i].weight=p[i].parent=p[i].lchild=p[i].rchild=0; }

for(int i=1;i<=n;i++) {

p[i].data=w1[i-1]; p[i].weight=w2[i];

p[i].parent=p[i].lchild=p[i].rchild=0; }

Select(HT,n,m);

ofstreamoutfile(\ //生成hfmTree文件

for (int i=1;i<=m;i++) {

outfile<

outfile.close();

cout<<\初始化结果已保存在hfmTree文件中\\n\}

void ToBeTree() //将正文写入文件ToBeTree中 { ofstreamoutfile(\ outfile<<\ outfile.close(); }

void Encoding(HuffmanTree&HT,int n) //编码 {

HuffmanCode HC;

HC=new char*[n+1];//分配储存n个字符编码的编码表空间 char *cd;

cd=new char[n];//分配临时存放每个字符编码的动态数组空间 cd[n-1]='\\0';//编码结束

for(int i=1;i<=n;i++)//逐个字符求哈夫曼编码 { int start=n-1;//start开始时指向最后,即编码结束位置 int c=i;

int f=HT[i].parent;//f指向结点c的双亲结点 while(f!=0) { if(HT[f].lchild==c) cd[--start]='0';//结点c是f的左孩子,即生成代码0 else cd[--start]='1';//结点c是f的右孩子,即生成代码1 c=f; f=HT[f].parent;//继续向上回溯 }//求出第i个字符的编码 HC[i]=new char[n-start];//为第i个字符编码分配空间 strcpy(HC[i],&cd[start]);//将求得的编码从临时空间cd复制到HC的当前行中 }

delete cd;//释放临时空间

cout<<\输出哈夫曼编码:\

for(int h=1;h<=n;h++) //输出编码 { cout<

if (h%8==0) cout<

cout<

//读取TOBETREE文件里的正文,并进行编码 fstreaminfile(\

char s[80];

while(!infile.eof())//判断是否到达文件尾部,以防止出现文件读取错误。 {

infile.getline(s,sizeof(s)); }

infile.close();

fstreamoutfile(\int count=0;

for (int h=0;s[h]!='\\0';h++) { for(int k=1;k<=n;k++) if (s[h]==HT[k].data) { cout<

if (count%9==0) cout<

outfile.close();

cout<<\编码结果已保存在文件CodeFile中.\cout<

void Decoding(HuffmanTree&HT,int n) //译码 {

int f=2*n-1;

fstreaminfile(\

char s[1000];

while(!infile.eof()) {

infile.getline(s,sizeof(s)); }

搜索更多关于: 用C++实现哈夫曼树的代码 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

韩山师范学院 数据结构中的哈夫曼树的实现 班级:2015级软工班 作者:黄俊聪 #include #include #include #include using namespace std; typedefstruct{ char data; int weight; intparent,lchild,rchild; }HTNode,*HuffmanTree; typedef char ** HuffmanCode; void Select(HuffmanTree&HT,intn,int m) { HuffmanTree p=HT; inttmp; for(int j=n+1

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com