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

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

?? huffmantree.cpp

?? Huffman 編碼 對文件的讀入然后根據內容進行編碼然后譯碼
?? CPP
字號:
#include <fstream>
#include <string>
#include <iostream>
#include <iomanip>

using namespace std;

const int MAXLEN = 20;
const int MAXNUM = 10000;

class node
{
private:
	char cha;
	int weight;
	node *parent;
	node *lchild, *rchild;
	bool intree;
	node *pre, *next;
	bool cflag;
	char code[MAXLEN];
public:
	node(int w=0, char ch='\0')
	{
		weight = w;
		cha = ch;
		parent = lchild = rchild = NULL;
		intree = false;
		pre = next = NULL;
		cflag = false;
		code[0]='\0';
	}
	~node(){}
	friend class tree;
};


class tree
{
private:
	node *headleaf;
	node *headnoleaf;
public:
	tree();
	~tree();
	int code(char *filename);
	void show();
	int coding(char *filein, char *fileout);
	int encoding(char *filein, char *fileout);
};

tree::tree()
{
	headleaf = new node(MAXNUM);
	headleaf->pre = headleaf;
	headleaf->next =  headleaf;

	headnoleaf = new node(MAXNUM);
	headnoleaf->pre = headnoleaf;
	headnoleaf->next =  headnoleaf;
}

tree::~tree()
{
	node *i, *ndelete;

	for(i=headleaf->next;i!=headleaf;)
	{
		i->pre->next = i->next;
		i->next->pre = i->pre;
		ndelete = i;
		i = i->next;
		delete ndelete;
	}
	delete headleaf;

	for(i=headnoleaf->next;i!=headnoleaf;)
	{
		i->pre->next = i->next;
		i->next->pre = i->pre;
		ndelete = i;
		i = i->next;
		delete ndelete;
	}
	delete headnoleaf;
}

int tree::code(char *filename)
{
	ifstream fin(filename);
	if(!fin)
    {
        cout << "Cannot open input file "<<filename<<"." << endl;
        return 1;
    }

	node *newnode;
	node *i;
	char ch;

	while(!fin.eof())
	{
		fin>>ch;
		//search(ch)
		for(i=headleaf->next;i!=headleaf;i=i->next)
		{
			if(i->cha==ch)
			{
				i->weight++;
				break;
			}
		}

		if(i==headleaf)
		{
			newnode = new node(1,ch);
			headleaf->pre->next = newnode;
			newnode->pre = headleaf->pre;
			headleaf->pre = newnode;
			newnode->next = headleaf;
		}
		fin.get(ch);
		fin.seekg(-1,ios::cur);	
	}
	fin.close(); //構造葉子節點的雙向鏈表

	//1最小,2次之
	node *node1, *node2;

	while(1)
	{
		node1 = headleaf;
		node2 = headleaf;
		for(i=headleaf->next;i!=headleaf;i=i->next)
		{
			if(!(i->intree)&&i->weight<node2->weight)
			{
				if(i->weight<node1->weight)
				{
					node2 = node1;
					node1 = i;
				}
				else 
					node2 = i;
			}
		}
		for(i=headnoleaf->next;i!=headnoleaf;i=i->next)
		{
			if(!(i->intree)&&i->weight<node2->weight)
			{
				if(i->weight<node1->weight)
				{
					node2 = node1;
					node1 = i;
				}
				else
					node2 = i;
			}
		}//找到weight最小的兩個節點

		if(node2==headleaf)
			break;

		newnode = new node(node1->weight+node2->weight);
		newnode->lchild = node1;
		newnode->rchild = node2;
		node1->parent = newnode;
		node2->parent = newnode;
		node1->intree = true;
		node2->intree = true;//將兩個最小節點插到樹結構中

		newnode->next = headnoleaf;
		newnode->pre = headnoleaf->pre;
		headnoleaf->pre->next = newnode;
		headnoleaf->pre = newnode;//將非葉子節點插到非葉子節點的鏈表中去
	}//構造huffman樹

	if(headnoleaf->pre!=headnoleaf)
		i = headnoleaf->pre;
	else	//針對只有一個元素的特殊情況
	{
		i = headleaf->next;
		i->code[0] = '1';
		i->code[1] = '\0';
		i->cflag = true;
		return 0;
	}

	i->cflag = true;
	int i_code;

	while(1)
	{
		for(;i->lchild;i=i->lchild)
		{
			for(i_code=0;i->code[i_code]!='\0';i_code++)
				i->lchild->code[i_code] = i->code[i_code];
			i->lchild->code[i_code++] = '1';
			i->lchild->code[i_code] = '\0';
			i->lchild->cflag = true;
		}
		while(1)
		{
			i = i->parent;
			if(!i)
				return 0;
			if(i->rchild&&!(i->rchild->cflag))
			{
				for(i_code=0;i->code[i_code]!='\0';i_code++)
					i->rchild->code[i_code] = i->code[i_code];
				i->rchild->code[i_code++] = '0';
				i->rchild->code[i_code] = '\0';
				i->rchild->cflag = true;
				i = i->rchild;
				break;
			}
		}
	}//對已經構造好的huffman樹的各個位置進行編碼,左為1右為0

	return 0;
}


