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

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

?? huffmandict.cpp

?? 有關(guān)huffman的程序?qū)Υ蠹覍W(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)有好處但不是所有人都用得上
?? CPP
字號(hào):
// HuffmanDict.cpp: implementation of the HuffmanDict class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "HuffmanTest.h"
#include "HuffmanDict.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

HuffmanDict::HuffmanDict()
{
	CachedNTT=NULL;
}

HuffmanDict::~HuffmanDict()
{
	delete[] CachedNTT;
}

HuffmanDict::NTTEntry *HuffmanDict::GetNTTable(unsigned int &OutStateCount)
{
	if (!CachedNTT)
		CachedNTT=GenerateNTT(GetEncodeDict(),CachedStateCount);

	OutStateCount=CachedStateCount;
	return CachedNTT;
}

unsigned short HuffmanDict::GetStats(unsigned char &MaxCodeLen, unsigned char &MinCodeLen)
{
	EncEntry *DictA=GetEncodeDict();
	
	unsigned int x;
	unsigned short SymbolCount=0;
	unsigned char MaxLen=0,MinLen=255;
	for (x=0; x<256; x++)
	{
		if (DictA[x].CodeLen)
		{
			SymbolCount++;

			if (DictA[x].CodeLen>MaxLen)
				MaxLen=DictA[x].CodeLen;
			else if (DictA[x].CodeLen<MinLen)
				MinLen=DictA[x].CodeLen;
		}
	}

	MaxCodeLen=MaxLen;
	MinCodeLen=MinLen;
	return SymbolCount;
}

HuffmanDict::NTTEntry *HuffmanDict::GenerateNTT(EncEntry *EncodeDict, unsigned int &OutStateCount)
{
	HNode *HuffRoot=new HNode;
	unsigned int NameCount=BuildHuffTree(EncodeDict,HuffRoot)+1;

	NTTEntry *RetTable=new NTTEntry[ NameCount << 8 ];

	BuildTTable(HuffRoot,NameCount,RetTable);
	delete HuffRoot;
	
	OutStateCount=NameCount;
	return RetTable;
}

unsigned char HuffmanDict::BuildHuffTree(EncEntry *SourceTable, HNode *TargetRoot)
{
	//Needed to name every node.
	TargetRoot->Symbol=0;

	unsigned char CurrName=0;
	unsigned int x;
	for (x=0; x<256; x++)
	{
		if (SourceTable[x].CodeLen)
			CurrName=BuildHuffTreeInternal(CurrName,x,&(SourceTable[x]),TargetRoot);
	}

	return CurrName;
}

unsigned char HuffmanDict::BuildHuffTreeInternal(unsigned char CurrName, unsigned char CurrSymbol, EncEntry *SourceEntry, HNode *TargetNode)
{
	if (SourceEntry->CodeLen==1)
	{
		//Create a leaf node.
		if (SourceEntry->Code >> 31)
		{
			TargetNode->Right=new HNode;
			TargetNode->Right->Symbol=CurrSymbol;
		}
		else
		{
			TargetNode->Left=new HNode;
			TargetNode->Left->Symbol=CurrSymbol;
		}

		return CurrName;
	}
	else
	{
		//Create an internal node.
		HNode *NewNode;
		if (SourceEntry->Code >> 31)
		{
			if (TargetNode->Right)
			{
				SourceEntry->Code<<=1;
				SourceEntry->CodeLen--;
				return BuildHuffTreeInternal(CurrName,CurrSymbol,SourceEntry,TargetNode->Right);
			}
			else
			{
				NewNode=new HNode;
				TargetNode->Right=NewNode;
			}
		}
		else
		{
			if (TargetNode->Left)
			{
				SourceEntry->Code<<=1;
				SourceEntry->CodeLen--;
				return BuildHuffTreeInternal(CurrName,CurrSymbol,SourceEntry,TargetNode->Left);
			}
			else
			{
				NewNode=new HNode;
				TargetNode->Left=NewNode;
			}
		}
		
		CurrName++;
		//NewNode->Parent=TargetNode;
		NewNode->Symbol=CurrName;

		SourceEntry->Code<<=1;
		SourceEntry->CodeLen--;
		return BuildHuffTreeInternal(CurrName,CurrSymbol,SourceEntry,NewNode);
	}
}

