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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? h.cpp

?? 用C++寫(xiě)的huffman編碼
?? CPP
字號(hào):
#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include <fstream.h>
#include <iomanip.h>

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

typedef char **HuffmanCode;

void Select(HuffmanTree HT,int i,int &s1,int &s2);
void HuffmanCoding(HuffmanTree HT,HuffmanCode &HC,int n);
void ReadCode(HuffmanTree &HT,int n);
int  intchar();
void FinHuffmanTree(fstream &fin,HuffmanTree HT,int n);
void TextCoding(fstream &intxt,fstream &outxt,HuffmanTree HT,HuffmanCode HC);
int  getnum(HuffmanTree HT,char ch);
void Decoding(fstream &intxt,fstream &outcode,HuffmanTree HT);
void PrintCode();
void PrintTree(HuffmanTree HT,int n,int &space);

void main()
{
	int n,p,markI,markD,markC;
	markI=markD=markC=0;
	char select[5];
	HuffmanTree HT;
	HuffmanCode HC;
	HT=NULL;
	fstream FinHT,FoutHT,Ftxt,FCode,FDeCode;
//	textmode(3)
//	clrscr();
	cout<<"\t\t ______________________________ "<<endl;
	cout<<"\t\t             1初始化            "<<endl;            
	cout<<"\t\t             2建哈夫曼樹(shù)        "<<endl;
	cout<<"\t\t             3譯碼              "<<endl;
	cout<<"\t\t             4查看編碼          "<<endl;
    cout<<"\t\t             5導(dǎo)入文件          "<<endl;
	cout<<"\t\t             6退出              "<<endl;
	cout<<"\t\t ______________________________ "<<endl;
	cout<<"\t\t請(qǐng)選擇:";
    cin>>select;
	while((strlen(select)>1)&&(select[0]!='C'&&select[0]!='I'&&select[0]!='D'&&select[0]!='P'&&select[0]!='T'&&select[0]!='E'))
	{
		cout<<"Incorrect input!";
		cout<<"Input again:";
		cin>>select;
	}
	while (select[0]!='6')
	{
		switch(select[0])
		{
		case '1':
			markI=1;
			cout<<"\t常用字符個(gè)數(shù):";
			cout<<"\tn=:";
			n=intchar();
			ReadCode(HT,n);
			HuffmanCoding(HT,HC,n);
			FinHuffmanTree(FinHT,HT,n);
			break;
		case '2':
			markC=1;
			if(!markI)
			{
				HTNode one;
				FoutHT.open("hfmtree.txt",ios::in);
				FoutHT.read((char*)&one,sizeof(HTNode));
				n=one.weight;
				HT=(HuffmanTree)malloc(2*n*sizeof(HTNode));
				for(int i=1;i<=2*n-1;i++)
					FoutHT.read((char*)&HT[i],sizeof(HTNode));
				FoutHT.close();
				HuffmanCoding(HT,HC,n);
			}
			TextCoding(Ftxt,FCode,HT,HC);
			break;
		case '3':
			markD=1;
			if((!markI)&&(!markC))
			{
				HTNode one;
				FoutHT.open("hfmtree.txt",ios::in);
				FoutHT.read((char*)&one,sizeof(HTNode));
				n=one.weight;
				HT=(HuffmanTree)malloc(2*n*sizeof(HTNode));
				for(int i=1;i<=2*n-1;i++)
					FoutHT.read((char*)&HT[i],sizeof(HTNode));
				FoutHT.close();
				HuffmanCoding(HT,HC,n);
			}
			Decoding(FCode,FDeCode,HT);
			break;
		case '4':
			PrintCode();
			break;
		case '5':
			if((!markI)&&(!markC)&&(!markD))
			{
				HTNode one;
				FoutHT.open("hfmtree.txt",ios::in);
				FoutHT.read((char*)&one,sizeof(HTNode));
				n=one.weight;
				HT=(HuffmanTree)malloc(2*n*sizeof(HTNode));
				for(int i=1;i<=2*n-1;i++)
					FoutHT.read((char*)&HT[i],sizeof(HTNode));
				FoutHT.close();
				HuffmanCoding(HT,HC,n);
				while(HT[p].parent!=0)
					p=HT[p].parent;
//			cout<<"\nHUM:"<<p;
			}
			int m=30;
			PrintTree(HT,p,m);
		}
		cout<<"\nItem:";
		    cin>>select;
		while((strlen(select)>1)&&(select[0]!='C'&&select[0]!='I'
			&&select[0]!='D'&&select[0]!='P'&&select[0]!='T'&&select[0]!='E'))
		{
			cout<<"Incorrect input!";
			cout<<"Input again:";
			cin>>select;
		}
	}
}

