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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? huffman.cpp

?? Huffman無損數據壓縮解縮算法,自己做的!
?? CPP
字號:
#include <stdio.h> 
#include <stdlib.h> 
#include <conio.h> 
#include <string> 
#include <fstream>
#include <queue>
#include <stack>
#include <iostream>

using namespace std; 

#define MAX_SIZE 256

struct huffman_node 
{ 
     char id; 
     int freq; 
	 string code;
	 int mark;
     huffman_node *left, *right, *parent;
	 huffman_node():id('a'), freq(0),left(0), right(0), parent(0),mark(0){};
}; 

typedef huffman_node* node_ptr; 

class huffman { 
protected: 
	huffman_node dictionary[MAX_SIZE];
   	huffman_node* node_array [MAX_SIZE]; 
   	fstream in_file,out_file; 
   	node_ptr child, parent ,root; 
   	char id; 
	int count;
   	string in_file_name2; 

   class compare 
   { 
      public: 
			bool operator() ( const node_ptr& c1,const node_ptr& c2 ) const 
			{ return (*c1).freq > (*c2).freq; } 
    }; 

    priority_queue< node_ptr, vector<node_ptr>, compare > pq; 

    // Postcondition: The node_array, including the frequency of each character, has been created from the input file. 
    void create_node_array(); 

public: 
	 huffman() :id('a'), child(0),parent(0),root(0){};
	 // Postcondition: this huffman object has been initialized from in_file_name and out_file_name. 
	 huffman (string in_file_name, string out_file_name); 

     // Postcondition: the priority queue has been created. 
	 void create_pq(); 

     // Postcondition: the Huffman tree has been created. 
	 void create_huffman_tree(); 

     // Postcondition: the Huffman codes have been calculated. 
     void calculate_huffman_codes(); 

     // Postcondition: the Huffman codes and encoded message have been saved to a file.  
     void save_to_file(); 
}; 


void huffman::create_node_array()
{
	int pos = (int)id&0x0ff;     //是下表未整數
	if(!node_array[pos]){
			node_ptr tmp = new huffman_node;
			tmp->id=id;
			node_array[pos] = tmp; 
			(node_array[pos]->freq)++;
			count++;
		}
		else
			(node_array[pos]->freq)++;
}

huffman::huffman(string in_file_name, string out_file_name)
{ 
	in_file_name2 = in_file_name;

	in_file.open(in_file_name.c_str(), fstream::in | ios::binary);  //只讀方式打開一個文件

	if(!in_file)  
	{ 
		cout<<"\nCan not open file0!\n"<<endl; 
		getch(); 
		return; 
	} 

	out_file.open(out_file_name.c_str(), ios::out | ios::binary); 
	if(!out_file)  
	{ 
		cout<<"\nCan not open file!\n"<<endl; 
		getch(); 
		return; 
	} 
	
	count=0;
	for(int i=0; i<256; i++) node_array[i] = NULL;
	while(in_file.get(id))                       //循環將文件內的字符輸入到od中 
	{
		create_node_array();
	}
	in_file.close(); 
}

void huffman::create_pq()
{
	int j=0;
	for(int i=0 ;i<256 ; i++)
	{
		while(!node_array[i]) i++;
		if(j < count){
		pq.push(node_array[i]);
		j++;}
	}
}

void huffman::create_huffman_tree()
{
	node_ptr p,q; 

	//p、q初值為頭結點后的兩個結點,即最小權結點  
	while(pq.size() > 1)
	{
		p=pq.top();         //取出將最小的兩個結點 
		pq.pop();

		q=pq.top();
		pq.pop();

		node_ptr newnode = new huffman_node;
		root = newnode; 
		newnode->mark=0; //標記

		newnode->left=p; //取最小的兩個結點作為新結點的左、右孩子 
		newnode->right=q; 
		p->parent=newnode; 
		q->parent=newnode; 
		newnode->freq = p->freq + q->freq; //權值等于孩子權值相加 
		  
		pq.push(root);	 //將新結點插入原隊列的相應位置 		
	} 
	return; 
}


void huffman::calculate_huffman_codes()
{             
	node_ptr ptr = root;              //從樹的根結點開始
	if(root==NULL) 
	{ 
		cout<<"要壓縮的文件是空的!"<<endl; 
		exit(0); 
	} 
	else 
	{	
		int i=0,j=0;
		string s[256];     //用于統計每個字符的哈夫曼編碼 
		while(ptr->left && ptr->right && ptr->mark==0) 
		{ 
			while(ptr->left && ptr->left->mark==0) 
			{  
				ptr = ptr->left; 		
				s[j] =s[j]+'0';

				if(!ptr->left && !ptr->right) //判斷是否為葉子 
				{   
					dictionary[i].id=ptr->id;//給字典賦字符值  
					dictionary[i].code = s[j];
					i++;j++;
					ptr->mark=1; 
					ptr=root;
				} 
			} 
			if(ptr->right && ptr->right->mark==0) 
			{ 
				ptr=ptr->right;  
				s[j] = s[j] +'1';
			} 
			if(!ptr->left && !ptr->right) 
			{  
				dictionary[i].id=ptr->id; 
				dictionary[i].code = s[j];
				i++; j++;
				ptr->mark=1;
				ptr=root;   
			}
			
			if(ptr->left->mark==1 && ptr->right->mark==1)//如果左右孩子都已標志
				{ 
					j++;
					ptr->mark=1; 
					ptr=root; 
				} 		
		}
	} 
}

