已阅读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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 商务英语函电(第二版)课件 3.1.3如何辨别询盘和客户身份
- 廊坊企业管理面试实战与问题解答
- 大数据应用在各个行业的研究报告
- 2023年小学阶段必背文学常识
- 客服行业专业面试问题及应对策略分享
- (完整版)数学新初一分班必考知识点试题(比较难)及解析
- (完整版)数学新初一分班试题答案
- (完整版)数学苏教六年级下册期末模拟题目解析
- 密码安全分析师安全事件沟通协调机制
- 幼儿园教师面试技巧及应对策略
- 湿地运行维护管理办法
- AEO贸易安全培训内容课件
- 国开期末考试《行政领导学》机考试题及答案
- 2025年广东省高中物理学业水平合格考试卷试题(含答案详解)
- 风电项目监理与质量控制
- 智算中心灾难恢复与应急响应方案
- 2025至2030年中国医用医疗器械行业发展监测及市场发展潜力预测报告
- 健康企业知识培训课件
- Module1 Unit 2 It's a long story课件 外研版九年级英语下册
- 2025-2030中国机床预测性维护系统市场接受度调研报告
- 催泪喷射器的使用课件
评论
0/150
提交评论