快速业务通道

??·ò?üê÷±à??μ?êμ??

作者 佚名技术 来源 程序设计 浏览 发布时间 2012-06-30

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
typedef struct
{
???? unsigned int Weight;
???? unsigned int Parent;
???? unsigned int lChild;
???? unsigned int rChild;
}HTNode,*HuffmanTree;
typedef char **HuffmanCode;
int LookFor(char *str,char letter,int count);
void OutputWeight(char *Data,int Length,
?????????????????? char **WhatLetter,
?????????????????? int **Weight,int *Count);
void HuffmanCoding(HuffmanTree *HT,
??????????????????  HuffmanCode *HC,
??????????????????  int *Weight,
??????????????????  int Count);
void Select(HuffmanTree HT,int Count,int *s1,int *s2);
int main()
{
???? HuffmanTree HT;
???? HuffmanCode HC;
???? char Data[100];
???? char *WhatLetter;
???? int *Weight;
???? int Count;
???? int i;
???? printf("Please input the line:");
???? /* Example: aaaaaaaaaaaaaabcccccc*/
???? scanf("%s",Data);
???? printf("\n");
???? OutputWeight(Data,strlen(Data),
????????????????  &WhatLetter,
????????????????  &Weight,
????????????????  &Count);
???? HuffmanCoding(&HT,&HC,Weight,Count);
???? printf(" Letter Weight Code\n");
???? for(i=0;i<Count;i++)
???? {
???????? printf(" %c ",WhatLetter[i]);
???????? printf("%d ",Weight[i]);
???????? printf("%s\n",HC[i+1]);
???? }
???? printf("\n");
???? getch();
???? return 0;
}
void HuffmanCoding(HuffmanTree *HT,
??????????????????  HuffmanCode *HC,
??????????????????  int *Weight,
??????????????????  int Count)
{
???? int i;
???? int s1,s2;
???? int TotalLength;
???? HuffmanTree p;
???? char* cd;
???? unsigned int c;
???? unsigned int f;
???? int start;
???? if(Count<=1) return;
???? TotalLength=Count*2-1;
???? (*HT)=(HuffmanTree)malloc((TotalLength+1)*sizeof(HTNode));
???? p=((*HT)++);
???? for(i=1;i<=Count;i++)
???? {
???????? (*HT)[i].Parent=0;
???????? (*HT)[i].rChild=0;
???????? (*HT)[i].lChild=0;
???????? (*HT)[i].Weight=(*Weight);
???????? Weight++;
???? }
???? for(i=Count+1;i<=TotalLength;i++)
???? {
???????? (*HT)[i].Weight=0;
???????? (*HT)[i].Parent=0;
???????? (*HT)[i].lChild=0;
???????? (*HT)[i].rChild=0;
???? }
???? /*///////////////////Create HuffmanTree////////////////*/
???? for(i=Count+1;i<=TotalLength;++i)
???? {
???????? Select((*HT),i-1,&s1,&s2);
??????  (*HT)[s1].Parent=i;
??????  (*HT)[s2].Parent=i;
??????  (*HT)[i].lChild=s1;
??????  (*HT)[i].rChild=s2;
??????  (*HT)[i].Weight=(*HT)[s1].Weight+(*HT)[s2].Weight;
???? }
???? /*///////////////////Output Huffman Code///////////////*/
???? (*HC)=(HuffmanCode)malloc((Count+1)*sizeof(char*));
???? cd=(char*)malloc(Count*sizeof(char));
???? cd[Count-1]=''\0'';
???? for(i=1;i<=Count;++i)
???? {
???????? start=Count-1;
???????? for(c=i,f=(*HT)[i].Parent;f!=0;c=f,f=(*HT)[f].Parent)
???????? {
???????????? if((*HT)[f].lChild==c)
???????????????? cd[--start]=''0'';
???????????? else
???????????????? cd[--start]=''1'';
???????????? (*HC)[i]=(char*)malloc((Count-start)*sizeof(char));
????????????

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号