c语言编码rna翻译,哪位大牛有哈夫曼编码的C语言源程序,麻烦帮帮忙啦!
满意答案
Otwjlobz
2014.01.05
采纳率:58% 等级:12
已帮助:9509人
这是我当时做的作业题,就是数据结构书上的那道题。不知道是否和你说的是同样一道题,代码如下:
/*
HuffmanCode BY Turbo C 2.0
Filename: Huffman.c
Author: dcyu.
Ver 1.00
*/
#include
#include
#include
#include
#include
typedef struct {
unsigned int weight;
unsigned int parent,lchild,rchild;
} HTNode,*HuffmanTree;
typedef char **HuffmanCode;
typedef struct {
unsigned int s1;
unsigned int s2;
} MinCode;
void Error(char *message);
HuffmanCode HuffmanCoding(HuffmanTree HT,HuffmanCode HC,unsigned int *w,unsigned int n);
MinCode Select(HuffmanTree HT,unsigned int n);
void Error(char *message)
{
fprintf(stderr,"Error:%s\n",message);
exit(1);
}
HuffmanCode HuffmanCoding(HuffmanTree HT,HuffmanCode HC,unsigned int *w,unsigned int n)
{
unsigned int i,s1=0,s2=0;
HuffmanTree p;
char *cd;
unsigned int f,c,start,m;
MinCode min;
if(n<=1) Error("Code too small!");
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("HT List:\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';
else cd[--start]='1';
HC[i]=(char *)malloc((n-start)*sizeof(char *));
strcpy(HC[i],&cd[start]);
}
free(cd);
return HC;
}
MinCode Select(HuffmanTree HT,unsigned int n)
{
unsigned int min,secmin;
unsigned int temp;
unsigned int i,s1,s2,tempi;
MinCode code;
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;
return code;
}
void main()
{
HuffmanTree HT=NULL;
HuffmanCode HC=NULL;
unsigned int *w=NULL;
unsigned int i,n;
printf("Input n:\n");
scanf("%d",&n);
w=(unsigned int *)malloc((n+1)*sizeof(unsigned int *));
w[0]=0;
printf("Enter weight:\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]);
}
00分享举报
c语言编码rna翻译,哪位大牛有哈夫曼编码的C语言源程序,麻烦帮帮忙啦!相关推荐
- 哈夫曼编译器c语言程序,哪位大牛有哈夫曼编码的C语言源程序,麻烦帮帮忙啦!...
匿名用户 1级 2014-11-15 回答 这是我当时做的作业题,就是数据结构书上的那道题.不知道是否和你说的是同样一道题,代码如下: /* HuffmanCodeBYTurboC2.0 Filena ...
- 哈夫曼编码译码 C语言,【求助】严蔚敏版数据结构 哈夫曼编码译码
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include #include typedef char* HuffmanCode;/*动态分配数组,存储哈夫曼编码*/ typed ...
- python哈夫曼编码注意_Python 算法(2) 哈夫曼编码 Huffman Encoding
这个问题原始是用来实现一个可变长度的编码问题,但可以总结成这样一个问题,假设我们有很多的叶子节点,每个节点都有一个权值w(可以是任何有意义的数值,比如它出现的概率),我们要用这些叶子节点构造一棵树,那 ...
- 哈夫曼编码c语言论文,哈夫曼编码的实现及应用论文.doc
哈夫曼编码的实现及应用论文 毕 业 设 计(论文) 题目 哈夫曼编码的实现 及应用 二级学院 数学与统计学院 专 业 信息与计算科学 班 级 学生姓名 张泽欣 学号 指导教师 职称 时 间 目录 摘要 ...
- 南邮哈夫曼编码c语言代码_漫画:“哈夫曼编码” 是什么鬼?
在上一期,我们介绍了一种特殊的数据结构 "哈夫曼树",也被称为最优二叉树.没看过的小伙伴可以点击下方链接: 漫画:什么是 "哈夫曼树" ? 那么,这种数据结构 ...
- 贪心算法哈夫曼编码c语言,贪心算法详解:哈夫曼编码
理解贪心算法 贪心算法是一种算法思想,并不是一个具体的算法,因此我们用两个例子来理解什么样的问题适合用贪心算法解决. 例一 现在有一个能装 100g 物品的背包,和一些可拆分的物品(见表格),怎么装才 ...
- 信息论霍夫曼编码c语言,Huffman 信息论与编码 - 下载 - 搜珍网
霍夫曼编码/Shiyan4/Shiyan.sln 霍夫曼编码/Shiyan4/Shiyan.suo 霍夫曼编码/Shiyan4/Shiyan.v11.suo 霍夫曼编码/Shiyan4/Shiyan4 ...
- 霍夫曼树和霍夫曼编码以及霍夫曼编码的应用
文章目录 霍夫曼树介绍 1.1霍夫曼树的定义 1.2霍夫曼树的几个概念 1.3构建霍夫曼树的过程 1.4代码实现霍夫曼树 霍夫曼编码介绍 什么是霍夫曼编码 通信领域的应用 字符串压缩 1.构造霍夫曼树 ...
- 哈夫曼java_哈夫曼树和哈夫曼编码介绍以及Java实现案例
1.哈夫曼树 1.1哈夫曼树简介 哈夫曼树:给定N个权值作为N个叶子节点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree).哈夫曼树 ...
最新文章
- (六)java多线程之ReadWriteLock
- .offset().top是什么意思?
- 爬虫python下载-python 下载 爬虫
- 图卷积网络是什么?(行为识别)
- js进阶 9-11 select选项框如何动态添加和删除元素
- linux下离线安装gcc
- 防删库实用指南 | 只需一步,快速召回被误删的表
- 使用Web API和React创建用户注册和登录
- Javascript的一个生产PDF的库: unicode和中文问题的解决
- Spring Boot和Dubbo整合
- 批量导出Excel图表为图片
- 简易散列表实现电话号码查询系统
- MySQL 数据库备份与还原
- 今日睡眠质量记录70分
- 金士顿内存条真假测试软件,金士顿内存条真伪怎么看?金士顿内存条判别真伪的几种方法...
- 实施质量保证和控制质量的区别
- matlab模糊优选理论模型,模糊优选神经网络BP模型
- 把字符串转换大写php,php把字符串转换为大写的函数strtoupper()
- 转:Processing 编程学习指南
- 小学语文三年级阅读理解专项练习附答案~寻隐者不遇
热门文章
- html大风效果,使用jquery.windy制作风吹卡片的效果 | jQuery教程
- Ubuntu16.04下,遇到Unmet dependencies. Try 'apt-get -f install' with no packages的解决办法
- UIKit Dynamics入门
- GDI+ 制作透明图片
- 卷积、线性时不变系统、因果系统
- 计算机考试显示延时一分钟,电脑显示延迟解决方法教程
- 使用sunshine+moonlight 实现电脑串流到电视(Android 设备)低延迟投屏
- matlab 心形曲线
- 纯前端JS导出Word包含图片
- osi模型:七层模型介绍_什么是OSI(开放系统互连)模型?