⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rehuffman.java

📁 赫夫曼编译码器: 用哈夫曼编码进行通信可以大大提高信道利用率
💻 JAVA
字号:
import structure.*;
import java.util.Iterator;
import java.io.*;



public class Rehuffman
{public static void main(String args[])
 {     String s="";       
	   try{
       FileReader fr = null;
           fr = new FileReader("C:/hfmTree.txt");
          //System.out.println(fr); 
       BufferedReader br=new BufferedReader(fr);
           //System.out.println(br);
       String Line = null;
           Line = br.readLine();
           //System.out.println(Line);
           
       while(Line!=null){
           s=Line;
           Line=null;
           br.close();
           fr.close();
       }
       //System.out.println(s);
       }catch(IOException e1){
           e1.printStackTrace();
       }
       
       
       List freq = new SinglyLinkedList();
       for(int i=0;(2*i+1)<=s.length()-1;i++)
       {char t=s.charAt(2*i);
        int t1=Integer.parseInt(t+"");
        char ch=s.charAt(2*i+1);
        leaf query=new leaf(ch,t1);
        freq.addLast(query);
       }
       
        Iterator li = freq.iterator();
        OrderedList trees = new OrderedList();
        while (li.hasNext())
        {
            trees.add(new huffmanTree((leaf)li.next()));
        }
    
        Iterator ti = trees.iterator();
        while (trees.size() > 1)
        {
            ti = trees.iterator();
            huffmanTree smallest = (huffmanTree)ti.next();
            huffmanTree small = (huffmanTree)ti.next();
            trees.remove(smallest);
            trees.remove(small);
            trees.add(new huffmanTree(smallest,small));
        }
        ti  = trees.iterator();
	    Assert.condition(ti.hasNext(),"Huffman tree exists.");
        huffmanTree encoding = (huffmanTree)ti.next();
        
       
     String r="";
     int index=0;
     char c;     
     try
     {BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
     r=in.readLine();
     c=r.charAt(index);}
     catch(IOException exp){}
     BinaryTree temp2;
     temp2=encoding.root;
     BinaryTree record=new BinaryTree("");
     for(int i=0;i<=r.length()-1;i++)
     {char x=r.charAt(i);
      if(x=='0'){if(temp2.left()!=null) {temp2=temp2.left();
                     if(temp2.value()!="si"){leaf z=(leaf)temp2.value();
                                             System.out.print(z.ch);
                                             System.out.print("\t");
                                             record=temp2;
                                             temp2=encoding.root;}
                     else record=temp2;continue;}}
                     
                     
       else if(x=='1'){if(temp2.right()!=null) {temp2=temp2.right();
                      if(temp2.value()!="si"){leaf z=(leaf)temp2.value();
                                              System.out.print(z.ch);
                                              System.out.print("\t");
                                              record=temp2;
                                              temp2=encoding.root;}
                      else record=temp2;continue;}}
              else if((x!='0')&&(x!='1')) {System.out.print("\n");
                                       System.out.print(" 输入有误!");break;}
     }
     if(record.value()=="si")  {System.out.print("\n");System.out.print(" 输入有误!");} 
              
     }
}                                              

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -