亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? huffmantree.cpp

?? 華南師范大學(xué)計(jì)機(jī)實(shí)驗(yàn)3,哈夫曼樹,不含實(shí)驗(yàn)報(bào)告
?? CPP
字號:
#include"HuffmanTree.h"
#include<string>
using namespace std;


HuffmanTree::HuffmanTree()
{
 Node=NULL;          
 Info=NULL;         
 LeafNum=0;         
}

HuffmanTree::~HuffmanTree()
{
 delete[] Node;        
 delete[] Info;         
}

void HuffmanTree::Initialization(int WeightNum)       
{
 int i,j,pos1,pos2,max1,max2;   
 
 Node=new HuffmanNode[2*WeightNum-1];  
 Info=new char[2*WeightNum-1];
 for(i=0;i<WeightNum;i++)
 {
  cout<<"請輸入第"<<i+1<<"個(gè)字符值";
  getchar();           
  Info[i]=getchar();   
  getchar();
  cout<<"請輸入該字符的權(quán)值或頻度";
  cin>>Node[i].weight;       
  Node[i].parent=-1;     
  Node[i].lchild=-1;     
  Node[i].rchild=-1;     
 }
 
 for(i=WeightNum;i<2*WeightNum-1;i++) 
 {
  pos1=-1;
  pos2=-1;         
  max1=32767;     
  max2=32767;     

  for(j=0;j<i;j++)    
   if(Node[j].parent==-1)      
    if(Node[j].weight<max1)   
    { 
     max2=max1;           
     max1=Node[j].weight;   
     pos2=pos1;          
     pos1=j;            
    }
    else
     if(Node[j].weight<max2)    
     {
      max2=Node[j].weight;    
      pos2=j;                
     }
 
  Node[pos1].parent=i;      
  Node[pos2].parent=i;
  Node[i].lchild=pos1;      
  Node[i].rchild=pos2;
  Node[i].parent=-1;             
  Node[i].weight=Node[pos1].weight+Node[pos2].weight;
 } //for
 LeafNum=WeightNum;
 
 
 char ch;
 cout<<"是否要替換原來文件(Y/N):";
 cin>>ch;
 if(ch=='y'||ch=='Y')
 {
 ofstream fop;   
 fop.open("hfmTree.dat",ios::out|ios::binary|ios::trunc);
 if(fop.fail())                    
  cout<<"文件打開失敗!\n";
 fop.write((char*)&WeightNum,sizeof(WeightNum)); 
 for(i=0;i<WeightNum;i++)        
 {
  fop.write((char*)&Info[i],sizeof(Info[i]));
  flush(cout);
 }
 for(i=0;i<2*WeightNum-1;i++)       
 {
  fop.write((char*)&Node[i],sizeof(Node[i]));
  flush(cout);
 }
 fop.close();           
 }
 cout<<"哈夫曼樹已構(gòu)造完成。\n";
}

