哈夫曼编码和哈夫曼树的实现——Pascal实现
2016-01-05 21:34
429 查看
源代码:
program Project1; type hu=RECORD data:char; weight:integer; code:string; end; fun=record weight,parent,Lc,Rc:integer; end; Var tree:ARRAY[1..20] of hu; newtree:ARRAY[1..20] of fun; i,g,max,min,j,x:integer; a:char; s:string; procedure inittree(); begin i:=0; read(a); while(a<>'#') do begin if(a>='0') and (a<='9') then begin tree[i].weight:=tree[i].weight*10+ord(a)-ord('0'); end else begin inc(i); tree[i].data:=a; end; read(a); end; g:=i; end; function minimum(im:integer):integer; begin min:=max; x:=1; for j:=1 to im-1 do if(min>newtree[j].weight) and (newtree[j].parent=0)then begin min:=newtree[j].weight; x:=j; end; newtree[x].parent:=im; minimum:=x; end; procedure huffman; begin for i:=g+1 to 2*g-1 do begin newtree[i].Lc:=minimum(i); newtree[i].Rc:=minimum(i); newtree[i].weight:=newtree[newtree[i].Lc].weight+newtree[newtree[i].Rc].weight; end; writeln; end; procedure print_pre(n:integer); begin write(tree .data); if(tree[2*n].data<>'#')then print_pre(2*n); if(tree[2*n+1].data<>'#')then print_pre(2*n+1); end; procedure println(); begin for i:=1 to 2*g-1 do writeln(i:2,'|',newtree[i].weight:3,'|',newtree[i].parent:3,'|',newtree[i].Lc:2,'|',newtree[i].Rc:2); end; procedure getweight(); begin for i:=1 to g do begin newtree[i].weight:=tree[i].weight; end; end; procedure printtree(); begin for i:=1 to g do writeln(tree[i].data,' ',tree[i].weight); end; procedure MC(i:integer;x:integer); begin if(newtree[i].parent<>0) then begin MC(newtree[i].parent,i); end; begin if(x=newtree[i].Lc) then s:=s+'0' else s:=s+'1'; end; end; begin max:=10000; inittree; for j:=1 to g do tree[j].code:=''; readln; printtree; getweight; huffman; println(); readln; for j:=1 to g do begin s:=''; MC(j,0); tree[j].code:=copy(s,1,length(s)-1); end; for j:=1 to g do writeln(tree[j].data,':',tree[j].code); readln; end.
相关文章推荐
- 1105 Spiral Matrix
- 2016.01.05 DOM笔记(一) 查找元素
- visual 调试
- Jdbc Url 设置allowMultiQueries为true和false时底层处理机制研究
- [Hadoop]源码分析(1)----FileSytem
- Javascript中判断数组的正确姿势
- android 打包失败
- 迟到的2015年末总结
- 分析iOS Crash文件,使用命令符号化iOS Crash文件
- 图解 TCP/IP 协议
- 12. Integer to Roman&&13. Roman to Integer
- mybatis执行批量更新batch update 的方法(oracle,mysql)
- 微信公众号现金红包红包 企业付款openid 获取
- 我的程序员之路(10)——北京第三家公司工作第三年总结
- 新建临时文件夹,新建多级目录
- Skyline V6.6.1安装文件下载及使用
- 管理数据库和表
- QGis二次开发基础 -- 矢量图层的显示样式
- 动态和静态编译驱动程序使用方法详解
- Java语言注意事项