标题:利用huffman树编码译码,大家帮我该一下错误
只看楼主
牛虻
Rank: 1
等 级:新手上路
威 望:1
帖 子:472
专家分:0
注 册:2004-10-1
 问题点数:0 回复次数:17 
利用huffman树编码译码,大家帮我该一下错误

如题:译码部分出问题了,译码为红色部分,大家帮我看看,THX #include<stdio.h> #define MAXVALUE 10000 #define MAXLEAF 30 #define MAXNODE MAXLEAF*2-1 #define MAXBIT 10

typedef struct node {char letter; int weight; int parent; int lchild; int rchild; }HNodeType;

typedef struct {char letter; int bit[MAXBIT]; int start; }HCodeType;

typedef struct {char s; int num; }Bowen;

void HuffmanTree(HNodeType HuffNode[],int n,Bowen a[]) {int i,j,m1,m2,x1,x2;

for(i=0;i<2*n-1;i++) {HuffNode[i].letter=NULL; HuffNode[i].weight=0; HuffNode[i].parent=-1; HuffNode[i].lchild=-1; HuffNode[i].rchild=-1;} for(i=0;i<n;i++){HuffNode[i].weight=a[i].num;HuffNode[i].letter=a[i].s;} for(i=0;i<n-1;i++) {m1=m2=MAXVALUE; x1=x2=0; for(j=0;j<n+i;j++) { if(HuffNode[j].parent==-1&&HuffNode[j].weight<m1) {m2=m1;x2=x1; m1=HuffNode[j].weight; x1=j;} else if(HuffNode[j].parent==-1&&HuffNode[j].weight<m2) {m2=HuffNode[j].weight; x2=j;} } HuffNode[x1].parent=n+i;HuffNode[x2].parent=n+i; HuffNode[n+i].weight=HuffNode[x1].weight+HuffNode[x2].weight; HuffNode[n+i].lchild=x1; HuffNode[n+i].rchild=x2;}}

void HuffmanCode(int n,Bowen a[]) {HNodeType HuffNode[MAXNODE]; HCodeType HuffCode[MAXLEAF],cd; int i,j,c,p,*q;char code[30],*m; tree=(HNodeType *)malloc(sizeof(HNodeType)); HuffmanTree(HuffNode,n,a); for(i=0;i<n;i++) {cd.start=n-1; c=i; p=HuffNode[c].parent; while(p!=-1) {if(HuffNode[p].lchild==c) cd.bit[cd.start]=0; else cd.bit[cd.start]=1; cd.start--; c=p; p=HuffNode[c].parent;} for(j=cd.start+1;j<n;j++) HuffCode[i].bit[j]=cd.bit[j]; HuffCode[i].start=cd.start;} for(i=0;i<n;i++) {HuffCode[i].letter=HuffNode[i].letter; printf("%c ",HuffCode[i].letter); for(j=HuffCode[i].start+1;j<n;j++) printf("%d",HuffCode[i].bit[j]); printf("\n");} printf("Now,input the code:\n"); for(i=0;i<30;i++) code[i]=NULL; scanf("%s",&code); m=code; j=2*n-2; while(*m!=NULL) {if(*m=='0') {c=i=HuffNode[c].lchild; c=HuffNode[c].lchild; if(c==-1) {printf("%c",HuffNode[i].letter);c=2*n-2;}} if(*m=='1') {c=i=HuffNode[c].rchild; c=HuffNode[c].rchild; if(c==-1) {printf("%c",HuffNode[i].letter);c=2*n-2;}} m++; } }

main() {Bowen data[30]; char s[100],*p; int i,count=0;clrscr(); printf("Input some letters:"); scanf("%s",&s);

for(i=0;i<30;i++) {data[i].s=NULL; data[i].num=0;} p=s; while(*p) {for(i=0;i<=count+1;i++) {if(data[i].s==NULL) {data[i].s=*p;data[i].num++;count++;break;} else if(data[i].s==*p) {data[i].num++;break;}} p++;} printf("\n"); printf("different letters:%d\n",count); for(i=0;i<count;i++) {printf("%c ",data[i].s); printf("weight:%d",data[i].num); printf("\n\n");} HuffmanCode(count,data); getch();}

[此贴子已经被作者于2005-4-24 12:17:12编辑过]

搜索更多相关主题的帖子: int huffman 译码 define typedef 
2005-04-23 22:43
牛虻
Rank: 1
等 级:新手上路
威 望:1
帖 子:472
专家分:0
注 册:2004-10-1
得分:0 
运行结果如下为什么只从第三位开始译起呢?

[此贴子已经被作者于2005-4-25 16:28:44编辑过]



0AyxAlK6.jpg (16.26 KB)

土冒
2005-04-24 23:18
牛虻
Rank: 1
等 级:新手上路
威 望:1
帖 子:472
专家分:0
注 册:2004-10-1
得分:0 
没人来哦,算了自己搞定

土冒
2005-04-26 08:28
牛虻
Rank: 1
等 级:新手上路
威 望:1
帖 子:472
专家分:0
注 册:2004-10-1
得分:0 
hoho,终于搞定了:程序代码发出来,赚点小费,^_^[UseMoney=100]
TkIKHmJS.rar (1.45 KB) 利用huffman树编码译码,大家帮我该一下错误




[此贴子已经被作者于2005-5-7 13:42:39编辑过]




MPgElxtP.jpg (15.13 KB)

土冒
2005-04-26 09:08
happyyu
Rank: 1
等 级:新手上路
帖 子:35
专家分:0
注 册:2005-4-10
得分:0 
能给点注解吗

我晕死,因为不会
2005-04-26 17:46
牛虻
Rank: 1
等 级:新手上路
威 望:1
帖 子:472
专家分:0
注 册:2004-10-1
得分:0 
以下是引用happyyu在2005-4-26 17:46:24的发言: 能给点注解吗
今天又开始忙另外一个程序了,注释等晚上我晚自修回来发到你信箱中 PS:谢谢购买

土冒
2005-04-26 18:25
ぁ小甜瓜ぁ
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2005-5-20
得分:0 
垃圾 自己会还发什么帖子
2005-05-20 07:39
sd1428354
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2005-5-30
得分:0 
他那是不会
     他是在打广告
 
2005-06-01 13:39
david2234
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2005-6-1
得分:0 
请问怎么才能看到你改好的程序啊?

2005-06-02 10:00
david2234
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2005-6-1
得分:0 
晕死了.clrscr();是什么东东啊?

骗子!

2005-06-02 15:30



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-16516-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.027789 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved