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

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

?? 哈弗曼編碼.cpp

?? 哈弗曼編/譯碼程序源代碼,可以由用戶讀入哈弗曼樹
?? CPP
字號:
#include<iostream>
#include<fstream>
#include<string>
using namespace std;

typedef struct{
	char         ch;
	unsigned int weight;
	unsigned int parent,lchild,rchild;
}HTNode,*HuffmanTree;

typedef char **HuffmanCode;

void Select(HuffmanTree,int,int&,int&);

void InitHuffman(HuffmanTree &HT,HuffmanCode &HC,int n){
	int m,i,s1,s2,start;
	unsigned c,f;
	char *cd;
	m=2*n-1;
	HT=(HuffmanTree)malloc((m+1)*sizeof(HTNode)); 
	HuffmanTree p;
	cout<<"請依次字符和權(quán)值的順序各個輸入!"<<endl;
	cout<<"字符如果是空格,請用#代替!"<<endl;
	for(p=HT+1,i=1;i<=n;i++,p++){
		cin>>p->ch;
		cin>>p->weight;
		p->parent=0; p->lchild=0; p->rchild=0;
	}
	
	for(;i<=m;++i,p++){
		p->weight=0; p->parent=0; p->lchild=0; p->rchild=0; 
	}
	for(i=n+1;i<=m;++i){
		Select(HT,i-1,s1,s2);
		HT[s1].parent=i;  HT[s2].parent=i;
		HT[i].lchild=s1;  HT[i].rchild=s2;
		HT[i].weight=HT[s1].weight + HT[s2].weight;
	}
    
    HC=(HuffmanCode)malloc((n+1)*sizeof(char*));
    // 分配n個字符編碼的頭指針向量([0]不用)
    cd=(char*)malloc(n*sizeof(char)); // 分配求編碼的工作空間
    cd[n-1]='\0'; // 編碼結(jié)束符
    for(i=1;i<=n;i++)
    { // 逐個字符求赫夫曼編碼
        start=n-1; // 編碼結(jié)束符位置
        for(c=i,f=HT[i].parent;f!=0;c=f,f=HT[f].parent){
      // 從葉子到根逆向求編碼
            if(HT[f].lchild==c)
	            cd[--start]='0';
            else
			    cd[--start]='1';
		}
        HC[i]=(char*)malloc((n-start)*sizeof(char));
     // 為第i個字符編碼分配空間	
        strcpy(HC[i],&cd[start]); // 從cd復(fù)制編碼(串)到HC
    }
	//
	free(cd);
	ofstream fout("hfmTree.txt");
	fout<<n<<endl;
	i=1;
	while(i<=n){
	   fout<<HT[i].ch<<" "<<HT[i].parent<<" "<<HT[i].lchild<<" "<<HT[i].rchild<<" ";
	   fout<<HC[i]<<endl;
	   i++;
	}
	while(i<=m){
		fout<<HT[i].parent<<" "<<HT[i].lchild<<" "<<HT[i].rchild<<endl;
		i++;
	}
	fout.close();
	cout<<"初始化成功!哈弗曼樹已存入“hfmTree.txt”文件中!"<<endl;
}//end of InitHuffMan

void Select(HuffmanTree HT,int i,int &s1,int &s2){
	
	unsigned w=10000;
	for(int j=1;j<=i;j++){
		if(HT[j].weight<w&&HT[j].parent==0) {
           w=HT[j].weight; s1=j;
		}
	}
	HT[s1].parent=1;
	w=10000;
    for(j=1;j<=i;j++){
		if(HT[j].weight<w&&HT[j].parent==0){
           w=HT[j].weight; s2=j;
		}
	}
}//end of Select

