为解决广大童鞋的数据结构实验问题写下本文:(只做参考哦。)

实验要求:

Huffman编码(二叉树)

l实验目的:熟练掌握二叉树应用(Huffman编码)的基本算法实现。

l实现功能:对输入的一串电文字符实现Huffman编码,再对Huffman编码生成的代码串进行译码,输出电文字符串。实现功能如下:

¨Huffman树的建立

¨Huffman编码的生成

¨编码文件的译码

l实验机时:4

l设计思路:

数据结构:

#define n 100

//叶子结点数

#define m 2*n-1

// Huffman树中结点总数

typedef struct {

int weight;

//权值

int lchild , rchild , parent; //左右孩子及双亲指针

}HTNode; //树中结点类型

typedef HTNode HuffmanTree[m+1];

//0号单元不用

主要实现函数:

n统计字符串中字符的种类以及各类字符的个数的函数

n构造Huffman树的函数

nHuffman编码的函数

n建立正文的编码文件的函数

n代码文件的译码函数

n主函数

代码如下:

#include

#include

#include

#define

n 5 //叶子结点数

#define

m 2*n-1 // Huffman树中结点总数

typedef

struct

{

int weight; //权值

int lchild ,

rchild , parent;

//左右孩子及双亲指针

}

HTNode;  //树中结点类型

HTNode

HuffmanTree[m+1]; //0号单元不用

char

huffman[n+1][m+1];

void

Select(int &s1, int &s2,int j)

{

int i;

int tmp1 = 10000, tmp2 =

10000;

for(i = 1; i

<= j; i++)

{

if(HuffmanTree[i].parent == 0)

{

if(HuffmanTree[i].weight < tmp1)

{

tmp1 =

HuffmanTree[i].weight;

s1 = i;

}

else

if(HuffmanTree[i].weight < tmp2)

{

tmp2 =

HuffmanTree[i].weight;

s2= i;

}

}

}

}

void

HuffmanCoding(int weight[],int letter[])

