哈夫曼编译器c语言程序,哪位大牛有哈夫曼编码的C语言源程序,麻烦帮帮忙啦!...
匿名用户
1级
2014-11-15 回答
这是我当时做的作业题,就是数据结构书上的那道题。不知道是否和你说的是同样一道题,代码如下:
/*
HuffmanCodeBYTurboC2.0
Filename:Huffman.c
Author:dcyu.
Ver1.00
*/
#include
#include
#include
#include
#include
typedefstruct{
unsignedintweight;
unsignedintparent,lchild,rchild;
}HTNode,*HuffmanTree;
typedefchar**HuffmanCode;
typedefstruct{
unsignedints1;
unsignedints2;
}MinCode;
voidError(char*message);
HuffmanCodeHuffmanCoding(HuffmanTreeHT,HuffmanCodeHC,unsignedint*w,unsignedintn);
MinCodeSelect(HuffmanTreeHT,unsignedintn);
voidError(char*message)
{
fprintf(stderr,"Error:%s\n",message);
exit(1);
}
HuffmanCodeHuffmanCoding(HuffmanTreeHT,HuffmanCodeHC,unsignedint*w,unsignedintn)
{
unsignedinti,s1=0,s2=0;
HuffmanTreep;
char*cd;
unsignedintf,c,start,m;
MinCodemin;
if(n<=1)Error("Codetoosmall!");
m=2*n-1;
HT=(HuffmanTree)malloc((m+1)*sizeof(HTNode));
for(p=HT,i=0;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++)
{
min=Select(HT,i-1);
s1=min.s1;
s2=min.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;
}
printf("HTList:\n");
printf("Number\t\tweight\t\tparent\t\tlchild\t\trchild\n");
for(i=1;i<=m;i++)
printf("%d\t\t%d\t\t%d\t\t%d\t\t%d\n",
i,HT[i].weight,HT[i].parent,HT[i].lchild,HT[i].rchild);
HC=(HuffmanCode)malloc((n+1)*sizeof(char*));
cd=(char*)malloc(n*sizeof(char*));
cd[n-1]='\0';
for(i=1;i<=n;i++)
{
start=n-1;
for(c=i,f=HT[i].parent;f!=0;c=f,f=HT[f].parent)
if(HT[f].lchild==c)cd[--start]='0';
elsecd[--start]='1';
HC[i]=(char*)malloc((n-start)*sizeof(char*));
strcpy(HC[i],&cd[start]);
}
free(cd);
returnHC;
}
MinCodeSelect(HuffmanTreeHT,unsignedintn)
{
unsignedintmin,secmin;
unsignedinttemp;
unsignedinti,s1,s2,tempi;
MinCodecode;
s1=1;s2=1;
for(i=1;i<=n;i++)
if(HT[i].parent==0)
{
min=HT[i].weight;
s1=i;
break;
}
tempi=i++;
for(;i<=n;i++)
if(HT[i].weight
{
min=HT[i].weight;
s1=i;
}
for(i=tempi;i<=n;i++)
if(HT[i].parent==0&&i!=s1)
{
secmin=HT[i].weight;
s2=i;
break;
}
for(i=1;i<=n;i++)
if(HT[i].weight
{
secmin=HT[i].weight;
s2=i;
}
if(s1>s2)
{
temp=s1;
s1=s2;
s2=temp;
}
code.s1=s1;
code.s2=s2;
returncode;
}
voidmain()
{
HuffmanTreeHT=NULL;
HuffmanCodeHC=NULL;
unsignedint*w=NULL;
unsignedinti,n;
printf("Inputn:\n");
scanf("%d",&n);
w=(unsignedint*)malloc((n+1)*sizeof(unsignedint*));
w[0]=0;
printf("Enterweight:\n");
for(i=1;i<=n;i++)
{
printf("w[%d]=",i);
scanf("%d",&w[i]);
}
HC=HuffmanCoding(HT,HC,w,n);
printf("HuffmanCode:\n");
printf("Number\t\tWeight\t\tCode\n");
for(i=1;i<=n;i++)
printf("%d\t\t%d\t\t%s\n",i,w[i],HC[i]);
}
哈夫曼编译器c语言程序,哪位大牛有哈夫曼编码的C语言源程序,麻烦帮帮忙啦!...相关推荐
- 大一c语言程序设计项目教程课,C语言程序设计项目教程 教学课件 ppt 作者 王瑞红 C语言程序设计项目教程习题答案...
C语言程序设计项目教程 教学课件 ppt 作者 王瑞红 C语言程序设计项目教程习题答案 习题答案模块 1 C 语言基础知识1. 选择题(1)C 语言中运算对象必须是整型的运算符是 (B ).A. %= ...
- c语言程序做四则运算还要余数,大整数四则运算 高质量C语言程序.doc
大整数四则运算 高质量C语言程序 设计题目: 大整数的四则运算 1. 功能简介:编写出实现大整数之间相加,相减,相乘,相除的程序,并输出计算结构. 课程设计要求:采用模块化程序设计 源程序中应有足够的 ...
- 在c语言程序中将数据分为两种,2012年计算机二级C语言考点归纳汇总(一至四章)...
第1章程序设计基本概念考点归纳 1.1 C语言的特点 C语言是近年来非常流行的语言,很多人宁愿放弃已经熟悉的其他语言而改用C语言,其原因是C语言有优于其他语言的一系列特点.下面是C语言的主要特点: ( ...
- C 语言程序设计基础不好,想10天考国二C语言程序设计证书,可能吗?
实话告诉你:基本不可能!!! 除非你真的是一个学习力,逻辑能力,数学能力有很深的造诣的人! 这并不是在打击你考试的自信心. 为什么这么说呢?来看看计算机二级C语言程序考试(以下简称二级C),需要考什么 ...
- c语言 数组放空自己,DS1307 C语言程序 - ds1307怎么使用(ds1307引脚图及功能_c语言程序及典型应用电路)...
DS1307 C语言程序 //******************************************************************** //************** ...
- 一个c语言程序有两个源文件,建立多个源文件的C语言程序.pdf
建立多个源文件的C语言程序 建立多个源文件的C语言程序 输入.调试并执行一个C++程序 1. 建立多个源文件的C语言程序 一个C语言程序不一定只包含一个文件,它可以由多个文 件组成,比如它可以包含多 ...
- c语言程序能在android,android环境下编译并运行C语言程序
我的环境: Ubuntu12.04 Android2.2 这里的C语言程序指的是运行与android系统的Linux内核上程序,目前为止有两种方法:第一种是自动编译,第二种是手动编译.这两种方法适用于 ...
- c语言编码rna翻译,哪位大牛有哈夫曼编码的C语言源程序,麻烦帮帮忙啦!
满意答案 Otwjlobz 2014.01.05 采纳率:58% 等级:12 已帮助:9509人 这是我当时做的作业题,就是数据结构书上的那道题.不知道是否和你说的是同样一道题,代码如下: /* ...
- c语言位运算符的使用_C语言程序使用位运算符检查给定数字是否为回文
c语言位运算符的使用 Problem statement: Write a C program to check whether a number (binary representation) is ...
最新文章
- bootstrap轮播如何支持移动端滑动手势
- 安卓环境搭建 SDK emulator directory is missing
- python通过什么来体现逻辑关系_Python语言通过()来体现语句之间的逻辑关系。
- Optiver Career Fair
- 【Java基础】static初始化块
- 上海oracle办公地址_筑梦之星上海共享办公基地为什么受到市场追捧?
- python正则表达式处理txt_Python文本处理服务(re正则表达式例子)
- Redis核心配置_Redis高级数据类型使用
- vuex 在非组件中调用 mutations 方法
- 考研数据结构--排序汇总(自用)
- delphi BLE 后台
- html+车牌号选择,html中车牌号省份简称输入键盘的示例代码
- delphi 运算符
- 计算机处理器性能排名,2018电脑英特尔处理器排名(cpu性能天梯图)
- 沐阳从0到1零基础学习安卓逆向
- 【高自旋和低自旋配合物】
- android手机为什么越用越卡
- 汉诺塔c语言做法:汉诺塔(Hanoi)是必须用递归方法才能解决的经典问题。它来自于印度神话。上帝创造世界时作了三根金刚石柱子,在第一根柱子上从下往上按大小顺序摞着64片黄金圆盘
- yield方法的用法
- 国产磁力架的规格:1.5ml,2ml,15ml,50ml,0.2ml离心管,PCR单管,8连排管,12连排管,96孔PCR板磁力架
热门文章
- jQuery.proxy debug
- SAP Kyma的Lambda Function describe命令输出
- 某些equipment无法顺利download到CRM的原因
- How to debug Material delta download
- 一个SAP加拿大实习生在当地观察到的美景
- python的回收机制_Python垃圾回收机制【人生苦短,我用python】-阿里云开发者社区...
- 如何解决ipconfig、ping不是内部或外部命令
- ionic2 html 转义,ionic2 基于ngx-translate实现多语言切换,翻译
- java实现聊天室界面javafx_java 聊天室WeChat
- stm32 带通滤波器_带通滤波 - 基于STM32芯片和TFT-LCD的便携式心电图仪设计