void ReadHuffman(HuffmanTree &HT,HuffmanCode &HC,int &n){
	string code;
	int i=1;
	ifstream fin("hfmTree.txt");
	fin>>n;
	HT=(HuffmanTree)malloc((2*n)*sizeof(HTNode));
	HC=(HuffmanCode)malloc((n+1)*sizeof(char*));
	while(i<=n){
		fin>>HT[i].ch>>HT[i].parent>>HT[i].lchild>>HT[i].rchild;
		fin>>code;
		//HT[i].ch=c;
		//.str()將字符串轉(zhuǎn)化成const char*類型,為將const性質(zhì)強制去掉
		HC[i]=(char*)malloc(30*sizeof(char));
		strcpy(HC[i],code.c_str());
		i++;
	}
	while(!fin.eof()){
		fin>>HT[i].parent>>HT[i].lchild>>HT[i].rchild;
		i++;
	}
	cout<<"已從文件獲取哈弗曼樹!"<<endl;
	fin.close();
}

void Encoding(HuffmanTree HT,HuffmanCode HC,int n){
	cout<<"正在從文件ToBeTran.txt讀取要編碼的數(shù)據(jù)..."<<endl;
	ifstream fin("ToBeTran.txt");
	ofstream fout("CodeFile.txt");
	if(!fin) {cout<<"文件讀取失敗!"<<endl; return; }
	char c;  int i=0;
	while(!fin.eof()){
		c=fin.get();
		for(int i=1;i<=n;++i){
			if(c==HT[i].ch) {fout<<HC[i]; cout<<HC[i]<<endl; break;}
		}//for
		if(i==n+2){
			cout<<"字符編碼失敗,編碼表中不存在此字符,程序結(jié)束!"<<endl;
			return;
		}//if
	}//while
	cout<<"編碼成功!結(jié)果已經(jīng)存入CodeFile.txt文件中!"<<endl;
	fin.close();
	fout.close();
}//end of Encoding

void Decoding(HuffmanTree HT,int n){
	ifstream fin("CodeFile.txt");
	ofstream fout("TextFile.txt");
    if(!fin) {cout<<"文件讀取失敗!"<<endl; return; }
	char c;
	int fen=2*n-1;   //flag始終跟在fen變量的后邊第一個,用于輸出
	while(!fin.eof()){
		c=fin.get();	
	    if(c=='0')
			fen=HT[fen].lchild;
	    else
			fen=HT[fen].rchild;
		if(!HT[fen].lchild){    //判斷是否已經(jīng)到葉子結(jié)點,是的話輸出此葉子結(jié)點的字符
		    cout<<HT[fen].ch;
			fout<<HT[fen].ch;
			fen=2*n-1; //當譯出一個字符時,fen回到樹根,準備下一個譯碼
		}      
	}//while
	cout<<"\n譯碼成功!結(jié)果已經(jīng)存入TextFile.txt文件中!"<<endl;
	fin.close();
	fout.close();
}//end of Decoding 

void Print(){
	char c;
	int counter=1;
	ifstream fin("CodeFile.txt");
	ofstream fout("CodePrin.txt");
	while(!fin.eof()){
		c=fin.get();
		if(counter%50==1){ cout<<"\n";  fout<<"\n";}
        cout<<c;   fout<<c;
		counter++;
	}
	cout<<"\n編碼成功保存在“CodePrin.txt”文件中!"<<endl;
	fin.close();
	fout.close();
}//end of Print

//按樹狀打印輸出二叉樹的元素,i表示結(jié)點所在層次,初次調(diào)用時i=0
void Print_BiTree(HuffmanTree T,int m,int i)
{
	
    if(T[m].rchild){
        //m=T[m].rchild;
		Print_BiTree(T,T[m].rchild,i+1);
	}
    for(int j=1;j<=i;j++) cout<<" ";    //打印i個空格以表示出層次
    cout<<T[m].weight<<" "<<endl;  //打印T元素,換行
    if(T[m].lchild) {
		//m=T[m].lchild;
		Print_BiTree(T,T[m].lchild,i+1);}
}//Print_BiTree

void main(){
	HuffmanTree HT;
	HuffmanCode HC;
	int n,i=0;
	char choice;
	while(1){
	    cout<<"☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆"<<endl
            <<"☆     歡迎使用哈弗曼編/譯器,請選擇(I,E,D,P,T,Q ):      ☆"<<endl
	        <<"☆           I.初始化                                     ☆"<<endl
		    <<"☆           E.編碼                                       ☆"<<endl
		    <<"☆           D.譯碼                                       ☆"<<endl
		    <<"☆           P.印代碼文件                                 ☆"<<endl
		    <<"☆           T.印哈弗曼樹                                 ☆"<<endl
	        <<"☆           Q.退出系統(tǒng)                                   ☆"<<endl
		    <<"☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆"<<endl;
	    cin>>choice;
		switch(choice){
		case 'i':
		case 'I':{
            cout<<"請輸入您要建立的曼哈頓樹的葉子個數(shù)n:"<<endl;
			cin>>n;
			InitHuffman(HT,HC,n); 
			}break;
		case 'e':
		case 'E':{
			cout<<"哈弗曼樹是否已在內(nèi)存中?(y/n)"<<endl;
			char ans;
			cin>>ans;
			if(ans=='y'||ans=='Y')
                Encoding(HT,HC,n);
			else{
				cout<<"正在從文件讀取哈弗曼樹..."<<endl;
				ReadHuffman(HT,HC,n);
				Encoding(HT,HC,n);
				 }
				 }
			break;
		case 'd':
		case 'D':
			Decoding(HT,n);
			break;
		case 'p':
		case 'P':
			Print();
			break;
		case 't':
		case 'T':
			Print_BiTree(HT,2*n-1,i);
			break;
		case 'q':
		case 'Q':
			return;
			break;
		default: cout<<"選擇錯誤!"<<endl;
		}
	}	
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩有码一区二区三区| 欧美一级二级在线观看| 成人av午夜电影| aaa国产一区| 欧美亚一区二区| 欧美日韩国产综合草草| 精品动漫一区二区三区在线观看| 精品理论电影在线| 一区二区三区在线视频观看58| 亚洲高清免费观看高清完整版在线观看 | 午夜精品免费在线| 激情综合色播激情啊| 色婷婷久久99综合精品jk白丝| 色94色欧美sute亚洲线路一久| 91精品国产一区二区| 国产精品午夜免费| 中文字幕一区二区三| 亚洲精品亚洲人成人网在线播放| 亚洲高清视频在线| 99re8在线精品视频免费播放| 久久综合久久久久88| 日本美女视频一区二区| 欧美亚一区二区| 亚洲欧美一区二区久久| 国产91在线看| 欧美精品一区二区三区四区 | 99re6这里只有精品视频在线观看| 日韩一区二区三区视频在线| 亚洲黄一区二区三区| 成人午夜在线视频| 精品剧情v国产在线观看在线| 亚洲综合丁香婷婷六月香| 成人性色生活片| 欧美mv和日韩mv的网站| 蜜臀av性久久久久蜜臀aⅴ流畅| 欧美中文字幕久久| 日本一不卡视频| 欧美日韩国产中文| 亚洲高清免费在线| 欧美精品日韩一区| 日本aⅴ精品一区二区三区| 欧美一区二区三区婷婷月色| 日韩不卡免费视频| 日韩午夜激情av| 久久99精品视频| 久久久久久久久免费| 成人动漫视频在线| 亚洲欧美成aⅴ人在线观看| 在线免费一区三区| 免费观看成人鲁鲁鲁鲁鲁视频| 亚洲精品一区二区在线观看| 99re热这里只有精品视频| 亚洲欧美日韩一区| 日韩精品影音先锋| 成人avav影音| 午夜精品一区在线观看| 久久亚洲免费视频| 欧美无人高清视频在线观看| 日本免费新一区视频| 亚洲国产精品av| 欧美精品在线一区二区三区| 黄色资源网久久资源365| 亚洲精品免费播放| 欧美久久久一区| 亚洲国产高清aⅴ视频| 99精品久久99久久久久| 亚洲国产综合视频在线观看| 欧美天堂一区二区三区| 91麻豆精品在线观看| 亚洲国产精品久久不卡毛片 | 91精品在线观看入口| 丝袜美腿成人在线| 日韩一区二区免费视频| 五月天中文字幕一区二区| 不卡一区二区在线| 亚洲精品成人少妇| 色婷婷狠狠综合| 亚洲免费观看高清完整| 一本大道久久a久久精品综合| 夜夜操天天操亚洲| 日韩视频免费直播| 六月丁香婷婷色狠狠久久| 日韩精品一区二区三区在线播放 | 欧美午夜精品一区二区三区| 视频在线在亚洲| 26uuu国产一区二区三区| av午夜一区麻豆| 狠狠狠色丁香婷婷综合激情 | 精品国产伦一区二区三区观看方式| 老色鬼精品视频在线观看播放| 精品国产露脸精彩对白| 欧美日韩久久一区| 国产99久久久国产精品潘金网站| 国产精品国产三级国产普通话三级 | 日本美女一区二区| 欧美a一区二区| 依依成人精品视频| 国产日韩精品一区二区三区在线| 91久久精品一区二区三| 国产综合色精品一区二区三区| 国产欧美日韩另类视频免费观看| 欧美欧美欧美欧美首页| 在线视频欧美区| 国产成人精品免费视频网站| 免费的国产精品| 五月天精品一区二区三区| 亚洲乱码国产乱码精品精可以看| 国产三级一区二区三区| 日韩一级片在线播放| 欧美疯狂做受xxxx富婆| 欧美乱妇15p| 精品欧美一区二区久久| 久久精品亚洲精品国产欧美kt∨| 久久综合色之久久综合| 欧美大片日本大片免费观看| 日韩欧美国产综合| 久久久久久久久久久99999| 欧美大白屁股肥臀xxxxxx| 欧美电影免费提供在线观看| 欧美va亚洲va香蕉在线 | 日韩一区国产二区欧美三区| 欧美岛国在线观看| 欧美国产欧美综合| 亚洲免费高清视频在线| 免费观看在线综合| 国产精品91xxx| 色天使色偷偷av一区二区| 欧美人xxxx| **性色生活片久久毛片| 婷婷久久综合九色综合绿巨人| 狠狠v欧美v日韩v亚洲ⅴ| 91亚洲精品一区二区乱码| 日韩视频免费观看高清完整版在线观看 | 91久久精品一区二区二区| 26uuu欧美| 五月婷婷色综合| 丁香六月久久综合狠狠色| 欧美视频第二页| 亚洲少妇中出一区| 成人免费视频视频| 久久这里只有精品视频网| 丝袜a∨在线一区二区三区不卡| 高清shemale亚洲人妖| 欧美一区二区三区电影| 亚洲一二三区不卡| 成人精品免费视频| 久久综合色之久久综合| 美国欧美日韩国产在线播放 | 欧美精品久久99| 亚洲欧美激情一区二区| 波多野结衣亚洲一区| 久久久久久久久97黄色工厂| 狠狠色综合播放一区二区| 日韩视频在线永久播放| 久久er精品视频| 精品国产乱码久久久久久蜜臀 | 亚洲最快最全在线视频| 色综合婷婷久久| 亚洲一卡二卡三卡四卡无卡久久| 欧美亚洲尤物久久| 激情文学综合丁香| 亚洲欧洲无码一区二区三区| 色美美综合视频| 免费日本视频一区| 中文字幕日韩欧美一区二区三区| 国产91精品久久久久久久网曝门 | 欧美另类videos死尸| 美女高潮久久久| 国产欧美一区二区精品仙草咪| 欧美中文字幕一区二区三区| 欧美午夜精品电影| 蜜桃久久久久久| 手机精品视频在线观看| 日韩成人免费在线| 蜜臀av性久久久久蜜臀aⅴ四虎 | 精品91自产拍在线观看一区| 99精品视频中文字幕| 久久99精品国产麻豆婷婷洗澡| 欧美激情资源网| 欧美三区在线观看| 成人午夜大片免费观看| 免费成人你懂的| 亚洲综合在线五月| 中文字幕人成不卡一区| 欧美精品一区二区三区四区| 欧美伊人久久大香线蕉综合69 | 欧美一区二区三区在| 欧美日韩一区二区三区免费看| 色综合久久88色综合天天免费| 国产成人av一区二区三区在线| 国产一区二区不卡| 国产综合色视频| 国产麻豆日韩欧美久久| 成人一区二区视频| 色中色一区二区| 欧美日韩你懂得| 91麻豆精品91久久久久同性| 日韩欧美亚洲一区二区| 欧美国产日本韩| 日韩精品久久久久久|