基于哈夫曼树的文件压缩解压程序-示例文档内容摘要:
是课间给我的精辟回答使我有了更为明晰的思路,才有最终的设计结果。 14 七 附录 (此部分不用打印) 程序清单 在此,给出 的程序清单。 Dos 版本的程序清单在此略过。 include pragma hdrstop include include include include vector include set include utility include iterator include list include include using namespace std。 pragma package(smart_init) pragma resource *.dfm char inputFileBuffer[1048576]。 char wantFileBuffer[1048576]。 vector double X(511,0)。 AnsiString ShowNowTime() { Word H, M, S,Ms。 DecodeTime(Now(), H, M, S,Ms)。 AnsiString sH=AnsiString(H)。 AnsiString sM=AnsiString(M)。 AnsiString sS=AnsiString(S)。 AnsiString sMs=AnsiString(Ms)。 if (()==1) sM=0+sM。 if (()==1) sS=0+sS。 if (()==1) sMs=00+sMs。 if (()==2) sMs=0+sMs。 return sH+点 +sM+分 +sS+秒 +sMs。 } void Haffman(int nodeCode,int length,int sum,vector pairint,int amp。 hfmCode,vectorint amp。 lchild,vectorint amp。 rchild) { if (nodeCode==1) return。 if (nodeCode=255) { hfmCode[nodeCode].first=length。 hfmCode[nodeCode].second=sum。 return。 } Haffman(lchild[nodeCode],length+1,sum*2,hfmCode,lchild,rchild)。 Haffman(rchild[nodeCode],length+1,sum*2+1,hfmCode,lchild,rchild)。 } void search(int nodeCode,int amp。 i,vectorint amp。 lchild,vectorint amp。 rchild) { if (lchild[nodeCode]==1) { X[nodeCode]=i。 15 i++。 return。 } search(lchild[nodeCode],i,lchild,rchild)。 search(rchild[nodeCode],i,lchild,rchild)。 X[nodeCode]=(X[lchild[nodeCode]]+X[rchild[nodeCode]])/2。 } void searchdraw(int nodeCode,int height,vectorint amp。 lchild,vectorint amp。 rchild) { if (nodeCode==1) return。 if (lchild[nodeCode]==1) { Form3Image1CanvasBrushColor=clWhite。 Form3Image1CanvasTextOut(X[nodeCode]*205,height*60+14,AnsiString(nodeCode))。 Form3Image1CanvasBrushColor=clRed。 } Form3Image1CanvasEllipse(X[nodeCode]*205,height*604,X[nodeCode]*20+10+4,height*60+10+4)。 Form3Image1CanvasTextOut(X[nodeCode]*201,height*601,height)。 Form3Image1CanvasBrushColor=clYellow。 if (lchild[nodeCode]!=1) { Form3Image1CanvasMoveTo(X[nodeCode]*20+5,height*60+10+4)。 Form3Image1CanvasLineTo(X[lchild[nodeCode]]*20+5,height*60+604)。 searchdraw(lchild[nodeCode],height+1,lchild,rchild)。 Form3Image1CanvasMoveTo(X[nodeCode]*20+5,height*60+10+4)。 Form3Image1CanvasLineTo(X[rchild[nodeCode]]*20+5,height*60+604)。 searchdraw(rchild[nodeCode],height+1,lchild,rchild)。 } } void indexSearch(int nodeCode,vectorint amp。 lchild,vectorint amp。 rchild,vectorint amp。 index,vectorintamp。 code) { if (nodeCode256) { (1)。 (nodeCode)。 return。 } (0)。 indexSearch(lchild[nodeCode],lchild,rchild,index,code)。 indexSearch(rchild[nodeCode],lchild,rchild,index,code)。 } void makeIndex(int nodeCode,int amp。 tt,vectorint amp。 index,int amp。 indexNum,listint amp。 code,vectorint amp。 lchild,vectorint amp。 rchild) { if (index[indexNum++]==1) { lchild[nodeCode]=()。 ()。 } else { lchild[nodeCode]=tt++。 makeIndex(lchild[nodeCode],tt,index,indexNum,code,lchild,rchild)。 } if (index[indexNum++]==1) { rchild[nodeCode]=()。 ()。 } else { 16 rchild[nodeCode]=tt++。 makeIndex(rchild[nodeCode],tt,index,indexNum,code,lchild,rchild)。 } } TForm1 *Form1。 // __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } // void __fastcall TForm1::Compress(TObject *Sender) { if (!FileExists(Edit1Text)) { ShowMessage(Edit1Text+ 文件不存在 !)。 return。 } Edit8Text=。 Edit9Text=。 Edit10Text=。 Edit11Text=。 Edit12Text=。 Edit13Text=。 Label1Caption=。 Label2Caption=。 Label3Caption=。 Label4Caption=。 Label5Caption=。 Label6Caption=。 Label20Caption=。 Label26FontColor=clOlive。 ProgressBar1Position=0。 ProgressBar3Position=0。 StatusBar1PanelsItems[0]Text=。 StatusBar1PanelsItems[1]Text=。 Edit8Text=ShowNowTime()。 Label21FontColor=clNavy。 Form1Update()。 ifstream fin,fin1。 ofstream fout。 vector int frequent(256,0)。 vector int lchild(512,1)。 vector int rchild(512,1)。 vector pair int,int hfmCode(256)。 int newNodeCode=255。 int inputFileByte。 int wantFileByte=0。 int wantFileIndexByte=0。 int wantFileContentBit=0。 int wantFileContentByte。 int buffer。 int buffersize。 int inputFileRestSize。 int inputFileMega=0。 char *inputFileName=new char[Edit1()+1]。 strcpy(inputFileName,Edit1())。 char *wantFileName=new char[Edit4()+1]。 strcpy(wantFileName,Edit4())。 17 int handle=open(inputFileName,O_RDONLY)。 inputFileByte=filelength(handle)。 close(handle)。 int step。 (inputFileName,ios::binary)。 //下面统计该文件的编码频率分布 Edit9Text=ShowNowTime()。 Label21FontColor=clOlive。 Label22FontColor=clNavy。 Form1Update()。 while(1) { (inputFileBuffer,1048576)。 if (()) break。 for(int i=0。 i1048576。 i++) { int t=inputFileBuffer[i]。 if (t0) t+=256。 frequent[t]++。 } inputFileMega+=1。 ProgressBar3Position=inputFile。基于哈夫曼树的文件压缩解压程序-示例文档
相关推荐
大科技 项目“ 2020 年小康型城住宅产业工程项目” ,其目标是以科技为先导 ,以 示范住宅小区建设为载体 ,推进我国住宅产业现代化 ,构建新一代住宅产业。 该项目于 1995 年正式启动。 国内 30 家科研单位、高等院校和生产企业参与了该项目的研究和发展。 在 该项目中 ,把“智能型住宅技术”列为重中之重专题 ,投入大量人力与物力 ,重点开展技 术、产品与工程应用研究。 1997 年
,日产 的 多效蒸馏 多效蒸馏是指重复利用二次蒸汽 ,即把二次蒸汽作为下一效的加热源 ,多效蒸馏海 水淡化方法和多级闪蒸海水淡化方法同属蒸馏法 ,产品水纯度高。 但多效蒸馏可利用较多 级闪蒸更低的低位热源 ,能量消耗更低。 但是设备结构较为复杂 ,不利于小型化发展。 目 前世界上的淡化装置绝大多数都是采用低温多效蒸馏 .,也是被许多专家 称为最节能的淡化方法之一【妒。 压汽蒸馏
3 月竣工,龙轩大地商住楼 2020 年 6 月竣 工,总工期 4 年。 自然与水土流失特点 项目建设区地貌为丘陵地貌,属亚热带温暖湿润季风气候区,具冬暖、春早,雨量充沛,夜雨多,空气湿度大,云雾多,日照偏少等特点。 项目位于 铜梁县 内,土壤类型主要为 紫色土。 土壤容许流失量为 500t/( km2•a)。 根据重庆市人民政府印发的《关于划分水土流失重点防治区的通告》 (渝府发
审核人 交底人 接受交底人 表由施工单位填写,交底单位与接受交底单位各存一份。 当做分项工程施工技术交底时,应填写“分项工程名称”栏,其它技术交底可不填写。 技 术 交 底 记 录 表 C21 编号 工程名称 昌平未来科技城南区(鲁疃村)定向安置房 1~10楼及地下车库项目 交底日期 2020 年 5 月 5 日 施工单位 中天建设集团有限公司 分项工程名称 防水 工程 交底提要 底板 SBS
地春玉米种植大多采用育苗移栽,而如何培育春玉米壮苗,使玉米的增产潜力得到进一步的发挥,是春玉米生产中急需解决的一个课题。 春玉米育苗有营养钵育苗,塘泥方格育苗和普通育苗等几种办法。 春玉米肥床稀播育苗的具体做法为:按每平方米苗床用尿素 50 克,过磷酸钙 250 克,氯化钾 50 克,人粪尿 1215 公斤,在播种前 1015 天将肥料预先施入苗床,并与 57 厘米深度的土层充分拌匀待播。
与订货合同是否一致;配备仪器的精度是否符合规定要求;系统(或设备)的安装是否符合 GMP 要求(如管道焊接光滑等);与公用系统的连接是否符合设计要求、安全要求及 GMP 要求等;各种标记是否符合 GMP 要 求; ( 3) 运行确认:确认系统(或设备)的运行是否正常和安全;各种仪器、仪表是否在校正期限内;系统(或设备)各项技术参数能否达到设定要求。 ( 4) 性能确认