int intchar()
{
	char tcin[5];
	int i,mark=1;
	cin>>tcin;
	while(mark)
	{
		mark=0;
		for (i=0;i<strlen(tcin);i++)
			if(tcin[i]<'0'||tcin[i]>'9')
				mark=1;
		if(mark)
		{
			cout<<"Incorrect input!"<<endl;
			cout<<"Input again:";
			cin>>tcin;
		}
	}
	return(atoi(tcin));
}


void ReadCode(HuffmanTree &HT,int n)
{
	char inch;
	int m;
	m=2*n-1;
	HT=(HuffmanTree)malloc((m+1)*sizeof(HTNode));
	for(int i=0;i<=m;i++)
		HT[i].ch=HT[i].lchild=HT[i].parent=HT[i].rchild=HT[i].weight=0;
	cout<<"\t請(qǐng)輸入字符和權(quán)值!"<<endl;
	for(i=1;i<=n;i++)
	{
		cout<<"\tNO."<<setw(2)<<i<<" Char:";
		cin>>inch;
		cout<<"\tNO."<<setw(2)<<i<<" weight:";
		HT[i].weight=intchar();
		 
	}
}

void HuffmanCoding(HuffmanTree HT,HuffmanCode &HC,int n)
{
	int i,s1,s2,start;
	char *cd;
//	HuffmanTree p;
/*	HT=(HuffmanTree)malloc((m+1)*sizeof(HTNode));
	for (p=HT,i=1;i<=n;++i,++p)
		p[i].parent=p[i].rchild=p[i].lchild=0;
	for (;i<=m;++i,++p)
		p[i].ch=p[i].weight=p[i].parent=p[i].rchild=p[i].lchild=0;    */
	HT[0].ch=HT[0].lchild=HT[0].parent=HT[0].rchild=0;
	HT[0].weight=n;
	if(HT[1].parent==0)
	{
		for(i=n+1;i<=2*n-1;++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*));
	char ooo[6]="Error";
	HC[0]=ooo;
	cd=(char*)malloc(n*sizeof(char));
	cd[n-1]='\0';
	for (i=1;i<=n;++i)
	{
		start=n-1;
		for (int 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));
		strcpy(HC[i],&cd[start]);
	}
	free(cd);
}

void Select(HuffmanTree HT,int i,int &s1,int &s2)
{
	int m=1;
	s1=s2=0;
	while (!s1&&m<=i)
	{
		if (HT[m].parent==0)
			s1=m;
		m++;
	}
	while (!s2&&m<=i)
	{
		if (HT[m].parent==0)
			s2=m;
		m++;
	}
	while(m<=i)
	{
		if(HT[m].parent==0)
		{
			if(HT[m].weight<HT[s1].weight)
			{
				s2=s1;
				s1=m;
			}
			if(HT[m].weight<HT[s2].weight)
				s2=m;
		}
		m++;
	}
}

void FinHuffmanTree(fstream &fin,HuffmanTree HT,int n)
{
	fin.open("hfmtree.txt",ios::out|ios::trunc);
	for(int i=0;i<=2*n-1;i++)
		fin.write((char*)&HT[i],sizeof(HTNode));
	fin.close();
}

int getnum(HuffmanTree HT,char ch)
{
	int i=1;
	while(i<=HT[0].weight&&HT[i].ch!=ch)
		i++;
	if(i>HT[0].weight)
	{
		cout<<"\nError! '"<<ch<<"' is not involved!";
			return (0);
	}
	return(i);
}

void TextCoding(fstream &intxt,fstream &outxt,HuffmanTree HT,HuffmanCode HC)
{
	char txt;
	int i;
	intxt.open("tobetrans.txt",ios::in);
	outxt.open("codefile.hfm",ios::out|ios::trunc);
	while(!intxt.eof())
	{
		intxt.get(txt);
		i=getnum(HT,txt);
		if(i)
			outxt.write(&(*HC[i]),strlen(HC[i]));
	}
	outxt.close();
	intxt.close();		
}

