已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
#include#include#include#includeusing namespace std;char a100; /字符数组int b100; /字符个数double p_a100; /字符概率数组int sum=0; /字符总数/判断当前字符temp是否已出现过bool search(char temp,char a,int m,int n)/m为数组a的元素总个数,即100;n为当前数组a中存放的字符种类的个数int i=0;while(in)if(ai=temp) return true;else i+;return false;/求各个字符的个数,放在数组b中void read_file( string file_name = test_data.txt ) int k=0; ifstream file( file_name.c_str() ); /将string转化为char数组 char temp; if ( file.is_open() = true ) /检查文件是否打开 while ( file.peek() != EOF ) / 从文件中读取一个字符,但该字符并未从输入流中删除 file.get( temp ); / 从文件读入一个字符并把它存储在temp sum+; /统计出现的字符总数 if(search(temp,a,100,k) for(int i=0;ik;i+) if(temp=ai) bi+; break; else ak=temp; bk+; k+; file.close(); / 关闭文件 int main() for(int i=0;i100;i+) ai=; bi=0; string add=C:input.txt ; read_file(add); coutsumendl; for(int p=0;p100;p+) if(ap!=) p_ap=(double)bp)/(double)sum); else p_ap=0.0; p=0; while(p100 &ap!=) coutap p_apendl; p+; return 0;、#include#include#include#includeusing namespace std;/char a100; /字符数组int b100; /字符个数double p_a100; /字符概率数组int sum=0; /字符总数/判断当前字符temp是否已出现过bool search(char temp,char a,int m,int n)/m为数组a的元素总个数,即100;n为当前数组a中存放的字符种类的个数int i=0;while(in)if(ai=temp) return true;else i+;return false;/求各个字符的个数,放在数组b中void read_file( string file_name = test_data.txt ) int k=0; ifstream file( file_name.c_str() ); /将string转化为char数组 char temp; if ( file.is_open() = true ) /检查文件是否打开 while ( file.peek() != EOF ) / 从文件中读取一个字符,但该字符并未从输入流中删除 file.get( temp ); / 从文件读入一个字符并把它存储在temp sum+; /统计出现的字符总数 if(search(temp,a,100,k) for(int i=0;ik;i+) if(temp=ai) bi+; break; else ak=temp; bk+; k+; file.close(); / 关闭文件 /typedef struct char data; int weight; int parent ,lchild,rchild;HTNode,*HuffmanTree;/动态分配数组存储哈夫曼树 typedef char * HuffmanCode;/ 动态分配数组存储哈夫曼编码表 / 返回i个节点中权值最小的树的根节点序号int min (HuffmanTree t, int i) int j,flag; int k=100; for(j=1;j=i;j+) if(tj.weight=k)&(tj.parent=0) k=tj.weight,flag=j; tflag.parent=1; return flag; /在i个结点中选择2个权值最小的树的根结点序号,s1为其中序号小的那个void select (HuffmanTree t,int i,int &s1,int &s2) s1=min(t,i); s2=min(t,i);/w存放n个字符的权值,构造哈夫曼树HT,并求出n个字符的哈弗夫编码HCvoid HuffmanCoding (HuffmanTree &HT,HuffmanCode &HC,int *w,int n,char *wx,int nx) int m,i,s1,s2; int c,cdlen; HuffmanTree p; char *cd; if(n=1) return ; m=2*n-1; HT=(HuffmanTree)malloc(m+1)*sizeof(HTNode);/0号单元未用 for(p=HT+1,i=1;i=n;+i,+p,+w) (*p).weight=*w; (*p).data=*wx; (*p).parent=0; (*p).lchild=0; (*p).rchild=0; for(;i=m;+i,+p) (*p).parent=0; for(i=n+1;i=m;+i)/见哈夫曼树 select(HT,i-1,s1,s2); HTs1.parent=HTs2.parent=i; HTi.lchild=s1; HTi.rchild=s2; HTi.weight=HTs1.weight+HTs2.weight; HC=(HuffmanCode)malloc(n+1)*sizeof(char*); cd=(char*)malloc(n*sizeof(char); c=m; cdlen=0;/记录一个码字中码的个数 for(i=1;i=m;+i) HTi.weight=0;/遍历哈弗曼树时用作结点状态标志 while (c) if(HTc.weight=0)/说明没有遍历过 HTc.weight=1; if(HTc.lchild!=0)/有左孩子 c=HTc.lchild; cdcdlen+=0; else if(HTc.rchild=0)/没有左孩子,也没有右孩子 HCc=(char*)malloc(cdlen+1)*sizeof(char);/结束,多一个单元来放结束符号 cdcdlen=0; strcpy(HCc,cd); else if(HTc.weight=1)/遍历过一次的结点 HTc.weight=2; if(HTc.rchild!=0)/有左右孩子 c=HTc.rchild; cdcdlen+=1; else HTc.weight=0; c=HTc.parent; -cdlen; free(cd);/int main()int countx=0;/字符种类的个数 for(int i=0;i100;i+) ai=; bi=0; string add=C:input.txt ; read_file(add); cout字符总个数:; coutsumendl; for(int p=0;p100;p+) if(ap!=) countx+; p_ap=(double)bp)/(double)sum); else p_ap=0.0; cout字符种类:countxendl; p=0; while(p100 &ap!=) coutap p_apendl; p+; / int count=0; HuffmanTree HT; HuffmanCode HC; int *w,n;char *wx; n=countx;/字符种类个数 coutendl; w=(int *)malloc(n*sizeof(int); wx=(char *)malloc(n*sizeof(char); for(i=0;i=n-1;i+) wi=bi;/存放着权值wxi=ai; H
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 人力资源辅警面试题及答案
- 赵喜仓统计学课件
- 航空服务职业发展前景
- 2025广东惠州市公安局招聘警务辅助人员612人考试笔试备考试题及答案解析
- 患者隐私保护在资质审核中的透明度提升方案设计实施指南
- 患者健康促进服务教育标准化方案
- 2025 年高职体育教育(田径教学训练)试题及答案
- 2025黑龙江哈尔滨银行大连分行诚聘6人备考题库及参考答案详解一套
- 2026中国建设银行吉林省分行校园招聘570人备考题库参考答案详解
- 2025年所有面试题及答案
- 烘干塔买卖合同范本
- 扬修2SA8电动执行器使用维护
- 2025云南省科技投资管理有限公司招聘二次(19人)笔试考试参考试题及答案解析
- 光伏支架项目可行性研究报告
- (完整)特种设备专项应急预案
- 2026年放射医学技术(士)(基础知识)模拟考试题及解析
- 2025年广告模特形象使用合同协议
- 改良Bacon手术专家共识2026
- 2025年秋人教版小学四年级数学上册竞赛训练试题(含答案解析)
- 消化道早癌内镜治疗后多学科协作(MDT)全程管理方案
- 焦虑障碍的护理
评论
0/150
提交评论