void tree::show()
{
	node *i;

	for(i=headleaf->next;i!=headleaf;i=i->next)
		cout<<i->cha<<"("<<i->weight<<"):"<<i->code<<endl;

	return;
}

int tree::coding(char *filein, char *fileout)
{
	ifstream fin(filein);
	if(!fin)
    {
        cout << "Cannot open input file "<<filein<<"." << endl;
        return 1;
    }
	ofstream fout(fileout);
	if(!fout)
    {
        cout << "Cannot open output file "<<fileout<<"." << endl;
        return 1;
    }

	node *i;
	char ch;
	while(!fin.eof())
	{
		fin>>ch;
		//search(ch)
		for(i=headleaf->next;i!=headleaf;i=i->next)
		{
			if(i->cha==ch)
			{
				fout<<i->code;
				break;
			}
		}
		fin>>ch;
		fin.seekg(-1,ios::cur);
	}
	fin.close();
	fout.close();

	return 0;
}

int tree::encoding(char *filein, char *fileout)
{
	ifstream fin(filein);
	if(!fin)
    {
        cout << "Cannot open input file "<<filein<<"." << endl;
        return 1;
    }
	ofstream fout(fileout);
	if(!fout)
    {
        cout << "Cannot open output file "<<fileout<<"." << endl;
        return 1;
    }

	node *i;
	char ch;
	char incode[MAXLEN]="";
	int i_incode;


	while(!fin.eof())
	{
		fin>>ch;
		
		for(i_incode=0;incode[i_incode]!='\0';i_incode++);
		incode[i_incode++] = ch;
		incode[i_incode] = '\0';

		//search(code)
		for(i=headleaf->next;i!=headleaf;i=i->next)
		{
			//issame(i->code,incode)
			for(i_incode=0;incode[i_incode]!='\0'&&i->code[i_incode]!='\0';i_incode++)
				if(incode[i_incode]!=i->code[i_incode])
					break;
			if(incode[i_incode]=='\0'&&i->code[i_incode]=='\0')
			{
				fout<<i->cha;
				incode[0]='\0';
				break;
			}
		}
		fin.get(ch);
		fin.seekg(-1,ios::cur);
	}
	fin.close();
	fout.close();

	return 0;

}