/*To access a table entry, address the table as follows:
OutTable[(CurrState << 8) + CodedByte].*/
void HuffmanDict::BuildTTable(HNode *SourceNode, unsigned char NameCount, NTTEntry *OutTable)
{
	unsigned int x,y;

	HNode *CurrStartNode;
	for (y=0; y<NameCount; y++)
	{
		CurrStartNode=LookupInternalNode(SourceNode,y);
		for (x=0; x<256; x++)
			FillTTEntry(SourceNode, CurrStartNode, x, &(OutTable[(y << 8)+x]) );
	}
}

void HuffmanDict::FillTTEntry(HNode *RootNode, HNode *StartNode, unsigned char EncodedByte, NTTEntry *OutEntry)
{
	for (char x=7; x>=0; x--)
	{
		//Traverse the tree further.
		if ( (EncodedByte >> x) & 1 )
			StartNode=StartNode->Right;
		else
			StartNode=StartNode->Left;

		if (!(StartNode->Left))		
		{
			//Output a symbol, then jump to the root.
			if (OutEntry->SymbolA)
			{
				unsigned char *TmpBuff=new unsigned char[OutEntry->SymbolCount+1];
				memcpy(TmpBuff,OutEntry->SymbolA,OutEntry->SymbolCount);

				TmpBuff[OutEntry->SymbolCount]=StartNode->Symbol;
				
				delete[] OutEntry->SymbolA;
				OutEntry->SymbolA=TmpBuff;
				OutEntry->SymbolCount++;
			}
			else
			{
				OutEntry->SymbolA=new unsigned char;			
				*(OutEntry->SymbolA)=StartNode->Symbol;
				OutEntry->SymbolCount=1;
			}

			StartNode=RootNode;
		}
	}
	OutEntry->NextNodeName=StartNode->Symbol;
}

