全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
/*置以下数据于f:临时aa.txt:8529781423311ABCDEFGHAHDC*/-赫夫曼编码-#include#include#include#include#includeusing namespace std;/-typedef structunsigned int weight;unsigned int parent,lchild,rchild;HTNode,*HuffmanTree; /动态分配数组存储赫夫曼树typedef char *HuffmanCode; /动态分配数组存储赫夫曼编码表class Huffmanprivate: HuffmanTree HT; /储赫夫曼树 HuffmanCode HC; /赫夫曼编码表 int *w; /频度 string str; /字符串 int n; /n个字符public: void Initialization(ifstream &in); /初始化 void HuffmanCoding(); /赫夫曼编码 void Select(int h,int &s1,int &s2,int l); /查找两个最小值 void Encoding(ifstream &in,ofstream &out);/编码 void Decoding(); /译码 void PrintH(); /输出编码;/-int main()ifstream in(f:临时aa.txt);ofstream out(f:临时bb.txt);Huffman huffman;huffman.Initialization(in);huffman.HuffmanCoding();huffman.PrintH();huffman.Encoding(in,out);huffman.Decoding();return 0;/-void Huffman:HuffmanCoding()/w存放n个字符的权值(均0),构造赫夫曼树HT,并求出n个字符的赫夫曼编码HC。if(n = 1) return;int m = 2 * n - 1,i,l = 1,c,f,start;HuffmanTree p;/0号单元未用HT = (HuffmanTree)malloc(m+1)*sizeof(HTNode); /*/HT = new HTNodem+1;for(p = HT + 1,i = 1;i weight = *w;p-lchild = 0;p-rchild = 0;p-parent = 0;for(;i weight = 0;p-lchild = 0;p-rchild = 0;p-parent = 0;for(i = n + 1;i = m;i+,l+)/建赫夫曼树/在HT1.i-1选择parent为0且weight最小的两个结点,其序号分别为s1和s2。int s1,s2;Select(i - 1,s1,s2,l);/couts1 s2endl;HTs1.parent = i;HTs2.parent = i;HTi.lchild = s1;HTi.rchild = s2;HTi.weight = HTs1.weight + HTs2.weight;/- - - 从叶子到根逆向求每个字符的赫夫曼编码 - - -/分配n个字符编码的头指针向量HC = (HuffmanCode)malloc(n+1)*sizeof(char*);/*/HC = new char*n+1;/分配求编码的工作空间char *cd = (char *)malloc(n*sizeof(char);/*/char *cd = new charn;cdn-1 = 0;/不是双引号for(i = 1;i = n;i+) /逐个字符求赫夫曼编码start = n - 1; /编码结束符位置for(c = i,f = HTi.parent;f != 0;c = f,f = HTf.parent) /从叶子到根逆向求编码if(HTf.lchild = c) cd-start = 0;elsecd-start = 1;/为第i个字符编码分配空间HCi = (char *)malloc(n - start)*sizeof(char); /*/HCi = new charn-start;strcpy(HCi,&cdstart); /从cd复制编码(串)到HCdelete cd;/释放工作空间/HuffmanCoding/-void Huffman:Select(int h,int &s1,int &s2,int l) /在HT1.n选择parent为0且weight最小的两个结点,返回其序号分别为s1和s2。int x = 0,y = 0,z;for(int i = 1;i = h;i+) if(HTi.parent != 0)continue;/parent不为0,则跳到下一次循环 int k = 0; for(int j = 1;j = h;j+) if(HTi.weight = h-2*l+2) /找到最小值s1 s1 = i; if(y = 0) z = i;/标记第一个最小值,解决两个最小值相等的问题 x+; y+; /if if(k = h-2*l+1) /找到最小值s2 s2 = i; x+; /if if(y = 2) /两个最小值相等 s1 = z; s2 = i; /if if(x = 2) if(s2 n)/使s2成为右孩子 int t = s2; s2 = s1; s1 = t; break;/找到两个最小值 /if/for/-void Huffman:Initialization(ifstream &in) /初始化inn;w = new intn;for(int i = 0;i wi;instr;/-void Huffman:PrintH() /输出编码cout-赫夫曼编码-endl;coutweight parent lchild rchild endl;coutstring(30,-)endl;for(int i = 1;i = 2*n -1;i+)coutsetw(5)setfill( )HTi.weightsetw(8)setfill( )HTi.parentsetw(7)setfill( )HTi.lchildsetw(7)setfill( )HTi.rchildendl;coutstring(30,=)endl;coutInfo weight HCendl;coutstring(22,-)endl;for(i = 1;i = n;i+)coutsetw(2)setfill( )stri-1setw(7)setfill( )HTi.weightsetw(8)setfill( ) HCiendl;coutstring(22,=)s;cout需要编码的文字:sendl;for(i = 0;i s.size();i+)for(j = 0;j n;j+)if(si = strj)t += HCj+1;k = 1;/ifif(k = 0)cout输入的文字有误!n;cout编成的代码:tendlendl;outtendl;couts;cout需要编译的代码:sendl;int i,j,k = 0,l,m;for(i = 1;k s.size();i+)for(j = 0,l = k;/*j sizeof(HC)/sizeof(*HCi)*/HCij != 0;j+,k+)m =
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 【正版授权】 ISO/ASTM 52940:2025 EN Additive manufacturing of ceramics - Feedstock materials - Characterization of ceramic slurry in vat photopolymerization
- 物流门市出租合同范本
- 磨床设备买卖合同范本
- 海关修理物品协议合同
- 种地托管地块合同范本
- 游乐设备合作合同范本
- 煤炭运输分包合同范本
- 油茶苗木询价合同范本
- 理财产品购买合同协议
- 特斯拉整车质保协议书
- 林业技师考试题库及答案2025
- 部队用电安全教育课件
- 2026届上海市普陀区九上物理期中统考试题含解析
- 2026年初中历史学业水平考试研讨会发言材料
- 高压系统应急预案
- 叉车理论知识培训课件
- DLT 593-2016 高压开关设备和控制设备
- 备考期末-六选五-专项练习-2022-2023学年人教版英语八年级上册
- IATF16949:2016中文完整
- SHT3903-2017监理用表
- 2020年度希望之星英语大赛小低组看图说话(图文五篇
评论
0/150
提交评论