int main()
{
	tree file1;
	file1.code("file1.txt");
	file1.coding("file1.txt","file1_1.txt");
	file1.encoding("file1_1.txt","file1_2.txt");
	file1.show();
	return 0;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧洲精品一区二区精品久久久| 欧美色偷偷大香| 久久久不卡网国产精品一区| 日韩一区二区三区在线视频| www.色综合.com| 国产91富婆露脸刺激对白| 国产一区高清在线| 欧美日韩一区视频| 久久久国产精华| 91年精品国产| 欧美男女性生活在线直播观看| 欧美福利视频导航| 91美女在线视频| 91国产精品成人| 色一情一伦一子一伦一区| 精品视频一区三区九区| 91 com成人网| 日韩av一区二区三区| 美国三级日本三级久久99| 日韩福利电影在线观看| 亚洲欧美激情插| 一区二区欧美精品| 激情小说欧美图片| 久久精品一区蜜桃臀影院| 色婷婷亚洲一区二区三区| 国产精品18久久久久| 日韩国产欧美在线播放| 日韩黄色片在线观看| 国产一区二区三区综合| 成人av在线资源网站| 欧美三级视频在线| 精品免费日韩av| 国产精品福利一区二区| 午夜激情一区二区三区| 国产精品91xxx| 欧美性猛交一区二区三区精品| 欧美午夜片在线观看| 精品91自产拍在线观看一区| 亚洲精品成a人| 国模套图日韩精品一区二区| 一本到高清视频免费精品| 欧美精品一区二区三| 亚洲男人的天堂av| 精品影视av免费| 欧美亚洲国产一区二区三区| 在线播放中文一区| 国产三级精品三级在线专区| 亚洲天堂2014| 国产在线观看一区二区| 精品视频色一区| 国产精品久久久久久亚洲伦 | 色94色欧美sute亚洲线路二 | 久久av老司机精品网站导航| av不卡一区二区三区| 日韩精品一区二区三区视频| 亚洲成人精品一区二区| 日韩有码一区二区三区| 99久久国产综合精品麻豆| 欧美一级欧美三级在线观看| 一区av在线播放| 91丨porny丨蝌蚪视频| 久久色视频免费观看| 日本美女一区二区三区视频| 99re6这里只有精品视频在线观看| 欧美一区二区不卡视频| 一级做a爱片久久| 成人av网站在线观看免费| 精品久久国产字幕高潮| 日韩精品高清不卡| 欧美午夜一区二区| 亚洲综合偷拍欧美一区色| 成人国产电影网| 国产精品系列在线| 国产凹凸在线观看一区二区| 久久久蜜桃精品| 国产老肥熟一区二区三区| 精品国产免费人成电影在线观看四季| 天天影视色香欲综合网老头| 欧美亚洲一区二区在线观看| 亚洲人成电影网站色mp4| 成人性生交大片免费| 国产精品美女久久久久久久| av在线一区二区| 亚洲精品写真福利| 欧美在线观看视频一区二区三区| 综合久久综合久久| 色婷婷国产精品综合在线观看| 国产精品网站在线观看| jlzzjlzz亚洲日本少妇| 亚洲欧美在线视频观看| 91成人免费网站| 亚洲v中文字幕| 日韩欧美国产一区在线观看| 紧缚奴在线一区二区三区| 久久久久久久久久久电影| 99国产精品99久久久久久| 亚洲综合激情网| 日韩一区二区精品在线观看| 国产一区二区精品久久| 国产精品高清亚洲| 欧美日本精品一区二区三区| 老司机精品视频导航| 国产欧美一区二区三区鸳鸯浴 | 99久久综合国产精品| 国产激情一区二区三区桃花岛亚洲| 国产一区二区三区国产| 色综合激情五月| 一区二区三区国产| 毛片一区二区三区| 成人av在线资源网站| 一本在线高清不卡dvd| 欧美精品99久久久**| 久久精品人人爽人人爽| 亚洲成a人片在线观看中文| 国产精品一品视频| 亚洲高清免费观看高清完整版在线观看 | 日韩视频在线你懂得| 日韩欧美黄色影院| 日韩高清国产一区在线| 久久综合视频网| 777色狠狠一区二区三区| 亚洲一级二级在线| 亚洲日本电影在线| 国产欧美日韩精品一区| 欧美猛男超大videosgay| 欧美日韩国产免费一区二区| 在线观看不卡视频| 国产很黄免费观看久久| 亚洲福利视频三区| 国产亚洲精品bt天堂精选| 欧美三级电影一区| av激情综合网| 国产精品一级在线| 日本91福利区| 亚洲成人av一区二区| 亚洲男人的天堂av| 国产精品久久久久9999吃药| 毛片av一区二区三区| 337p日本欧洲亚洲大胆精品 | 国产精品18久久久久久久网站| 国产亚洲欧美在线| 91色乱码一区二区三区| 国产成人鲁色资源国产91色综 | 午夜伦欧美伦电影理论片| 一区二区三区加勒比av| 日本女优在线视频一区二区| 国产在线一区二区综合免费视频| 亚洲午夜成aⅴ人片| 中文字幕一区在线观看视频| 国产麻豆欧美日韩一区| 青青草成人在线观看| 亚洲成a人v欧美综合天堂下载| 亚洲一区在线视频观看| 一区二区三区中文字幕电影| 成人欧美一区二区三区1314| 亚洲欧洲精品天堂一级| 国产精品成人免费| 亚洲精品综合在线| 亚洲高清不卡在线| 丝袜亚洲另类丝袜在线| 日韩福利视频网| 国产一区欧美一区| 国产91精品精华液一区二区三区 | 亚洲欧美精品午睡沙发| 亚洲欧美成人一区二区三区| 亚洲狠狠丁香婷婷综合久久久| 亚洲精品成人a在线观看| 天天色 色综合| 另类综合日韩欧美亚洲| 中文无字幕一区二区三区| 亚洲国产美女搞黄色| 成a人片亚洲日本久久| 9i在线看片成人免费| 91丨九色丨国产丨porny| 欧洲视频一区二区| 欧美一级视频精品观看| 久久亚洲私人国产精品va媚药| 国产欧美视频一区二区| 亚洲精品亚洲人成人网在线播放| 亚洲不卡av一区二区三区| 国产福利一区在线观看| 99国产精品久| 欧美一区二区大片| 国产精品久久久久久久久晋中| 亚洲精品欧美二区三区中文字幕| 天天av天天翘天天综合网| 国产在线不卡一区| 色菇凉天天综合网| 精品黑人一区二区三区久久| 亚洲天堂免费在线观看视频| 免费精品视频在线| 99国产精品久| www国产成人| 亚洲一二三四久久| 丰满亚洲少妇av| 欧美福利一区二区| 亚洲欧美日韩在线| 狠狠色丁香久久婷婷综合丁香| 色噜噜狠狠色综合中国| 26uuu精品一区二区在线观看|