HuffmanDict::HNode * HuffmanDict::LookupInternalNode(HNode *RootNode, unsigned char NodeName)
{
	if (RootNode->Symbol==NodeName)
		return RootNode;
	else
	{
		HNode *RetNode;
		//Call only if the child is an internal node
		if (RootNode->Left->Left)
		{
			RetNode=LookupInternalNode(RootNode->Left,NodeName);
			if (RetNode)
				return RetNode;
		}
		if (RootNode->Right->Left)
		{
			RetNode=LookupInternalNode(RootNode->Right,NodeName);
			if (RetNode)
				return RetNode;
		}

		return NULL;
	}
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
首页国产欧美日韩丝袜| a亚洲天堂av| 欧美伊人久久久久久久久影院| 国产精品入口麻豆九色| 成人av动漫网站| 亚洲精品少妇30p| 欧美日韩免费观看一区三区| 精品制服美女丁香| 中文字幕精品一区二区精品绿巨人| www.日韩精品| 91色在线porny| 日韩成人午夜电影| 国产欧美日韩激情| 欧美日韩国产精选| 成人国产精品免费观看动漫| 国产 欧美在线| 亚洲va韩国va欧美va精品| 精品国产伦一区二区三区免费| 成人性生交大合| 亚洲与欧洲av电影| 国产女主播视频一区二区| 国产欧美在线观看一区| 国产精品久久久久久户外露出| 91精品国产一区二区三区蜜臀 | 91麻豆免费视频| 色欧美88888久久久久久影院| 秋霞午夜av一区二区三区| 国产精品每日更新| 亚洲综合视频在线| 麻豆视频一区二区| 午夜一区二区三区在线观看| 久久久蜜臀国产一区二区| 欧美日韩国产高清一区| 精品国产乱码久久久久久闺蜜 | 国产一区二区三区免费在线观看| 无吗不卡中文字幕| 国内精品久久久久影院薰衣草| 日韩影院精彩在线| 懂色av一区二区三区免费观看| 色综合一区二区| 91在线精品一区二区| 成人免费视频app| 欧美三级日本三级少妇99| 久久久久久久综合日本| 亚洲少妇最新在线视频| 亚洲欧美另类久久久精品| 亚洲天堂久久久久久久| 久久国产精品无码网站| 国产一区在线观看麻豆| 97se狠狠狠综合亚洲狠狠| 欧美一级高清片在线观看| 91精品国产综合久久久久| 91精品欧美福利在线观看| 国产精品狼人久久影院观看方式| 视频一区二区国产| 91蜜桃网址入口| 国产网站一区二区三区| 亚洲视频在线一区| 国产综合色在线视频区| 欧美日本乱大交xxxxx| 18成人在线观看| 天天影视涩香欲综合网| 91视频免费播放| 国产精品视频一二三| 国产成人精品影院| 91在线国产观看| 国产精品色婷婷久久58| 国内外成人在线| 日韩欧美一级在线播放| 国产女同性恋一区二区| 国产麻豆欧美日韩一区| 精品捆绑美女sm三区| 国产精品国产自产拍高清av| 国产在线播精品第三| 日韩一区二区视频| 蜜臀av性久久久久av蜜臀妖精| 欧美日韩色一区| 视频一区二区欧美| 91精品国产综合久久香蕉的特点| 亚洲成av人影院| 777久久久精品| 性久久久久久久久久久久 | 亚洲影院免费观看| 色综合久久天天| 亚洲高清久久久| 成人自拍视频在线| 中文字幕av一区 二区| 成人黄色av电影| 一区免费观看视频| 欧美做爰猛烈大尺度电影无法无天| 欧美一级夜夜爽| 麻豆中文一区二区| 久久综合狠狠综合久久综合88| 亚洲第一综合色| 91精品久久久久久久91蜜桃| 久久99精品久久久久久动态图| 精品久久久久一区| 成人午夜电影久久影院| 18涩涩午夜精品.www| 在线观看亚洲精品视频| 日韩国产高清在线| 久久色在线观看| 色一区在线观看| 麻豆精品一区二区| 国产精品久久久久久福利一牛影视 | 亚洲v精品v日韩v欧美v专区| 日韩欧美高清一区| 国产精品一级黄| 欧美成人三级电影在线| 国产91高潮流白浆在线麻豆 | 一区二区三区久久| 国产精品白丝av| 亚洲人妖av一区二区| 9191精品国产综合久久久久久| 国产一区二区三区观看| 亚洲黄一区二区三区| 欧美zozo另类异族| 欧洲亚洲精品在线| 国产高清在线观看免费不卡| 亚洲一区国产视频| 久久久综合激的五月天| 欧美日韩一级二级三级| 国产精品一区二区你懂的| 亚洲国产精品久久艾草纯爱| 久久久噜噜噜久久中文字幕色伊伊| 欧美亚洲丝袜传媒另类| 国产福利一区在线| 三级久久三级久久| 亚洲精品日韩综合观看成人91| 久久久久久久久久看片| 欧美绝品在线观看成人午夜影视| 亚洲国产欧美另类丝袜| 日本一区二区三区国色天香| 555夜色666亚洲国产免| 欧洲另类一二三四区| 丁香激情综合五月| 国产自产高清不卡| 午夜欧美视频在线观看 | 91免费版在线看| 国产精品一区二区黑丝| 日韩在线一区二区| 亚洲影院免费观看| 天天操天天干天天综合网| 亚洲精品五月天| 国产欧美一区二区三区鸳鸯浴 | 国产精品初高中害羞小美女文| 日韩一区二区三区在线观看| 91亚洲永久精品| 99精品久久99久久久久| 国产高清一区日本| 另类小说色综合网站| 亚洲一区二区av在线| 亚洲精选视频在线| 国产精品二区一区二区aⅴ污介绍| 精品国产成人在线影院| 欧美不卡一区二区三区| 欧美一区二区精品| 欧美成人a∨高清免费观看| 日韩亚洲欧美中文三级| 欧美人动与zoxxxx乱| 欧美人体做爰大胆视频| 欧美视频在线不卡| 91性感美女视频| 成人免费视频免费观看| 成人av电影在线网| 不卡电影一区二区三区| 成人国产一区二区三区精品| 国产大片一区二区| 91丝袜国产在线播放| 在线一区二区三区四区五区| 亚洲一区二区三区国产| 亚洲h精品动漫在线观看| 天天综合色天天| 蜜桃视频一区二区三区| 国产老肥熟一区二区三区| 欧美性大战xxxxx久久久| 91黄视频在线| 日韩一级二级三级| 久久综合狠狠综合| 国产欧美一区二区精品婷婷| 中文字幕一区二区三区不卡 | 欧美日韩国产天堂| 日韩欧美美女一区二区三区| 精品国产99国产精品| 国产精品久久久久久久浪潮网站 | 欧美浪妇xxxx高跟鞋交| 欧美一区二区三区色| 国产欧美日韩中文久久| 亚洲风情在线资源站| 韩国三级在线一区| 91丨九色丨黑人外教| 日韩欧美中文一区二区| 国产精品人人做人人爽人人添| 亚洲宅男天堂在线观看无病毒| 麻豆高清免费国产一区| 91老师国产黑色丝袜在线| 欧美一区二区视频网站| 中文字幕一区日韩精品欧美| 日韩精品一级中文字幕精品视频免费观看 | 中文在线一区二区 |