void deleteTree(node_ptr ptr) 
{ 
	node_ptr tmp=ptr;
	if(tmp) 
	{ 
		deleteTree(tmp->left); //第歸處理左子樹 
		deleteTree(tmp->right); //第歸處理右子樹 
		delete tmp; //釋放結點 
	} 
}


void huffman::save_to_file()
{
	fstream in_file2;
	in_file2.open(in_file_name2.c_str(), ios::in | ios::binary);  //只讀方式打開一個文件
	if(!in_file2)  
	{ 
		cout<<"\nCan not open file1!\n"<<endl; 
		getch(); 
		return; 
	} 
	for(int i=0; i<count ;i++)   //寫入字典
	{
		out_file.put(dictionary[i].id);
		for(int j=0;dictionary[i].code[j]!='\0' ; j++)
		out_file.put(dictionary[i].code[j]);
		out_file.put('\0');
	}

	char buf='0';
	int  jud=0;
	while(in_file2.get(id))                     //循環將文件內的字符輸入到od中 
	{
		for(int i=0;i<count;i++)
		{
			if(dictionary[i].id==id)
			{
				for(int j=1;dictionary[i].code[j-1];j++,jud++) 
				{ 
					if(dictionary[i].code[j-1]=='1') 
					{ 
						buf<<=1; 
						buf++; 
					} 
					if(dictionary[i].code[j-1]=='0') 
					{ 
						buf<<=1;  
					} 
					if(jud%8==0) 
					out_file.put(buf);
				}
			}
		}
	}
	deleteTree(root);
	in_file2.close(); 
	out_file.close();
}

