《算法与数据结构》实验指导书(12)

发布时间:2021-06-07

《算法与数据结构》实验指导书

PrintHuffmanCode(HC,w,n); //显示哈夫曼编码 printf("哈夫曼树构造完毕,还要继续吗?(Y/N)"); scanf(" %c",&j); } }

void CreateHuffmanTree(HuffmanTree &HT,unsigned int *w,int n) {//w存放n个结点的权值,将构造一棵哈夫曼树HT int i,m; int s1,s2;

HuffmanTree p; if(n<=1) return;

m=2*n-1; //n个叶子结点的哈夫曼树,有2*n-1个结点

HT=(HuffmanTree)malloc((m+1)*sizeof(HTNode)); //开辟2*n各结点空间,0号单元不用 for(p=HT+1,i=1;i<=n;++i,++p,++w) //进行初始化 {p->weight=*w; p->parent=0; p->lchild=0; p->rchild=0; }

for(;i<=m;++i,++p) {p->weight=0; p->parent=0; p->lchild=0; p->rchild=0; }

for(i=n+1;i<=m;++i) //建哈夫曼树 {Select(HT,i-1,s1,s2);

//从HT[1...i-1]中选择parent为0且weight最小的两个结点,其序号分别为s1和s2 HT[s1].parent=i; HT[s2].parent=i; //修改s1和s2结点的父指针parent HT[i].lchild=s1; HT[i].rchild=s2; //修改i结点的左右孩子指针 HT[i].weight=HT[s1].weight+HT[s2].weight; //修改权值 } }

void HuffmanCoding(HuffmanTree HT,HuffmanCode &HC,int n)

{//将有n个叶子结点的哈夫曼树HT进行编码, 所编的码存放在HC中 //方法是从叶子到根逆向求每个叶子结点的哈夫曼编码 int i,c,f,start; char *cd;

HC=(HuffmanCode)malloc((n+1)*sizeof(char *)); //分配n个编码的头指针向量 cd=(char *)malloc(n*sizeof(char)); //开辟一个求编码的工作空间 cd[n-1]='\0'; //编码结束符

for(i=1;i<=n;++i) //逐个地求哈夫曼编码 {start=n-1; //编码结束位置

《算法与数据结构》实验指导书(12).doc 将本文的Word文档下载到电脑

精彩图片

热门精选

大家正在看

× 游客快捷下载通道(下载后可以自由复制和排版)

限时特价:7 元/份 原价:20元

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219