C++哈夫曼编码问题文件压缩问题

用哈夫曼编码实现文件压缩_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
用哈夫曼编码实现文件压缩
&&用哈夫曼编码实现文件压缩
阅读已结束,下载文档到电脑
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,方便使用
还剩7页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢求大神解答、关于哈夫曼编码压缩恢复的问题【c++吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:297,821贴子:
求大神解答、关于哈夫曼编码压缩恢复的问题收藏
为什么我无法打开文件、而且txt文件大小也大于5K啊,求大神指导~~~
博为峰作为良心上市企业,提供免费试学,零元入学服务,签订就业协议,保障薪水8K+.博为峰拒绝灌输式填鸭教学,让每个c++都可以独当一面,成为大牛!
水一贴,经验到手,马上10级
抄得一手好代码。
LZ 发这帖时,正叼着4.5的红河,用刚撸过管的右手扣着脚丫子,嘴里发出满足的呻吟,长长的烟灰掉在楼主那用了5年的双飞燕键盘,脏脏的键盘上发出一股恶臭,但LZ还是噼噼啪啪地敲得乐此不疲,口渴了 就拿着一周前喝过的健力宝罐子装罐自来水 故咯故咯的喝,微笑地露出一口黄牙看着自己的YY的帖子,一旁的炒面快餐盒子已经放了一个月了,那里插满了烟头,楼主只是卖萌 丢下掉饵 然后嘿嘿傻笑着看着众吧友 用扣玩脚丫的手拿着筷子狠吸了一口泡面 却不知又多少死皮掉入面汤,摇摇欲坠的椅子随着LZ的上下**而发出吱吱咯咯的声音,有时候不到半分钟,一声几近痉挛的叹息,一团稀稀的JY流在了LZ的手上,LZ麻利的拿起上次上次吃炒面偷的面巾纸擦拭, 心里默念道:今天已经是第三次了,下周不撸了。一边把纸团甩在桌子上。还不忘闻闻自己的手,然后继续在帖子上回复:“本人小女子哟~~~”...楼主看到这么多人上钩 猥琐一笑 用手擦擦嘴角……
LZ 发这帖时,正叼着4.5的红河,用刚撸过管的右手扣着脚丫子,嘴里发出满足的呻吟,长长的烟灰掉在楼主那用了5年的双飞燕键盘,脏脏的键盘上发出一股恶臭,但LZ还是噼噼啪啪地敲得乐此不疲,口渴了 就拿着一周前喝过的健力宝罐子装罐自来水 故咯故咯的喝,微笑地露出一口黄牙看着自己的YY的帖子,一旁的炒面快餐盒子已经放了一个月了,那里插满了烟头,楼主只是卖萌 丢下掉饵 然后嘿嘿傻笑着看着众吧友 用扣玩脚丫的手拿着筷子狠吸了一口泡面 却不知又多少死皮掉入面汤,摇摇欲坠的椅子随着LZ的上下**而发出吱吱咯咯的声音,有时候不到半分钟,一声几近痉挛的叹息,一团稀稀的JY流在了LZ的手上,LZ麻利的拿起上次上次吃炒面偷的面巾纸擦拭, 心里默念道:今天已经是第三次了,下周不撸了。一边把纸团甩在桌子上。还不忘闻闻自己的手,然后继续在帖子上回复:“本人小女子哟~~~”...楼主看到这么多人上钩 猥琐一笑 用手擦擦嘴角……
楼主求全部程序 课题设计T-T
登录百度帐号推荐应用求C++编程实现哈夫曼编码压缩软件!_百度知道
求C++编程实现哈夫曼编码压缩软件!
能对输入的任何类型的文件进行哈夫曼编码,产生编码后的文件——压缩文件;能对输入的压缩文件进行译码,生成压缩前的文件——解压文件。
我有更好的答案
我嘞个去,这里的“任何类型文件”是什么意思,要压缩软件的话自己下360压缩
采纳率:37%
zlib~compressed(~~);完美解决
为您推荐:
其他类似问题
您可能关注的内容
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。2013年 总版技术专家分年内排行榜第三
2012年 总版技术专家分年内排行榜第七
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。20:00 提问
数据结构,哈夫曼编码,文件压缩和解压缩一个完整的程序
数据结构,哈夫曼编码,文件压缩和解压缩一个完整的程序,大神们最好能带点注释,简单点的就行。重点:哈夫曼编码,文件压缩和解压缩
按赞数排序
#include&stdio.h&
#include&stdlib.h&
#include&string.h&
#include&conio.h&
#define MAXNUM 60
typedef struct
//权值,这个字符出现的频率
typedef struct
char code[MAXNUM];
HuffNode ht[MAXNUM*2]; //存放哈夫曼树
HuffCode hcd[MAXNUM];
//存放ht数组中对应的字符的编码
//字符的个数
//初始化哈夫曼树ht
void initHt()
//从文件document/character.txt中读出要编码的字符和权值
if((fp=fopen("document/character.txt","r"))==NULL){
printf("can not open the file character.txt");
ht[i].left=ht[i].right=ht[i].parent=-1;
while((ch=fgetc(fp))!=EOF){
if(ch=='\n'){
ht[i].left=ht[i].right=ht[i].parent=-1;
else if((ch&='a' && ch&='z')||(ch&='A' && ch&='Z'))
else if(ch&='0'&&ch&='9')
ht[i].weight=ht[i].weight*10+ch-'0';
if(fclose(fp)){
printf("can not close the file character.txt");
//构造哈夫曼树,看成有n棵树,选择权值最小的两棵树合并
void createHuffTree()
int i=0,k;
int minI,minJ;
minI=minJ=-1; //minI&minJ
for(k=n;k&2*n-1;k++){
//寻找ht中权值最小且无父结点的两个结点
while(ht[i].ch!='\0'){
if(ht[i].parent==-1){
}else if(f==1){
if(ht[i].weight&ht[minI].weight){
minJ=minI;
if(ht[i].weight&ht[minI].weight){
minJ=minI;
}else if(ht[i].weight&ht[minJ].weight)
//合并两个结点
ht[k].ch='#';
ht[k].left=minI;
ht[k].right=minJ;
ht[k].weight=ht[minI].weight+ht[minJ].
ht[k].parent=-1;
ht[minI].parent=ht[minJ].parent=k;
//将一个字符串反转
void reverse(char *str)
for(i=0,j=strlen(str)-1;i&j;i++,j--){
ch=str[i];
str[i]=str[j];
//哈夫曼编码,通过父节点从下往上找
void createHuffCode()
for(i=0;i&n;i++){
//给每个字符进行编码
while(ht[j].parent!=-1){
if(ht[ht[j].parent].left==j){
hcd[i].code[length++]=0+'0';
hcd[i].code[length++]=1+'0';
hcd[i].start=hcd[i].code[length-1]-'0';
hcd[i].code[length]='\0';
reverse(hcd[i].code);
//把hcd字符编码写入文件document/code.txt中
if((fp=fopen("document/code.txt","w"))==NULL){
printf("can not open the file character.txt");
for(i=0;i&n;i++){
fputc(ht[i].ch,fp);
fputs(hcd[i].code,fp);
fputc('\n',fp);
if(fclose(fp)){
printf("can not close the file character.txt");
//哈夫曼解码,每次都从根节点开始搜索
int releaseHuffCode(char *str,char* code)
int root=2*n-2;
int length=0,i=0;
while(code[i]){
if(code[i]=='0'+0)
root=ht[root].
else if(code[i]=='0'+1)
root=ht[root].
if(ht[root].left==-1 && ht[root].right==-1){
str[length++]=ht[root].
root=2*n-2;
str[length]='\0';
if(root==2*n-2)
//用户输入编码字符
void encode()
int i=0,j,f=1;
char str[50];
char code[500]={'\0'};
printf("\n请输入要编码的字符串(length&50)\n");
scanf("%s",str);
while(str[i]){
if((str[i]&='a'&&str[i]&='z')||(str[i]&='A'&&str[i]&='Z')){
for(j=0;j&n;j++)
if(str[i]==ht[j].ch){
strcat(code,hcd[j].code);
puts(code);
printf("你输入的字符串错误!\n");
printf("按任意键后重新选择!\n");
//用户输入解码字串
char str[50];
char code[500];
printf("\n请输入要解码的字串(用0和1表示)\n");
scanf("%s",code);
if(releaseHuffCode(str,code))
puts(str);
printf("你输入的字串错误!\n");
printf("按任意键后重新选择!\n");
void main()
int choice=1;
createHuffTree();
createHuffCode();
while(choice){
system("cls");
printf("/****************哈夫曼编码与解码*********************/\n");
printf(" 在document/character.txt 文件中存放着各个字母的权值\n");
printf(" 程序从中读出各个字母的权值构造哈夫曼树并进行编码\n");
printf(" 各个字符的编码存在document/code.txt文件中\n");
printf("/*****************************************************/\n");
printf("\n请输入你的选择:1 ---- 编码
2 ---- 解码
0 ---- 退出\n");
scanf("%d",&choice);
switch(choice){
printf("谢谢使用!\n");
printf("你的输入错误!按任意键后重新输入!\n");
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐

我要回帖

更多关于 哈夫曼编码与译码 的文章

 

随机推荐