void HuffmanTree::Encoder()
{
 if(Node==NULL)       
 {
  ifstream fip;       
  fip.open("hfmTree.dat",ios::binary|ios::in);
  if(fip.fail())      
  {
   cout<<"文件打開失敗!\n";
   return;      
  }
  fip.read((char*)&LeafNum,sizeof(LeafNum));  
  Info=new char[LeafNum]; 
  Node=new HuffmanNode[2*LeafNum-1];
  for(int i=0;i<LeafNum;i++)             
   fip.read((char*)&Info[i],sizeof(Info[i]));
  for(i=0;i<2*LeafNum-1;i++)            
   fip.read((char*)&Node[i],sizeof(Node[i]));
 }
 
 char *Tree;        
 int i=0,num;
 char Choose;        
 cout<<"你要從文件中讀取內(nèi)容(1),還是重新輸入(2):";
 cin>>Choose;
 if(Choose=='1')       
 {
  ifstream fip1("ToBeTran.txt");
  if(fip1.fail())    
  {
   cout<<"文件打開失敗!\n";
   return;       
  }
  char ch;
  int k=0;
  while(fip1.get(ch))            
  {
   k++;                    
  } 
  fip1.close();  
 
  Tree=new char[k+1];
  ifstream fip2("ToBeTran.txt");

  k=0; 
  while(fip2.get(ch))
  {
   Tree[k]=ch;         
   k++;
  }
  fip2.close();
  Tree[k]='\0';        
  cout<<"需編碼內(nèi)容為:";
  cout<<Tree<<endl;
 }

 else           
 {
  string tree;        
                   
  
  cin.ignore();
  cout<<"請輸入需要編碼的內(nèi)容(可輸入任意長,結(jié)束時(shí)請按2下回車):\n";
  getline(cin,tree,'\n');       
  while(tree[i]!='\0')
   i++;
  num=i;          
  i=0;
  Tree=new char[num+1];
  while(tree[i]!='\0')      
  {
   Tree[i]=tree[i];
   i++;
  }
     Tree[i]='\0';         
 }
 
 ofstream fop("CodeFile.dat",ios::trunc);     
 i=0;
 int k=0;
 char *code;
 code=new char[LeafNum];      
                               
 while(Tree[k]!='\0')           
 {
  int j,start=0;
  for(i=0;i<LeafNum;i++)
   if(Info[i]==Tree[k])           
    break; 
   j=i;
  while(Node[j].parent!=-1)       
  {
   j=Node[j].parent;             
   if(Node[j].lchild==i)         
    code[start++]='0';
   else                      
    code[start++]='1';\
   i=j;
  }
  code[start]='\0';            

  
  for(i=0;i<start/2;i++)          
  {
   j=code[i];
   code[i]=code[start-i-1];
   code[start-i-1]=j;
  }
        i=0;
  while(code[i]!='\0')      
  {
   fop<<code[i];
   i++;
  }
  k++;
 }
 fop.close();
 cout<<"已編碼!且存到文件CodeFile.dat中!\n\n";
} 
void HuffmanTree::Decoder()
{
 int i=0,k=0;
 int j=LeafNum*2-1-1;      
 char* BitStr;
 
 ifstream fip1("CodeFile.dat");         
 if(fip1.fail())        
 {
  cout<<        "請先編碼!\n";
  return;
 }
 cout<<"經(jīng)譯碼,原內(nèi)容為:";
 char ch;
 while(fip1.get(ch))            
 {
  k++;                     
 }
 fip1.close();  
 
 BitStr=new char[k+1];
 ifstream fip2("CodeFile.dat");
 k=0;
 while(fip2.get(ch))
 {
  BitStr[k]=ch;        
  k++;
 }
 fip2.close();                
 BitStr[k]='\0';       
 if(Node==NULL)      
 {
  cout<<"請先編碼!\n";
  return;
 }
 ofstream fop("TextFile.dat");        
 while(BitStr[i]!='\0')
 {
  if(BitStr[i]=='0')
   j=Node[j].lchild;         
  else
   j=Node[j].rchild;         
  if(Node[j].rchild==-1)  
  {
   cout<<Info[j];        
   j=LeafNum*2-1-1;          
   fop<<Info[j];               
  }
  i++;
 }
 fop.close();
 
 cout<<"\n譯碼成功且已存到文件TextFile.dat中!\n\n";
}
void HuffmanTree::Print()
{
 char ch;
 int i=1;
 ifstream fip("CodeFile.dat");          
 ofstream fop("CodePrin.dat");          
 if(fip.fail())
 {
  cout<<"沒有文件,請先編碼!\n";

  return;
 }
 while(fip.get(ch))
 {
  cout<<ch;           
  fop<<ch;             
  if(i==50)       
  {
   cout<<endl;
   i=0;
  }
  i++;
 }
 cout<<endl;
 fip.close();         
 fop.close();          
}

