




已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验项目:哈夫曼编码 1 问题描述:利用哈夫曼编码进行通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本。但是,这要求在发送端通过一个编码系统对待传数据预先编码,在接收端将传来的数据进行译码(解码)。对于双工信道(即可以双向传输信息的信道),每端都需要一个完整的编/译码系统。试为这样的信息收发站设计一个哈夫曼编/译码系统。2一个完整的系统应具有以下功能:1)初始化(Initialzation)。读入字符及每个字符的权值,建立哈夫曼树HuffTree;2)编码(EnCoding)。用已建好的哈夫曼树,对输入的文本进行编码形成报文,将报文显示出来;3)译码(Decoding)。利用已建好的哈夫曼树,对输入的代码进行解码形成原文,并将结果显示;4)输出(Output): 输出出现的字符以及各字符出现的频度(或概率);输出各个字符的编码,输出代码译出的原文;3.实验目的:理解哈夫曼树的特征及其应用;在对哈夫曼树进行理解的基础上,构造哈夫曼树,并用构造的哈夫曼树进行编码和译码;通过该实验,使学生对数据结构的应用有更深层次的理解。 4.实验条件:学院提供公共机房,1台/学生微型计算机。5.实验步骤(含实验代码)第1次:完成程序的主框架设计,进行调试,验证其正确性;第2次:详细设计,进行调试,验证其正确性;第3次:进行整体调试,运行程序,对运行结果进行分析,完成实验报告。#include#include#include#define MAXWORD 100typedef struct unsigned int weight;char data; unsigned int parent,llchild,rrchild; HTNode,*HuffmanTree; /动态分配数组存储哈夫曼树 typedef char * *HuffmanCode; / /动态分配数组存储哈夫曼编码表typedef struct tnode char ch; /字符 int count; /出现次数 struct tnode *lchild,*rchild;BTree,*BT;int a=0,b=0;int sMAXWORD;char strMAXWORD;void main() int n;int i=0; HuffmanTree HT;HuffmanCode HC; void HuffmanCoding(HuffmanTree &HT,HuffmanCode &HC,int n); void DispHCode(HuffmanTree HT,HuffmanCode HC,int n); void Creatree(BT &p,char c); /Creatree()和InOrderTraverse() void InOrderTraverse(BT p); /利用二叉树统计出现的字符及个数 void TTranChar(HuffmanTree HT,HuffmanCode HC,int n); void Tran(HuffmanTree HT,int n); printf(请输入要用几种字符:); scanf(%d,&n); BT root=NULL; printf(n); printf(请输入字符串:n); scanf(%s,str); while(stri!=0) Creatree(root,stri);i+; printf(字符及出现次数:n); InOrderTraverse(root); printf(n); HuffmanCoding(HT,HC,n); DispHCode(HT,HC,n); Tran(HT,n);TTranChar(HT,HC,n);void HuffmanCoding(HuffmanTree &HT,HuffmanCode &HC,int n) / w放n个权值,构造赫夫曼树HT,n个字符编码HC void select(HuffmanTree t,int i,int &s1,int &s2); int m,i,s1,s2,start;char *cd;unsigned c,f; HuffmanTree p; if(n=1) return; m=2*n-1; HT=(HuffmanTree)malloc(m+1)*sizeof(HTNode); for(p=HT+1,i=1;i=n;+i,+p) (*p).parent=0; (*p).llchild=0; (*p).rrchild=0; for(p=HT+1,i=0;in;+i,+p) (*p).data=stri; (*p).weight=si;for(;i=m;+i,+p) (*p).parent=0; for(i=n+1;i=m;+i) / 建赫夫曼树 / 在HT1i-1中选择parent为0且weight最小的两个,分别s1、s2 select(HT,i-1,s1,s2); HTs1.parent=HTs2.parent=i; HTi.llchild=s1; HTi.rrchild=s2; HTi.weight=HTs1.weight+HTs2.weight; HC=(HuffmanCode)malloc(n+1)*sizeof(char*);/(0不用) cd=(char*)malloc(n*sizeof(char); cdn-1=0; / 编码结束符 for(i=1;is2) j=s1; s1=s2; s2=j; int min(HuffmanTree t,int i) / 函数void select()调用 int j,flag; unsigned int k=100; / 取k比任何权值都大 for(j=1;j=i;j+) if(tj.weightch=c;p-count=1;p-lchild=p-rchild=NULL;else if(c=p-ch) p-count+;else if(cch) Creatree(p-lchild,c); else Creatree(p-rchild,c);void InOrderTraverse(BT p) /中序遍历if(p!=NULL) InOrderTraverse(p-lchild);printf(%c的个数为:%dn,p-ch,p-count); sb=p-count;b+;stra=p-ch;a+; InOrderTraverse(p-rchild);void DispHCode(HuffmanTree HT,HuffmanCode HC,int n) /显示0、1编码int i; printf(输出哈夫曼编码:n); for(i=1;i=n;i+) printf(%c:t,HTi.data); puts(HCi);void Tran(HuffmanTree HT,int n) /将含0、1的编码翻译成字符 int i,j=0; char ccMAXWORD; i=2*n-1; printf(输入发送的(0、1)编码(以#为结束标志):); scanf(%s,cc); printf(译码后的字符为); while(ccj!=#) if(ccj=0) i=HTi.llchild; else i=HTi.rrchild; if(HTi.llchild=0) printf(%c,HTi.data);i=2*n-1; j+; printf(n); void TTranChar(HuffmanTree HT,HuffmanCode HC,int n) char ss50;int i,j; /将字符串翻译成0、1代码 printf(输入字符串:);scanf(%s,ss);i=0;while(ssi!=0) j=1; while(HTj.data!=ssi)&(j=n) j+; printf(%s,HCj); i+; printf(n);6.实验结果与总结:总结:在实现哈夫曼树编码的过程中,首先构建哈夫曼树,并用动态分配数组存储,也用动态分配数组存储哈夫曼编码表。程序书上虽然有一部分可借鉴的代码,自己只需要编写几个函数即可,但在编写程序时也遇到一些问题,开始统计字符串中出现的各种字符及其次数时,将字母存放数组中,但是考虑到字母出现的不同,完全初始化再统计其出现的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 钻井操作考试试题大全及答案
- 中班健康教案:鞋带蝴蝶结
- 物业秩序安全培训
- 文科理论培训讲解
- 2025年 车险理赔考试卷库五附答案
- 肿瘤药学服务案例实践路径
- 应急预案教育培训
- 培训班月总结报告
- 重症皮肤护理常规
- 中医护理健康宣教流程
- RB/T 228-2023食品微生物定量检测的测量不确定度评估指南
- 2023年北京海淀社区工作者考试真题
- 2024年国开电大 高级财务会计 形考任务4答案
- 幼儿园中班数学活动课件:有趣的排序
- 2024年广东省惠州一中学英语七下期末达标检测试题含答案
- 2023-2024学年广西壮族自治区桂林市高二下学期期末质量检测数学试卷(含答案)
- 化妆品行业联合研发合同样本
- 畜禽生产概论-形考作业4-国开(HB)-参考资料
- 工业园区智慧能源管理平台建设方案 产业园区智慧能源管理平台建设方案
- 化工生产仿真综合实训报告
- 中华民族共同体概论课件专家版8第八讲 共奉中国与中华民族聚力发展
评论
0/150
提交评论