{

int i;

if(n<1)

return;

for(i=1; i<=n;

i++)

{

HuffmanTree[i].weight=weight[i-1];

HuffmanTree[i].lchild=0;

HuffmanTree[i].rchild=0;

HuffmanTree[i].parent=0;

}

for(i=7; i<=m;

i++)

{

HuffmanTree[i].weight=0;

HuffmanTree[i].lchild=0;

HuffmanTree[i].rchild=0;

HuffmanTree[i].parent=0;

}

//Huffman树的建立

for(i=n+1;

i<=m; i++)

{

int s1,s2;

Select(s1,s2,i-1);

HuffmanTree[s1].parent=i;

HuffmanTree[s2].parent=i;

HuffmanTree[i].lchild=s1;

HuffmanTree[i].rchild=s2;

HuffmanTree[i].weight=HuffmanTree[s1].weight+HuffmanTree[s2].weight;

}

char cd[n+1];

int start,c,f;

cd[n-1]= '\0';

for(i=1;

i

{

start=n-1;

for(c=i,f=HuffmanTree[i].parent; f!=0;

c=f,f=HuffmanTree[f].parent)

{

if(HuffmanTree[f].lchild==c)

cd[--start]='0';

else

cd[--start]='1';

}

strcpy(huffman[i],&cd[start]);

}

char x='a';

for(i=1; i<=n;

i++)

{

printf("字符:%c

Huffman编码:%s\n",x++,huffman[i]);

}

}

int

main()

{

int weight[n]=

{1,3,2,4,5};

int letter[n]=

{'a','b','c','d','e'};

HuffmanCoding(weight,letter);

return 0;

}

weight值什么的自己改吧。最好看明白自己写哦。。。。

huffman图像编码C语言,Huffman编码 数据结构 C语言相关推荐

  1. c语言必背数据结构_C语言实现常用数据结构:简要一览(第1篇

    线性表 最简单的一种数据结构,具有相同类型的数据元素组成的序列.顺序表.链表是其两种简单实现. 备注:数组也可以算一种简单的线性表. 链表可以分为:带头结点的简单链表 不带头结点的简单链表静态链表 循 ...

  2. 23V3有这种C语言表达式吗,数据结构(C语言版第2版_李云清)习题答案2012-12.doc

    数据结构(C语言版第2版_李云清)习题答案2012-12.doc 第 1 章 绪论 1.1 什么是数据结构? [答]:数据结构是指按一定的逻辑结构组成的一批数据,使用某种存储结构将这批数据存储 于计算 ...

  3. 数据结构C语言版字符串,数据结构c语言版

    数据结构c语言版是一款非常使用的数据结构课程的编写和教材:它也可将软件作为学习数据结构.算法C程序设计的参数教材,只需要用户学习该软件之后,就算遇到在繁杂的代码也可以清晰的写出来,本书的钱半部分主要介 ...

  4. 店铺咨询系统c语言,交通咨询系统数据结构c语言word文档良心出品

    <交通咨询系统数据结构c语言word文档良心出品>由会员分享,可在线阅读,更多相关<交通咨询系统数据结构c语言word文档良心出品(22页珍藏版)>请在人人文库网上搜索. 1. ...

  5. c 语言差错编码实验结果,C语言程序设计实验报告(四).doc11111111111111111.doc

    C语言程序设计实验报告(四).doc11111111111111111 C语言程序设计实验报告 姓 名吴文重学 号52系 别数学系班级2班主讲教师徐时芳指导教师徐时芳实验日期2011-11-8专业10 ...

  6. C语言存储编码输出,C语言怎么输出一个菱形

    C语言怎么输出一个菱形 C语言是计算机的高级语言,在IT行业被众多的人们是使用,由于IT行业的热门,使用以及学习C语言的人越来越多,掌握一些C语言基本的语言是非常重要的,只有基础知识扎实了,才能在C语 ...

  7. c语言三元组作用,数据结构 C语言 三元组的具体实现

    #include #include //定义常量 方便操作 //可能也没多方便 #define Time 1000 typedef int *Triplet; typedef int Status; ...

  8. c语言程序设计和数据结构,C语言程序设计与数据结构实践 闵光太主编.pdf

    第 一 章 概 论 语 言 是 近 年 来 在 国 内 外 流 行 的 高 级 程 序 设 计 语 言 , 它 既 具 有 高 级 语 言 的 特 点 , 又 具 备 低 级 语 言 的 特 点 , ...

  9. 数据结构c语言版总结,数据结构:C语言常见算法总结

    [1]求最大值与最小值. #include void main() { int num[5],max,min,i; printf(\"请输入5个数字:\") for(i=0;i&l ...

最新文章

  1. 无csrf防护的html页面,Springs CSRF保护仅* HTML登录页面
  2. 埋点是什么意思_掌握数据生命周期:初识数据埋点
  3. 多维数组的行优先和列优先, 数据描述语言
  4. 001-Ansible-参考http://www.ansible.com.cn/docs/playbooks_intro.html#about-playbooks
  5. android 调用百度sdk后运行不了,解决android程序中oncreate方法中调用百度地图MKSearchListener接口不执行的问题...
  6. Python+OpenGL基本图元绘制综合演示
  7. win102004优化_windows 10新版2004和1909该如何选择
  8. python.day.04——常用数据类型(一):strList
  9. 微信小程序:好看的表格样式
  10. Android日历控件方法,Android日历控件的实现方法
  11. 计算机应用基础在线题库,计算机应用基础练习试题库完整.doc
  12. SSD(Single Shot MultiBox Detector)原理详解
  13. 湖北省2021年高考成绩查询日期,湖北2021年高考查分及志愿填报时间公布!
  14. [操作系统]进程管理 进程同步、死锁相关、处理机调度
  15. 顺利通过了CCIE的考试
  16. 树链剖分——杨子曰算法
  17. C语言程序设计 密码开锁 指针的介绍
  18. 服务器所属文件变成nobody,NFS使用autofs挂接后文件属主显示为nobody
  19. learnpythonthehardway.org_Python学习笔记LearnPythonHardWay
  20. 骚年~来一起撸一撸,这些面试必问的知识

热门文章

  1. java毕业生设计校园社团管理平台计算机源码+系统+mysql+调试部署+lw
  2. rtorrent 使用的方法
  3. js交换两个变量的值
  4. 科研论文如何规范地“一稿多投”?
  5. Photoshop的图像修复与渐变填充
  6. 字符串函数讲解(C语言笔记,建议收藏!!!)
  7. 在微信小游戏中使用three.js显示3D图形
  8. STM32F429 VCAP12电容错误死机
  9. 【JavaScript】硬件通讯数据校验 BCC异或校验生成 按位取反 十六进制数据格式化
  10. oracle 中clob,oracle中clob转换