void Decoding(fstream &intxt,fstream &outcode,HuffmanTree HT)
{
	char txt;
	int i,p=1;
	while(HT[p].parent)
		p=HT[p].parent;
	intxt.open("codefile.hfm",ios::in);
	outcode.open("txtfile.txt",ios::out|ios::trunc);
	intxt.get(txt);
	while(!intxt.eof())
	{
		i=p;
		while((HT[i].lchild)&&(!intxt.eof()))
		{
			if(txt=='0')
				i=HT[i].lchild;
			else
				if(txt=='1')
					i=HT[i].rchild;
			intxt.get(txt);
		}
		outcode.put(HT[i].ch);
	}
	intxt.close();
	outcode.close();
}

void PrintCode()
{
	char print;
	fstream intxt,outxt;
	intxt.open("codefile.hfm",ios::in);
	outxt.open("codeprint.txt",ios::out|ios::trunc);
	while(!intxt.eof())
	{
		intxt.get(print);
		outxt.put(print);
		cout<<print;
	}
	intxt.close();
	outxt.close();
}

void PrintTree(HuffmanTree HT,int n,int &space)
{
	int mark;
	for(int i=0;i<space;i++)
		cout<<" ";
	space=space+4;
	cout<<HT[n].ch;
	for(int a=space+1;a<60;a++)
		cout<<"*";
	cout<<endl;
	mark=space;
	if(HT[n].lchild)
		PrintTree(HT,HT[n].lchild,space);
	space=mark;
	if(HT[n].rchild)
		PrintTree(HT,HT[n].rchild,space);
}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
av一区二区不卡| 国产精品自拍毛片| 精品国产一区二区三区久久影院 | 成人在线视频首页| 日韩制服丝袜av| 国产欧美日产一区| 日韩欧美中文字幕制服| 91麻豆.com| 国产不卡视频一区二区三区| 日本aⅴ免费视频一区二区三区| **网站欧美大片在线观看| 欧美v日韩v国产v| 欧美久久久影院| 色久综合一二码| 成人在线视频一区| 国产乱色国产精品免费视频| 日日欢夜夜爽一区| 亚洲综合清纯丝袜自拍| 国产精品无圣光一区二区| 亚洲精品一线二线三线无人区| 欧美三电影在线| 色婷婷综合久久久| 99视频超级精品| www.亚洲色图.com| 成av人片一区二区| 国产成人av影院| 国产精品综合二区| 久久精品国产77777蜜臀| 天堂蜜桃一区二区三区| 亚洲国产你懂的| 亚洲一区在线播放| 一级做a爱片久久| 一区二区三区四区中文字幕| 1024国产精品| 亚洲你懂的在线视频| 亚洲欧洲精品天堂一级| 中文字幕在线视频一区| 国产精品天干天干在观线| 国产婷婷一区二区| 国产日本亚洲高清| 国产精品毛片久久久久久久| 中文字幕 久热精品 视频在线| 亚洲国产高清在线观看视频| 国产精品久久久久久久久免费相片| 国产欧美精品一区二区三区四区| 国产精品视频线看| 国产精品毛片无遮挡高清| 亚洲欧美一区二区三区国产精品| **性色生活片久久毛片| 亚洲综合视频网| 视频一区欧美精品| 久久精品免费看| 国产激情视频一区二区三区欧美| 国产成人综合自拍| 91在线视频在线| 日本道色综合久久| 91精品国产综合久久久蜜臀图片| 欧美一区二区三区白人| 精品久久久久久无| 国产欧美日韩麻豆91| 亚洲欧洲av在线| 亚洲综合另类小说| 久久精品国产在热久久| 成人激情小说乱人伦| 日本精品一区二区三区高清 | 久久久777精品电影网影网| 中文字幕在线一区免费| 亚洲国产欧美另类丝袜| 黄色精品一二区| 99精品热视频| 制服丝袜激情欧洲亚洲| 久久久精品一品道一区| 一区二区三区高清| 美女被吸乳得到大胸91| 成人久久视频在线观看| 欧美亚洲愉拍一区二区| 精品国产乱子伦一区| 中文字幕一区二区三区蜜月| 亚洲高清免费观看高清完整版在线观看| 日韩福利视频导航| 国产·精品毛片| 欧美三级乱人伦电影| 久久婷婷久久一区二区三区| 亚洲精选一二三| 久久国产尿小便嘘嘘| 成人av电影在线播放| 欧美一区二区三区成人| 亚洲欧美电影一区二区| 韩国女主播一区二区三区| 色狠狠一区二区三区香蕉| 精品日产卡一卡二卡麻豆| 亚洲男帅同性gay1069| 国产乱子伦视频一区二区三区 | 91久久一区二区| 2024国产精品| 亚洲va天堂va国产va久| 国产999精品久久久久久绿帽| 欧美浪妇xxxx高跟鞋交| 中文字幕日韩欧美一区二区三区| 日本aⅴ免费视频一区二区三区| www.亚洲激情.com| 日韩免费看网站| 亚洲福利电影网| 成人激情图片网| 久久视频一区二区| 天天色天天爱天天射综合| 99久久免费国产| 久久久噜噜噜久久中文字幕色伊伊| 亚洲一线二线三线久久久| 懂色av一区二区三区免费看| 制服.丝袜.亚洲.中文.综合| 亚洲欧美另类久久久精品2019| 国产一区999| 精品国产免费一区二区三区香蕉| 亚洲国产精品一区二区www在线| aaa欧美色吧激情视频| 国产日韩综合av| 国产福利91精品一区| 欧美xxx久久| 免费久久99精品国产| 欧美性xxxxx极品少妇| 最新高清无码专区| 成人小视频免费在线观看| 欧美xfplay| 国产一区91精品张津瑜| 精品国产免费一区二区三区四区 | 麻豆久久久久久久| 91精品国产综合久久久蜜臀图片| 午夜影院久久久| 欧美日韩和欧美的一区二区| 亚洲高清中文字幕| 欧美日韩亚洲高清一区二区| 亚洲影院久久精品| 91福利小视频| 亚洲制服丝袜一区| 欧美日韩久久一区二区| 午夜激情一区二区三区| 欧美精品乱码久久久久久按摩| 亚洲午夜影视影院在线观看| 欧美色网站导航| 亚洲一区视频在线观看视频| 欧美人妖巨大在线| 秋霞国产午夜精品免费视频| 日韩欧美另类在线| 国产麻豆视频一区二区| 中文字幕国产精品一区二区| 91香蕉视频污| 亚洲综合视频在线| 91精品国产高清一区二区三区| 蜜臀a∨国产成人精品| 精品欧美一区二区三区精品久久| 国产一区啦啦啦在线观看| 国产欧美日韩久久| 色婷婷香蕉在线一区二区| 午夜精品一区二区三区三上悠亚| 欧美一区二区三区在线| 国产九色sp调教91| 亚洲乱码一区二区三区在线观看| 欧洲精品一区二区三区在线观看| 日韩成人免费在线| 久久久久久9999| 91小宝寻花一区二区三区| 香蕉av福利精品导航| 久久亚洲春色中文字幕久久久| 成人精品一区二区三区中文字幕| 亚洲乱码国产乱码精品精98午夜| 欧美日韩久久久久久| 国产精一区二区三区| 亚洲特黄一级片| 日韩一区二区在线看片| 成人精品视频一区二区三区| 亚洲伊人伊色伊影伊综合网| 精品国产髙清在线看国产毛片| 成人精品电影在线观看| 水野朝阳av一区二区三区| 久久久久久免费网| 欧美亚洲高清一区二区三区不卡| 麻豆精品国产传媒mv男同| 国产精品不卡在线| 日韩欧美黄色影院| 97se亚洲国产综合在线| 青青青伊人色综合久久| 国产精品久久精品日日| 欧美精品日韩一区| 成人黄色软件下载| 蜜桃视频第一区免费观看| 日韩伦理av电影| 欧美mv和日韩mv的网站| 在线亚洲一区观看| 国产剧情av麻豆香蕉精品| 午夜不卡av在线| 中文字幕日韩一区| 精品噜噜噜噜久久久久久久久试看| 91日韩精品一区| 国产成人免费在线观看| 美女在线视频一区| 亚洲一卡二卡三卡四卡无卡久久| 国产欧美一区二区精品秋霞影院| 欧美疯狂性受xxxxx喷水图片| 99精品桃花视频在线观看|