int main(int argc, char *argv[]) 
{ 
    if(argc!=3) 
	{ 
		cout <<"Usage:\n\t huffmancoding inputfile outputfile"<<endl; 
		//exit(1);
		char path[50]="1.txt"; //文件的讀路徑 
		cout<<"請輸入要壓縮的文件地址:(需擴展名)"<<endl; 
		//gets(path); 
		argv[1] = path;
		
		char path2[50]="5.txt"; //文件的讀路徑
		cout<<"請輸入要存放的文件地址:(需擴展名)"<<endl; 
		//gets(path2); 
		argv[2] = path2;
	} 

    huffman h(argv[1], argv[2]); 

    h.create_pq(); 

    h.create_huffman_tree(); 

   h.calculate_huffman_codes(); 

    h.save_to_file(); 

    cout << endl; 

    return 0; 
} 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲电影中文字幕在线观看| 91精品国产综合久久精品麻豆| 国产91露脸合集magnet | 亚洲h动漫在线| 欧美人狂配大交3d怪物一区 | 亚洲国产电影在线观看| 成人免费看片app下载| 亚洲精品第一国产综合野| 欧美日韩国产a| 精品一区二区在线视频| 欧美国产激情二区三区| 色综合色综合色综合色综合色综合| 亚洲图片欧美视频| 欧美www视频| 不卡一区二区在线| 丝袜国产日韩另类美女| 久久久久久久电影| 在线视频国内一区二区| 免费高清视频精品| 国产精品美女久久久久久久网站| 欧美亚洲一区二区在线| 国产伦精品一区二区三区免费| 中文字幕一区av| 欧美一区二区福利视频| 成人免费高清在线| 青娱乐精品在线视频| 国产精品免费丝袜| 欧美精品久久99| 成人免费观看视频| 蜜臀99久久精品久久久久久软件| 国产精品成人免费在线| 91精品在线观看入口| 99久久久免费精品国产一区二区| 免费高清在线视频一区·| 亚洲天堂精品视频| 精品国产一区二区精华| 欧美综合一区二区| 国产成人精品影视| 天堂一区二区在线免费观看| 国产精品麻豆久久久| 日韩精品在线网站| 欧美性一二三区| 成人免费看黄yyy456| 美女一区二区在线观看| 亚洲激情在线激情| 日本一区二区动态图| 日韩欧美综合一区| 欧美日韩极品在线观看一区| 成人的网站免费观看| 久久99精品一区二区三区三区| 亚洲欧洲中文日韩久久av乱码| 久久久亚洲午夜电影| 欧美一区二区精品在线| 欧美酷刑日本凌虐凌虐| 色乱码一区二区三区88| 国产99久久久国产精品潘金| 精品一区二区三区欧美| 香蕉成人伊视频在线观看| 综合av第一页| 中文字幕不卡的av| 国产色一区二区| xfplay精品久久| 久久综合九色欧美综合狠狠 | 久久av老司机精品网站导航| 亚洲主播在线观看| 亚洲免费av高清| 国产精品初高中害羞小美女文| 国产日韩欧美精品综合| 久久免费美女视频| 久久夜色精品一区| 精品福利在线导航| 久久综合一区二区| 久久影院视频免费| 久久精品在线观看| 国产日韩欧美在线一区| 久久精品一区二区三区av| 欧美成人午夜电影| 欧美成人猛片aaaaaaa| 久久综合色之久久综合| 久久人人97超碰com| 久久久久久久久蜜桃| 国产欧美一区二区在线观看| 国产日产欧产精品推荐色| 中文字幕国产一区| 国产精品美日韩| 亚洲最大成人网4388xx| 亚洲高清一区二区三区| 婷婷久久综合九色国产成人 | 久久久久免费观看| 久久久国产精品午夜一区ai换脸| 国产欧美一区二区精品婷婷| 一区二区中文字幕在线| 亚洲电影一级黄| 免费观看在线色综合| 国产精品一区二区三区乱码| 成a人片国产精品| 欧美网站一区二区| 欧美va亚洲va香蕉在线| 国产精品美女久久久久久久| 亚洲一区二区三区自拍| 轻轻草成人在线| 成人午夜免费视频| 欧美影院一区二区三区| 91精品国产手机| 欧美国产一区二区| 首页国产欧美日韩丝袜| 国产在线精品一区二区不卡了| youjizz国产精品| 欧美日韩久久久久久| 久久久国产一区二区三区四区小说| 国产精品久久久久久久久久免费看| 亚洲午夜精品久久久久久久久| 久久99精品国产91久久来源| 99久久精品费精品国产一区二区| 欧美手机在线视频| 久久久99久久| 午夜精彩视频在线观看不卡| 国产麻豆91精品| 欧美日韩国产另类一区| 中文字幕精品一区二区精品绿巨人 | 91福利国产精品| 欧美成人在线直播| 亚洲欧美日韩国产一区二区三区 | 精品处破学生在线二十三| 亚洲精品国产一区二区精华液| 日韩高清一区二区| 色一情一乱一乱一91av| 精品国产一区久久| 亚洲成a人片在线观看中文| 国产成人免费在线观看不卡| 欧美人xxxx| 亚洲免费色视频| 国产精品一区在线观看乱码| 欧美日韩国产在线播放网站| 中文在线一区二区| 久久精品噜噜噜成人av农村| 欧美午夜精品一区| 国产精品入口麻豆原神| 精品综合久久久久久8888| 欧美网站大全在线观看| 中文字幕在线不卡视频| 国产成人精品影视| 欧美精品一区二区三区高清aⅴ| 亚洲国产欧美日韩另类综合| 丁香亚洲综合激情啪啪综合| 久久久另类综合| 久久99日本精品| 日韩欧美国产三级| 亚洲va欧美va国产va天堂影院| 99精品偷自拍| 欧美国产97人人爽人人喊| 国产麻豆欧美日韩一区| 精品国产亚洲在线| 喷白浆一区二区| 欧美人牲a欧美精品| 午夜在线电影亚洲一区| 欧美性猛交xxxxxxxx| 亚洲制服丝袜av| 色综合天天综合色综合av| 亚洲一区二区三区在线| 国产网红主播福利一区二区| 秋霞影院一区二区| 在线电影国产精品| 三级精品在线观看| 欧美美女直播网站| 亚洲成人免费看| 欧美日韩精品免费| 天天综合天天做天天综合| 欧美主播一区二区三区美女| 亚洲自拍偷拍欧美| 欧美日韩成人一区| 日韩黄色免费电影| 精品日韩在线观看| 国产成人综合精品三级| 欧美激情一区在线| 成人aaaa免费全部观看| 中文字幕日韩精品一区| 色综合视频在线观看| 亚洲一二三级电影| 日韩一级片网址| 国产美女精品人人做人人爽| 国产三级精品三级| 99久久夜色精品国产网站| 夜夜嗨av一区二区三区中文字幕| 欧美日韩日日骚| 美女脱光内衣内裤视频久久网站 | 国产精品每日更新在线播放网址| www.66久久| 亚洲国产婷婷综合在线精品| 欧美久久久久久蜜桃| 麻豆精品在线看| 国产亚洲午夜高清国产拍精品| www.日韩精品| 亚洲福中文字幕伊人影院| 欧美一级二级在线观看| 成人精品免费视频| 亚洲成人免费av| 久久综合九色综合欧美就去吻| 本田岬高潮一区二区三区| 亚洲午夜视频在线观看|