51CTO技术论坛_中国领先的IT技术社区's Archiver

感冒不好玩 发表于 2006-8-29 01:45

霍夫曼树编码的实现

#include 7hT:u/DW1Y c!b1W
#include d`?x$@%En+M8`,[y
#include
^(QYL&{"M z #include :o6y(oKU
@!aWu\0y.r
typedef struct)BL XQ*u#E2{%g L
{
?N(k"pYg~ x[i!D ~     unsigned int Weight;
@ ^m] vJA     unsigned int Parent;
B5_Xd_C%V     unsigned int lChild;
ElC ^z r&sbh0K     unsigned int rChild;h$cp(fA-?
}HTNode,*HuffmanTree;
Z*m3l~Z;?J 2b7x0A&m.X9kp
typedef char **HuffmanCode;
a `J&vy
:e/sf&L(r5WS int LookFor(char *str,char letter,int count);7Yhj+b7B%@T p\
void OutputWeight(char *Data,int Length,w0E8E[(t6dMGJp2G
                  char **WhatLetter,y Xh7_\Bq6H-q
                  int **Weight,int *Count);
&? p6|9A5yt void HuffmanCoding(HuffmanTree *HT,7B ^ZP0Q0l)D ?+i
                   HuffmanCode *HC,
%l_DhQn*f+r| S T                    int *Weight,%C1jC XA/y:u8~Ag A:h
                   int Count);F4TEdw:g$\|
void Select(HuffmanTree HT,int Count,int *s1,int *s2);
!n,O"RB,T,a4H int main()kMR9B:z}8cJ
{
fB$`ou&K     HuffmanTree HT;
o:ceq6Y`tM+E$x     HuffmanCode HC;
e n F-E$C1c+vx;G%c     char Data[100];6RQ,a#t!w8`U+sm
    char *WhatLetter;}-Pt X]VE
    int *Weight;e,ha B'V
    int Count;(jE4H Fj.NC6@?A
    int i;v.P8jR(og
N%H+z hE
    printf("Please input the line:");
/bO5C1xH*jn     /* Example: aaaaaaaaaaaaaabcccccc*/|v;JC d qU
    scanf("%s",Data);
zQW;W$te])x&x     printf("\n");
#WB\&K~Z2M
Y YCb&JBlrK     OutputWeight(Data,strlen(Data),9fqwn?f4ws)dS
                 &WhatLetter,xV!c(Q\#_^,D
                 &Weight,
,T!h{ xI$F;E^                  &Count);jA1T1W%ZE)jVv#l`

9}z2f S,D     HuffmanCoding(&HT,&HC,Weight,Count);
vkVR'g} bof0d4[ Q9Qg
    printf(" Letter Weight Code\n");o0e7Hg Q&d?q
    for(i=0;itemp1&&HT[i].Weight<temp2)
Cx7P z:ZL-X'G                     {
N6O n[0J7[ i c s${3z                         temp2=HT[i].Weight;.@&\f]lk
                        (*s2)=i;+k7^e r/Q%EM
                    }]l1?ogw;Z0w3w/z
                }
!gbL9X1qgGQ0e#P y             }
Fr}$IIum4o af         }'G+J8MkZ2d7m
    } U%T{ `N6?Wp/f
}tD*F&f eaG

&E`b-tl int LookFor(char *str,char letter,int count)
(w MOB+n&d5Y {y3c7_S9SF!Tk
    int i;
9D]Ky~-\&M     for(i=0;i<count;i++)
e?!n%u K:jTF6L#R     {1M2BcE6M~#@)B
        if(str[i]==letter) return i;)x%~6eTcL
    }8^ N ]']Evk
    return -1;
fG0v6W)NI2P } IeT/DrRh~9pl+q
void OutputWeight(char *Data,int Length,J#{`^(}y?1[e!q
                  char **WhatLetter,
3Du0t%\p?c S                   int **Weight,int *Count)
,G6b}l1DM(HD {
_EMr1nI0c     int i;
*vb y(o3K(\e5Q _{     char* Letter=(char*)malloc(Length);
sSF`+Lu;Ah|     int* LetterCount=(int *)malloc(Length);
8@%X,?,r0^VB     int AllCount=0;7\1} xc$]
    int Index;(l`#s*J%m-xe bg0i
    int Sum=0;Z,}4H2dv:o`(qRv3v
    float Persent=0;:KN&^4AXmQ0@j'Y/v&b
g4hCEU-F;}
    for(i=0;i<Length;i++).Jdfl0o\X0Z
    {

tl986 发表于 2006-11-11 14:07

haode

页: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.