编码-哈夫曼编译码器,求大神帮忙看看译码的部分,为什么编译不出来?还有可以帮忙加入一段写入文件的程序吗?

问题描述

哈夫曼编译码器,求大神帮忙看看译码的部分,为什么编译不出来?还有可以帮忙加入一段写入文件的程序吗?

#include
#include
#include
#define maxsize 100

#define maxsize_1 1000
#define max 100

typedef struct

{
char data;
int weight;
int parent;
int lchild;

int rchild;

}huffnode;
typedef struct

{
char cd[max];

int start;
}huffcode;
huffnode ht[2*max];
huffnode * input()

{
int i,n;
printf("Enter elem num:");
scanf("%d",&n);

ht[0].weight=n;
for(i=1;i<=n;i++)
{
getchar();
printf("%d elem data weight:",i);
scanf("%c%d",&ht[i].data,&ht[i].weight);

}
return ht;
}
// huffnode ht[2*max];
huffnode init()

{
ht[0].weight=27;
ht[1].data=' ';ht[1].weight=186;
ht[2].data='A';ht[2].weight=64;
ht[3].data='B';ht[3].weight=13;
ht[4].data='C';ht[4].weight=22;
ht[5].data='D';ht[5].weight=32;
ht[6].data='E';ht[6].weight=103;
ht[7].data='F';ht[7].weight=21;
ht[8].data='G';ht[8].weight=15;
ht[9].data='H';ht[9].weight=47;
ht[10].data='I';ht[10].weight=57;
ht[11].data='J';ht[11].weight=1;
ht[12].data='K';ht[12].weight=5;
ht[13].data='L';ht[13].weight=32;
ht[14].data='M';ht[14].weight=20;
ht[15].data='N';ht[15].weight=57;
ht[16].data='O';ht[16].weight=63;
ht[17].data='P';ht[17].weight=15;
ht[18].data='Q';ht[18].weight=1;
ht[19].data='R';ht[19].weight=48;
ht[20].data='S';ht[20].weight=51;
ht[21].data='T';ht[21].weight=80;
ht[22].data='U';ht[22].weight=23;
ht[23].data='V';ht[23].weight=8;
ht[24].data='W';ht[24].weight=18;
ht[25].data='X';ht[25].weight=1;
ht[26].data='Y';ht[26].weight=16;
ht[27].data='Z';ht[27].weight=1;
return ht;
}
void hfmtree(huffnode ht[])

{
int i,k,s1,s2,m1,m2,n;

n=ht[0].weight;
for(i=0;i<=2*n-1;i++)
ht[i].parent=ht[i].lchild=ht[i].rchild=0;
for(i=n+1;i<=2*n-1;i++)
{
m1=m2=10000;
s1=s2=0;
for(k=0;k<=i-1;k++)
if(ht[k].parent==0)
if(ht[k].weight
{
m2=m1;
s2=s1;
m1=ht[k].weight;
s1=k;
}
else if(ht[k].weight
{
m2=ht[k].weight;
s2=k;
}
ht[s1].parent=i;
ht[s2].parent=i;
ht[i].weight=ht[2].weight+ht[3].weight;
ht[i].lchild=s1;
ht[i].rchild=s2;
}
}
huffcode hcd[max],d;
huffcode *output(huffnode ht[])
{
int i,n,f,c,k,x;
n=ht[0].weight;
for(i=0;i
{
d.start=n+1;
c=i;
f=ht[i].parent;
while(f!=0)
{
if(ht[f].lchild==c)
d.cd[--d.start]='0';
else
d.cd[--d.start]='1';
c=f;
f=ht[f].parent;
}
hcd[i]=d;
}
printf("Input huffman code:n");
for(i=0;i
{
printf("%c:",ht[i].data);
x=hcd[i].start;
for(k=x;k
printf("%c",hcd[i].cd[k]);
printf("n");
}
return hcd;
}
void coding(huffcode hcd[],huffnode ht[])
{
char zw[maxsize],code[maxsize_1];
int i=0,j,k,c_len;
c_len=0;//编码正文初始长度置零
int m,n,x;
char fp1[maxsize],fp2[2*maxsize];
m=0;
printf("Enter a string:");
getchar();
gets(fp1);
n=strlen(fp1);
for(i=0;i
{
for(j=0;j
if(fp1[i]==ht[j].data)
{
x=hcd[j].start;
for(k=x;k
fp2[m++]=hcd[j].cd[k];
}
}
printf("The coding result is:n");
for(i=0;i
printf("%c",fp2[i]);
printf("n");
}
void decoding(huffcode hcd[],huffnode ht[])
{
int i,j,m,k,x,n,w;
char in[maxsize*2],out[maxsize];
printf("Enter code stream:n");
scanf("%s",in);
n=strlen(in);
i=0;m=0;
while(i
{
for(j=0;j
{
x=hcd[j].start;
for(k=x,w=i;k
if(in[w]!=hcd[j].cd[k])
break;
if(k>ht[0].weight)
{
out[m++]=ht[j].data;
break;
}
}
i=w;
}
for(i=0;i<m;i++)
printf("%c",out[i]);
printf("n");
}
int main ()
{
int select;
huffnode * ht;
huffcode * hcd;
ht=init();
hfmtree(ht);
hcd=output(ht);
do
{
printf("
**********n");
printf("0. 退出n");
printf("1. 编码n");
printf("2. 译码n");
scanf("%d",&select);
if(select==0){
printf("Thank you use the software!n");
exit(1);
}
if(select==1)
coding(hcd,ht);

          else if(select==2)
                 decoding(hcd,ht);
   }while(1);
   return 0 ;

}

解决方案

http://wenku.baidu.com/link?url=5EG9DEcYSIlJ9QhuaRJ6CZ2l3JETbrhf9dTn5Tcwv0MltCiDe-A9fSF0VXVzFsiIIWezPr8xH-nZil9Hfc_gECbJQFGLsTXoDDy6FKT3c2i

时间: 2024-08-07 22:47:23

编码-哈夫曼编译码器,求大神帮忙看看译码的部分,为什么编译不出来?还有可以帮忙加入一段写入文件的程序吗?的相关文章

为什么需要标示符,求大神。在第三行代码,编译时出错。

问题描述 为什么需要标示符,求大神.在第三行代码,编译时出错. class Point{ double x,y,z; Point(double_x,double_y,double_z ) { x=_x; y=_y; z=_z; } void setX(double _x){ x=_x; } void setY(double _y){ y=_y; } void setZ(double_z){ z=_z; } double getDistance(Point P){ return(x-p.x)*(x

求大神救救我!Android开发中遇到很初级的问题,用Android application project编写的程序总是意外终止

问题描述 我是用Androidapplicationproject编写的Android工程,但是发现自己在编写了3个很小的程序时.代码没有报错.在模拟器上衣运行总是出现程序终止的问题.在LogCat中找问题说是调用了空指针,但是我一一核对了代码.发现代码是没有问题.也不知道是Androidapplicationproject在开发过程中是需要另外的一些配置. 解决方案 解决方案二:dubug看,logcat出现空指针的错误,还是仔细看看代码吧解决方案三:注意看下是不是有些组件在类里面定义了但是没

指针-求大神解答一下linux内核编译时键盘驱动模块出现了问题!新手求助!谢谢!

问题描述 求大神解答一下linux内核编译时键盘驱动模块出现了问题!新手求助!谢谢! 编译的时候,就出现了这几个错误,然后我就一直不能编译内核, 估计是指针的问题,但是我又不知道应该如何解决, 已经卡了我差不多两个星期了,一直都解决不了,跪求大神指点! 谢谢! 解决方案 在编译之前,有没有用#cp -f config_tq板的具体的名字 .config复制tq板的配置文件?

使用了开源软件CloudSim,可以申请软件著作权吗,求大神解答

问题描述 使用了开源软件CloudSim,可以申请软件著作权吗,求大神解答 使用了开源软件CloudSim,可以申请软件著作权吗,求大神解答 解决方案 你只能对你写的代码申请著作权. 解决方案二: 是你的程序中用到了部分开源代码?还是整个开源软件嵌套在你的系统中? 解决方案三: 软件著作权是适用你自己创作和拥有所有权的代码的,和你用到不用到第三方的软件没有关系. 解决方案四: 建议直接和申请软件著作权的工作人员联系,他们会解答得比较专业比较详细. 解决方案五: 请问cloudsim是如何是实现给

visual studio-vs2013加载opencv时总是出错,求大神给看看“CvSVM”: 未声明的标识符

问题描述 vs2013加载opencv时总是出错,求大神给看看"CvSVM": 未声明的标识符 "CvSVM": 未声明的标识符 解决方案 CvSVM的头文件是ml.h,你要确认你包含了这个文件,你也可以再OpenCV里找到这个文件 解决方案二: http://blog.csdn.net/fall221/article/details/7938812 解决方案三: 你的include目录配置正确了么?我估计是目录没有配置好,所以找不到 解决方案四: 那我看可能?那就

冒泡排序 noj-noj一道冒泡排序,不能通过,求大神解答

问题描述 noj一道冒泡排序,不能通过,求大神解答 题目描述 给定输入排序元素数目n和相应的n个元素,写出程序,利用内排序算法中冒泡排序算法进行排序,并输出排序过程中每趟及最后结果的相应序列. 输入 共两行,第一行给出排序元素数目n,第二行给出n个元素,1≤n≤400,每个元素值范围为 [0,100000) 输出 三个部分 第1部分为两行,第1行输出文字"Source:",第2行给出原始序列: 第2部分,开始输出文字"Bubble Sort:",后续输出简单选择排序

求大神解答:如何用verilog做出反馈移位寄存器?

问题描述 求大神解答:如何用verilog做出反馈移位寄存器? 如何利用verilog,写出反馈移位寄存器的程序?求大神指导!!!

cout-急!求大神解决一个极为简单的c++问题

问题描述 急!求大神解决一个极为简单的c++问题 在VS2010环境下编了下面一段代码: #include #include #include using namespace std; int main() { list lvec; string str; cout<<"Enter some string:"< while(cin>>str) { lvec.push_back(str); } for(list::iterator iter=lvec.beg

服务器-apache+tomcat集群问题,求大神解答 谢谢,在线等

问题描述 apache+tomcat集群问题,求大神解答 谢谢,在线等 apache+tomcat集群问题,服务器过一段时间后apache 不能处理动态请求, 用tomcat端口直接访问动态程序是正常的,通过apache 访问动态请求一直在打转, 但是重启tomcat后,又可以用Apache访问动态请求.求大神解答!! 谢谢,在线等 解决方案 http://zhidao.baidu.com/link?url=bxT37XG5Q1mHYLzTl1JLHyxFVuw7lK1ovGbqf6s6IyKF