【赫夫曼编译码器】

赫夫曼编译码器

一、设计内容与设计要求
1.设计内容:
1)问题描述
对输入的一串电文字符实现赫夫曼编码,再对赫夫曼编码生成的代码串进行译码,输出电文字符串。
2)基本要求
a.初始化,键盘输入字符集大小n,n个字符和n个权植,建立哈夫曼树。
b.编码,利用建好的huffman树生成huffman编码;
c.输出编码;
d.译码功能;
e.字符和频度如下:
字符 A B C D E F G H I J K L M
频度 186 64 13 22 32 103 21 15 47 57 1 2 32
字符 N O P Q R S T U V W X Y Z
频度 20 57 63 15 1 48 51 80 23 8 18 1 16

2.设计要求:
 课程设计报告规范
1)需求分析
a.程序的功能。
b.输入输出的要求。
2)概要设计
a. 程序由哪些模块组成以及模块之间的层次结构、各模块的调用关系;每个模块的功能。
b. 课题涉及的数据结构和数据库结构;即要存储什么数据,这些数据是什么样的结构,它们之间有什么关系等。
3)详细设计
a.采用C语言定义相关的数据类型。
b.写出各模块的类C码算法。
c.画出各函数的调用关系图、主要函数的流程图。
4)调试分析以及设计体会
a.测试数据:准备典型的测试数据和测试方案,包括正确的输入及输出结果和含有错误的输入及输出结果。
b.程序调试中遇到的问题以及解决问题的方法。
c.课程设计过程经验教训、心得体会。
5)使用说明
用户使用手册:说明如何使用你编写的程序,详细列出每一步的操作步骤。
6)书写格式
见附带说明。
7)附录
a.参考书目
b.源程序清单(带注释)
 考核方式
指导老师负责验收程序的运行结果,并结合学生的工作态度、实际动手能力、创新精神和设计报告等进行综合考评,并按优秀、良好、中等、及格和不及格五个等级给出每位同学的课程设计成绩。具体考核标准包含以下几个部分:
① 平时出勤 (占10%)
② 系统需求分析、功能设计、数据结构设计及程序总体结构合理与否(占10%)
③ 程序能否完整、准确地运行,个人能否独立、熟练地调试程序(占40%)
④ 设计报告(占30%)
注意:不得抄袭他人的报告(或给他人抄袭),一旦发现,成绩为零分。
⑤ 独立完成情况(占10%)。
 课程验收要求
① 运行所设计的系统。
② 回答有关问题。
③ 提交课程设计报告。
④ 提交电子文档(源程序、设计报告文档)。
⑤ 依内容的创新程度,完善程序情况及对程序讲解情况打分。
二、进度安排
第18周
星期一 星期二 星期三 星期四 星期五
上午
8:30~11:30 √ √ √ √
下午
14:30~17:30 √ √ √ √
附:
课程设计报告装订顺序:封面、任务书、目录、正文、评分、附件(A4大小的图纸及程序清单)。
正文的格式:一级标题用3号黑体,二级标题用四号宋体加粗,正文用小四号宋体;行距为22。
正文的内容:一、课题的主要功能;二、课题的功能模块的划分(要求画出模块图);三、主要功能的实现(至少要有一个主要模块的流程图);四、程序调试;五、总结;六、附件(所有程序的原代码,要求对程序写出必要的注释)。
正文总字数要求在5000字以上(不含程序原代码)。

一、课题的主要功能;
1)需求分析
a.可以对输入的字符根据哈夫曼树编码为0,1的数字。
b.需要输入字符的个数,字符及相应的权值。
2)概要设计
a.程序由5个模块组成:1,构造哈夫曼树;2构造哈夫曼编码;3输出哈夫曼编码并保存在文件hafu_code.txt中;4读取hafu_code.txt中的编码,对其译码;
5主函数,做了一个简单的界面,调用1,2,3,4部分的函数。
b定义了两个结构体,存储的是字符型数据char型和int型。
3)使用说明
用户使用手册:根据界面显示的提示,逐步操作即可达到用户的目的。
二、课题的功能模块的划分(要求画出模块图);
各函数的调用关系图、主要函数的流程图。

三、程序调试;
1:界面。

2:功能1的实现输入字符及其权值

3:实现功能2,3的界面

4:实现4功能的界面

四、总结;

通过while(1){};实现了switch选择语句的衔接,用户可以不断的输入控制命令,相当的方便。
首先分析你的需求,然后做出相应的功能的程序,这样才是最快的做出程序。写代码的时候要顺着思路一气呵成,最麻烦的问题是指针越界,很难找到并改正,如本程序中的while(hp>n)是错误的,很难发现,应该为hp>n-1;因此我们写代码,要有耐心,细心和信心。

 五,附件(所有程序的原代码,要求对程序写出必要的注释)。

```cpp

```cpp
 #include<stdio.h>
#include<string>
#define N 50		//叶子节点数
#define M 2*N-1		//树中节点总数
typedef struct
{
   char data[5];	//节点值
int weight;		//权重
int parent;		//双亲节点
int lchild;		//左孩子节点
int rchild;		//右孩子节点
}HTNode;
typedef struct
{
   char cd[N];		//存放哈夫曼码
int start;
}HCode;
void CreateHT(HTNode ht[],int n)
{
   int i,k,lnode,rnode;
int min1,min2;
for(i=0;i<2*n-1;i++)			//所有节点的相关域置初值-1
ht[i].parent=ht[i].lchild
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值