void HuffmanTree::TreePrinting()
{
 if(Node==NULL)        
 {
  cout<<"請先建立哈夫曼樹!\n";
  return;
 }
 ofstream fop("TreePrint.dat");
 cout<<"結(jié)點(diǎn)位置(權(quán)值)  "<<"編碼  "<<"左孩子  "<<"編碼"<<"右孩子('^'表示葉子)\n";
 fop<<"結(jié)點(diǎn)位置(權(quán)值)  "<<"編碼  "<<"左孩子  "<<"編碼"<<"右孩子('^'表示葉子)\n";
 int i;
 for(i=(2*LeafNum-2);i>LeafNum-1;i--)       
 {
  cout<<i<<"("<<Node[i].weight<<")"<<"--1--"
  <<Node[i].lchild<<"("<<Node[Node[i].lchild].weight<<")"<<"--0--"
  <<Node[i].rchild<<"("<<Node[Node[i].rchild].weight<<")"<<endl;
  fop<<i<<"("<<Node[i].weight<<")"<<"--1--"
  <<Node[i].lchild<<"("<<Node[Node[i].lchild].weight<<")"<<"--0--"
  <<Node[i].rchild<<"("<<Node[Node[i].rchild].weight<<")"<<endl;
 }
 for(;i>=0;i--)
 {
  cout<<i<<":"<<Node[i].weight<<"("<<Info[i]<<")---^\n";
  fop<<i<<":"<<Node[i].weight<<"("<<Info[i]<<")---^\n";
 }
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲成av人片一区二区三区| 久久色.com| 欧美成人女星排行榜| 久久精品视频一区二区| 亚洲精品高清在线| 精品夜夜嗨av一区二区三区| caoporm超碰国产精品| 欧美日韩二区三区| 久久精品无码一区二区三区| 亚洲影院免费观看| 精品亚洲成a人| 色偷偷久久一区二区三区| 日韩三级中文字幕| 亚洲视频免费在线观看| 久久99精品久久久久久国产越南 | 国产欧美一区二区精品婷婷| 亚洲另类春色校园小说| 国产自产2019最新不卡| 欧美午夜宅男影院| 国产欧美日韩精品在线| 日欧美一区二区| 不卡电影免费在线播放一区| 日韩一二三四区| 一区二区三区四区国产精品| 国产精品 欧美精品| 欧美喷潮久久久xxxxx| 国产精品青草久久| 美女国产一区二区三区| 色婷婷av一区二区三区之一色屋| 26uuu国产日韩综合| 亚洲综合清纯丝袜自拍| 成人免费高清视频在线观看| 欧美一区二区三区在线电影| 亚洲精品视频免费看| 粉嫩av一区二区三区粉嫩 | 蜜臀91精品一区二区三区| 暴力调教一区二区三区| 精品国产人成亚洲区| 婷婷开心激情综合| 色呦呦国产精品| 中文在线一区二区| 国内精品久久久久影院色| 欧美另类一区二区三区| 亚洲欧美日韩国产中文在线| 国产成人h网站| 精品嫩草影院久久| 日本成人在线不卡视频| 欧美亚洲国产怡红院影院| 中文字幕一区二区三区不卡在线| 国产乱子轮精品视频| 欧美成人aa大片| 丝袜诱惑亚洲看片| 欧美日韩高清在线| 亚洲一区二区免费视频| 在线免费精品视频| 亚洲精品国产一区二区精华液 | 最新国产の精品合集bt伙计| 国产91丝袜在线18| 久久九九全国免费| 国产精品123区| 久久久久久久性| 国产精品一区二区无线| 欧美成人福利视频| 国产在线播放一区| 久久老女人爱爱| 国产尤物一区二区| 国产日韩精品一区二区三区在线| 国产精品一区二区男女羞羞无遮挡 | 国产无遮挡一区二区三区毛片日本| 久久成人麻豆午夜电影| 欧美成人精品1314www| 美女任你摸久久| 精品电影一区二区| 国产一区二区精品久久99| 国产日韩综合av| 成人一区在线观看| 国产精品网友自拍| 一本一道波多野结衣一区二区| 亚洲男人的天堂在线观看| 91麻豆免费视频| 亚洲妇女屁股眼交7| 5566中文字幕一区二区电影| 美女免费视频一区| 久久久久久久久久久黄色| 粉嫩av亚洲一区二区图片| 国产精品萝li| 色婷婷久久久久swag精品| 亚洲自拍偷拍网站| 欧美一区二区啪啪| 国产一区二区主播在线| 国产精品久久久久影院| 色婷婷精品久久二区二区蜜臂av | 日韩无一区二区| 麻豆精品精品国产自在97香蕉| 精品少妇一区二区三区| 国产成人亚洲综合a∨婷婷图片| 国产精品久久二区二区| 91久久人澡人人添人人爽欧美| 五月天精品一区二区三区| 欧美v亚洲v综合ⅴ国产v| 国产精品香蕉一区二区三区| 综合色中文字幕| 555www色欧美视频| 国产凹凸在线观看一区二区| 亚洲女厕所小便bbb| 欧美精品123区| 精品一区二区三区不卡| 亚洲色图色小说| 91精品国产91久久久久久最新毛片| 黄色成人免费在线| 亚洲少妇30p| 日韩视频一区二区| 99v久久综合狠狠综合久久| 亚洲成人免费在线| 国产亚洲自拍一区| 欧美色图一区二区三区| 国产一区二区三区四区在线观看| 成人免费一区二区三区在线观看| 51精品秘密在线观看| 成人美女视频在线观看18| 天天色综合天天| 国产人妖乱国产精品人妖| 欧美日韩一区二区在线视频| 国产高清久久久| 午夜在线电影亚洲一区| 日本一区二区电影| 91麻豆精品国产自产在线观看一区 | 91亚洲午夜精品久久久久久| 美日韩一区二区| 一片黄亚洲嫩模| 精品国产1区二区| 欧美性猛片xxxx免费看久爱| 国产成人精品一区二区三区四区 | 日韩一区二区三区视频在线| 99久久精品99国产精品| 老司机午夜精品| 亚洲国产aⅴ成人精品无吗| 日本一区二区久久| 日韩欧美色综合网站| 日本精品一区二区三区高清| 国产一区二区h| 人人狠狠综合久久亚洲| 一区二区激情视频| 中文字幕一区二区三区精华液 | 国产精品一区二区免费不卡| 日韩国产欧美在线视频| 亚洲欧美一区二区三区极速播放| 久久精品一区二区| 欧美成人video| 91精品国产综合久久久久久| 色婷婷亚洲精品| 99久久国产综合精品女不卡| 国产高清亚洲一区| 国产综合久久久久影院| 日韩**一区毛片| 亚洲成人资源网| 亚洲一区二区五区| 综合色天天鬼久久鬼色| 国产精品日日摸夜夜摸av| 久久夜色精品国产噜噜av| 91精品国产综合久久香蕉麻豆 | 日韩av在线播放中文字幕| 亚洲一区二区三区中文字幕| 中文字幕一区二区三区在线播放| 国产亚洲欧美在线| 久久精品在这里| 久久综合国产精品| 久久综合九色综合97婷婷女人| 337p亚洲精品色噜噜狠狠| 欧美日韩视频在线观看一区二区三区| av在线不卡免费看| 不卡av免费在线观看| 成人国产亚洲欧美成人综合网| 国产精品一区免费在线观看| 久久99热这里只有精品| 精品一区二区国语对白| 久久99蜜桃精品| 国产一区二区在线看| 韩国三级在线一区| 久久99精品久久久久久国产越南 | 久久影视一区二区| 精品免费日韩av| 久久亚洲一级片| 久久九九全国免费| 国产精品素人一区二区| 国产精品丝袜黑色高跟| 亚洲国产精品ⅴa在线观看| 国产精品久久久久久久午夜片| 中文字幕一区二区不卡| 亚洲久本草在线中文字幕| 一区二区在线观看不卡| 亚洲一二三级电影| 日韩激情在线观看| 久久se精品一区精品二区| 国产乱淫av一区二区三区| 粉嫩绯色av一区二区在线观看| caoporn国产精品| 欧美综合久久久| 91精品国产色综合久久| 久久综合久色欧美综合狠狠|