数据结构课程设计

发布 2022-10-01 21:42:28 阅读 4405

课程设计书786645655

学院计算机学院。

专业信息与计算科学

5667789907yuiiiii2班。

题目利用树进行哈弗曼编码

教师贺全兵。

学生。摘要:哈夫曼树─即最优二叉树,带权路径长度最小的二叉树,经常应用于数据压缩。

在计算机信息处理中,哈弗曼编码在信息论中应用举例“哈夫曼编码”是一种一致性编码法(又称“熵编码法”),用于数据的无损耗压缩。这一术语是指使用一张特殊的编码表将源字符(例如某文件中的一个符号)进行编码。这张编码表的特殊之处在于,它是根据每一个源字符出现的估算概率而建立起来的(出现概率高的字符使用较短的编码,反之出现概率低的则使用较长的编码,这便使编码之后的字符串的平均期望长度降低,从而达到无损压缩数据的目的)。

利用哈弗曼编码进行通信可以大大提高信道的利用率,缩短信息传输时间,降低传输成本,但是,这要求发送端通过一个编码系统对待传数据预先编码,在接收端将传来的数据进行译码,对于双工通道(即可以双向传输的信道),每端都要有一个完整的编码译码系统,因此可以设计一个编码译码系统解决这样一个问题。

关键字:树、哈弗曼编码、编码译码系统。

分工:程序设计及编写:王瑶、傅登林。

程序调试及实现:王瑶、傅登林。

时间复杂度分析:王瑶、傅登林。

实验报告书写:王瑶、傅登林。

目录。第一章课程设计的内容及要求 1

第二章功能说明 2

第三章详细设计 3

3.1 创建哈弗曼树 3

3.2 编码 4

3.3 译码 4

第四章程序实现 5

4.1 源码分析 5

4.2 调试结果 8

4.3 调试分析 11

第五章课程设计心得 12

第六章参考文献 13

第一章课程设计的内容及要求。

利用哈弗曼编码进行通信可以大大提高信道的利用率,缩短信息传输时间,降低传输成本,但是,这要求发送端通过一个编码系统对待传数据预先编码,在接收端将传来的数据进行译码,对于双工通道(即可以双向传输的信道),每端都要有一个完整的编码译码系统,因此可以设计一个编码译码系统解决这样一个问题。

第二章功能说明。

系统分为三个模块:

(1)、编码:读取字符——建立哈夫曼树——对文本进行哈弗曼编码并输出编码

2)、译码:提示输入需要译码的字符——利用建好的哈夫曼树进行译码

3)、退出:退出系统,程序运行结束。

第三章详细设计。

3.1创建哈弗曼树。

3.2编码。

3.3译码。

第4章程序实现。

4.1 源码分析。

#include<>

#include<>

#include<>

#include<>

#include<>

#include<>

#include<>

#defineup50

#definedown90

#defineleft60

#defineright55

#defineenter40

#definen50

#definem2*n-1

#definesize6

typedefstruct//定义结构体存放哈夫曼码。

chardata;

floatweight;

intparent,lchild,rchild;

htnode;

intchoice;

intkey()

unionregslf;

int86(0x16,&lf,&lf);

structimformation

charch;

floatfre;

imfor[size]=,

给相关字符设置初值。

typedefstruct

charcd[n];

intstart;

hcode;

voidcreateht(htnodeht,intn)

inti,k,lnode,rnode;

floatmin1,min2;for(i=0;i<2*n-1;i++)

ht[i].parent=ht[i].lchild=ht[i].rchild=-1;

for(i=n;i<2*n-1;i++)构造哈夫曼树。

min1=min2=1.1;//使用两个最小权值的结点为左孩子和右孩子。

lnode=rnode=-1;

for(k=0;k<=i-1;k++)

if(ht[k].parent==-1)

if(ht[k].weight{

min2=min1;rnode=lnode;

min1=ht[k].weight;lnode=k;

elseif(ht[k].weight{

min2=ht[k].weight;rnode=k;

ht[lnode].parent=i;ht[rnode].parent=i;

ht[i].weight=ht[lnode].weight+ht[rnode].weight;

ht[i].lchild=lnode;ht[i].rchild=rnode;

getchar();

voidcreatehcode(htnodeht,hcodehcd,intn)

inti,f,j,c;

hcodehc;

for(i=0;i{

c=i;f=ht[i].parent;

while(f!=-1)//回溯到树根结点。

if(ht[f].lchild==c)//遍历做孩子结点。

else//遍历孩子的右结点。

c=f;f=ht[f].parent;

hcd[i]=hc;

voidhuffmancode(htnodeht,hcodehcd,intn)

charb[m],*p;

inti,j,m,k;

printf("pleaseinputthewords:");

scanf("%s",b);

m=strlen(b);

for(i=0,p=b;i{

for(j=0;jif(ht[j].data==*p)

for(k=hcd[j].start;k<=n;k++)

printf("%c",hcd[j].cd[k]);

数据结构课程设计

课程设计说明书 题目哈夫曼编码问题的设计和实现。课程名称数据结构课程设计。院 系 部 中心。专业。班级。学生姓名。学号。设计地点。指导教师。设计起止时间 2008 年6月 2日至 2008 年 6月 6 日。目录。1 问题描述 2 1.1 题目内容 2 1.2 基本要求 2 1.3 测试数据 2 2...

数据结构课程设计

数据结构 课程设计。实验报告。学院 信息工程学院。班级 姓名 学号 指导老师 题目2 一元多项式的计算。1 实验目的。1 掌握链表的灵活运用 2 学习链表初始化和建立一个新的链表 3 知道怎样去实现链表删除结点操作与插入结点 4 理解链表的基本操作 包括数据域数据的相加 并能灵活运用。2 实验内容。...

数据结构课程设计

班级 信计 1102 姓名 李娜娜。学号 1108060209 设计日期 2013.07.15 西安科技大学计算机学院 1.实验题目 编制一个演绎扫雷游戏的程序。2.问题描述。做一个n x m的扫雷游戏,每个方格包含两种状态 关闭 closed 和打开 opened 初始化时每个方格都是关闭的,一个...