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

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

?? hufftree.cpp

?? 哈夫曼編碼、譯碼程序
?? CPP
字號:
#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#define MAXNUM 27

class HuffNode
{
public:
	char data;
	int weight;
	int father;
	int lc;
	int rc;
};
class HuffNodeCode
{
public:
	char data;
	char code[MAXNUM];
};
int Selete2Small(HuffNode *htree,int k,int *s1,int *s2);
int HufftreeCreate(HuffNode *htree,int n)
{
	int s1,s2,i;
	s1=s2=0;
	for(i=n+1;i<2*n;i++)
	{//選擇兩個父為0,權最小的樹的下標
		Selete2Small(htree,i-1,&s1,&s2);
		htree[i].data=NULL;
	//置新父節點權值
		htree[i].weight=htree[s1].weight+htree[s2].weight;
	//置根無父
		htree[i].father=0;
	//置兒子指示	
		htree[i].lc=s1;
		htree[i].rc=s2;
		htree[s1].father=i;
		htree[s2].father=i;
	}
return 0;
};

int Selete2Small(HuffNode *htree,int k,int *s1,int *s2)
{
	int i,j;
	if (k<2) return -1;
	*s1=0;*s2=0;
	//令s1,s2分別指向htree中最前面的兩個無父節點元素
	
	for (j=1;j<=k;j++)
	{
		if(htree[j].father!=0) continue;
		if(*s1==0) *s1=j;
		else {*s2=j;break;}
	}
	if(*s1==0||*s2==0) return -1;//表示htree中只有一棵樹
	if(htree[*s1].weight>htree[*s2].weight)
	{
		i=*s1;*s1=*s2;*s2=i;}
	for(i=j+1;i<=k;i++) //j從上段程序的值開始
	{
		if(htree[i].father!=0) continue;
		if(htree[i].weight<htree[*s1].weight)
		{
			*s2=*s1;
			*s1=i;
		}
		else
			if(htree[i].weight<htree[*s2].weight) *s2=i;
	}
	return 0;
}
//列表輸出哈夫曼樹
void PrintHtree(HuffNode *htree,int n)
{
	cout<<"\n輸出哈夫曼樹結構:"<<endl;
	cout<<"序號"<<"  "<<"節點數據"<<"  "<<"權重"<<"  "<<"父親節點"<<"  "<<"左孩子"<<"  "<<"右孩子"<<endl;
	for(int i=1;i<=2*n-1;i++)
	{
		cout<<i<<"\t"<<htree[i].data<<"\t"<<htree[i].weight<<"\t"<<htree[i].father<<"\t"<<htree[i].lc<<"\t"<<htree[i].rc<<endl;
	}
}
//哈夫曼樹編碼
void HufftreeCode(HuffNode *htree,int n,HuffNodeCode *pcode)
{
	int i,j,k,m;
	HuffNode *curr;
	for(i=1;i<=n;i++)
	{
		curr=&htree[i];
		j=MAXNUM-1;
		k=i;
		pcode[i].data=htree[i].data;
		do 
		{
			if(n<=1) 
			{
				pcode[i].code[j]='0';
				return;
			}
			m=curr->father;
			curr=&htree[m];
			if(curr->lc==k) 
			{
				pcode[i].code[j]='0';
			}
			else
				if(curr->rc==k)
				{
					pcode[i].code[j]='1';
				}
				k=m;
				j=j-1;
		}while(curr->father!=0);
        if(curr->lc==k) pcode[i].code[j]='0';
		else
			if(curr->rc==k) pcode[i].code[j]='1';	
	}
}
//緊縮編碼表
void HuffOrder(HuffNodeCode *htreecode,HuffNodeCode *htreecdout,int n)
{
	int i,j,k,kk;
	for(i=1;i<=n;i++)
	{
		htreecdout[i].data=htreecode[i].data;
	    j=0;
		while((htreecode[i].code[j]==NULL)&&(j<MAXNUM))	{j+=1;}
		kk=0;
		for(k=j;k<MAXNUM;k++)
		{
	    	htreecdout[i].code[kk]=htreecode[i].code[k];
		    kk+=1;
		}
		if(kk<MAXNUM)
		{
			for(k=kk;k<MAXNUM;k++) htreecdout[i].code[k]=NULL;
		}
	}
}
//對輸入字符串編碼
void StrCodeing(char *str,int n,HuffNodeCode *pcode)
{
	int i,j,k,m,flag;
	k=0;
	m=strlen(str);
	for(i=0;i<m;i++)
	{
		flag=0;
		for(j=1;j<=n;j++)
		{
			if(pcode[j].data==str[i]) 
			{
				cout<<pcode[j].code;
				flag=1;
				break;
			}
		}
		//控制輸出
		k+=strlen(pcode[j].code);
		if(k>=50) {k=0;cout<<endl;}
				
	    if(flag==0) 
		{
			cout<<"字符串中含有不能編碼的字符!"<<endl;
			exit(1);
		}
	}
}

void PrintCode(HuffNodeCode *htreecdout,int n)
{
	cout<<"輸出哈夫曼樹編碼; "<<endl;
	for(int i=1;i<=n;i++)
	{
		cout<<htreecdout[i].data<<"  :   "<<htreecdout[i].code<<endl;
	}
}

//二進制譯碼
void StrConcodeing(char *chr,int n,HuffNode *htree)
{
	int i=0,m;
	m=2*n-1;
	while(chr[i]!='\0')
	{
		
		if (chr[i]=='0')
		{
			m=htree[m].lc;
		}
		else if(chr[i]=='1')
		{
			m=htree[m].rc;
		}
	    if(htree[m].lc==0) 
		{
			cout<<htree[m].data;
			m=2*n-1;
		}
		i+=1;
	}
}

//主程序
void main()
{
	int n,i,sele;
    char str1[100];
	char str2[1000];
    char chr[1];
    cout<<"輸入字符集大小:";
	cin>>n;
	HuffNode *htree=(HuffNode *) malloc(2*n*sizeof(HuffNode));
	HuffNodeCode *htreecode=(HuffNodeCode *) malloc((n+1)*sizeof(HuffNodeCode));
	HuffNodeCode *htreecdout=(HuffNodeCode *) malloc((n+1)*sizeof(HuffNodeCode));
	//對第htree[0]單元置初值
	htree[0].data=NULL;
	htree[0].father=htree[0].lc=htree[0].rc=htree[0].weight=0;
	for(i=1;i<=n;i++)
	{
		cout<<"\n輸入第"<<i<<"個字符:"<<endl;
		gets(chr);
		htree[i].data=chr[0];
		//cin>>htree[i].data;
		cout<<"\n輸入字符\""<<chr[0]<<"\"的權值:";
		cin>>htree[i].weight;
		htree[i].father=htree[i].lc=htree[i].rc=0;
	}
	//編碼數組初始化
	for(i=1;i<=n;i++)
	{
		for(int j=0;j<MAXNUM;j++)
		{
			htreecode[i].code[j]=NULL;
		}
	}
	//構造哈夫曼樹
	HufftreeCreate(htree,n);
	//列表輸出哈夫曼樹結構
	PrintHtree(htree,n);		
	//哈夫曼樹編碼
	HufftreeCode(htree,n,htreecode);
	//將編碼正序緊縮存入htreecdout中
	HuffOrder(htreecode,htreecdout,n);
	//輸出字符編碼	
	PrintCode(htreecdout,n);
	while(1)
	{
        cout<<"\n------操作表------"<<endl;	
		cout<<"1   輸入字符串,編寫二進制碼; "<<endl;
		cout<<"2   輸入二進制數據,譯碼輸出; "<<endl;
		cout<<"3   退出; "<<endl;		 
		cout<<"請選擇操作:"<<endl;
	    cin>>sele;
		switch(sele)
		{
		case 1:
			{
				cout<<"請輸入要編碼的字符串:"<<endl;
			    gets(str1);
				cout<<"輸入的字符串為:"<<str1<<endl;
				//編碼
				cout<<"字符串的二進制編碼為:"<<endl;
                StrCodeing(str1,n,htreecdout);
				break;
			}
		case 2:
			{	
    			cout<<"請輸入要譯碼的二進制編碼:"<<endl;
			    gets(str2);
				cout<<"輸入的字符串為:"<<str2<<endl;
				//譯碼
				cout<<"二進制字符串的原碼為:"<<endl;
				StrConcodeing(str2,n,htree);
				break;			
			}
		case 3: exit(1);
		}
	}
}


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲国产精品99久久久久久久久 | 欧美日韩国产综合一区二区三区| 国产欧美视频一区二区| 国产精品小仙女| 国产喷白浆一区二区三区| 成人手机在线视频| 亚洲乱码中文字幕| 9191久久久久久久久久久| 免费看欧美女人艹b| 久久色.com| 成人黄色网址在线观看| 一区二区久久久久| 日韩一区二区免费在线电影| 国产精品一区在线观看乱码| 国产精品成人免费精品自在线观看| 色综合久久综合中文综合网| 亚洲成国产人片在线观看| 日韩欧美一卡二卡| 国产99久久久久久免费看农村| 中文字幕一区二区三区精华液 | 精品久久久久99| 成人网页在线观看| 亚洲va韩国va欧美va| 欧美精品一区二区三区一线天视频| www.欧美亚洲| 日韩精品欧美成人高清一区二区| 久久久久久亚洲综合| 99精品视频中文字幕| 日韩av电影免费观看高清完整版| 久久精品夜夜夜夜久久| 欧洲视频一区二区| 国产精品69久久久久水密桃| 亚洲最新在线观看| 久久久久久久免费视频了| 91福利在线免费观看| 在线亚洲+欧美+日本专区| 日韩激情一区二区| 中文字幕一区二| 欧美一级专区免费大片| 97精品久久久午夜一区二区三区| 美女视频免费一区| 一区二区三区资源| 国产婷婷一区二区| 欧美一区二区二区| 色婷婷综合在线| 国产成+人+日韩+欧美+亚洲| 首页亚洲欧美制服丝腿| 综合分类小说区另类春色亚洲小说欧美| 91精品国产aⅴ一区二区| 99re成人在线| 国产成人综合精品三级| 秋霞午夜av一区二区三区| 亚洲美女偷拍久久| 国产午夜亚洲精品不卡| 欧美一区二区三区免费大片| 91视频一区二区| 国产成人在线视频免费播放| 日本美女一区二区三区| 亚洲图片欧美视频| 亚洲精品写真福利| 国产精品免费视频观看| 久久久精品2019中文字幕之3| 欧美一级免费大片| 欧美日本精品一区二区三区| 91影视在线播放| a级高清视频欧美日韩| 国产精品一区三区| 国产又黄又大久久| 久久se这里有精品| 男男成人高潮片免费网站| 亚洲国产成人高清精品| 亚洲伦理在线免费看| 成人高清免费观看| 国产成人自拍网| 高清免费成人av| 国产成人亚洲综合a∨猫咪| 久久电影网电视剧免费观看| 免费在线观看精品| 精品在线视频一区| 国产在线视频一区二区三区| 激情另类小说区图片区视频区| 裸体歌舞表演一区二区| 精品一二三四在线| 国产精品综合在线视频| 国产成人在线网站| av在线一区二区三区| 不卡电影一区二区三区| 91亚洲男人天堂| 色婷婷狠狠综合| 欧美日韩成人在线一区| 91精品国产91久久久久久一区二区 | 国产老肥熟一区二区三区| 国产在线精品一区二区夜色| 国产精品中文有码| eeuss影院一区二区三区| 91国偷自产一区二区使用方法| 91黄色免费观看| 欧美日韩精品一区二区三区 | 91精选在线观看| 精品久久久久久久久久久院品网| 国产亚洲视频系列| 中文字幕亚洲成人| 亚洲成人动漫在线免费观看| 精品午夜久久福利影院| 成人av动漫网站| 欧美伦理电影网| 久久一区二区视频| 18欧美亚洲精品| 人禽交欧美网站| 国产很黄免费观看久久| 91久久香蕉国产日韩欧美9色| 在线观看91精品国产麻豆| 久久久影院官网| 一区二区在线观看免费视频播放| 奇米色777欧美一区二区| 成人性生交大片免费看视频在线 | 国产乱一区二区| 欧美主播一区二区三区| 2020国产精品自拍| 亚洲另类春色国产| 国产在线精品一区二区三区不卡| 色哟哟欧美精品| 久久先锋影音av鲁色资源网| 亚洲一区视频在线| 高潮精品一区videoshd| 555www色欧美视频| 中文字幕日本不卡| 黑人巨大精品欧美黑白配亚洲| 在线观看网站黄不卡| 久久亚洲一区二区三区四区| 亚洲国产一二三| 成人激情文学综合网| 制服丝袜中文字幕一区| 国产精品高清亚洲| 国产一区二区中文字幕| 欧美日韩美女一区二区| 国产精品乱人伦中文| 男人的天堂亚洲一区| 在线精品视频免费播放| 日本一区二区成人| 久久99精品国产.久久久久久| 日本韩国欧美一区二区三区| 国产日产欧美一区二区三区| 免费观看一级欧美片| 欧美三级在线看| 亚洲色图另类专区| 成人性生交大片免费看中文网站| 精品免费99久久| 奇米一区二区三区av| 欧美日韩一区二区三区四区 | 国产亚洲va综合人人澡精品| 日韩avvvv在线播放| 欧美自拍偷拍一区| 亚洲人午夜精品天堂一二香蕉| 成人永久aaa| 国产调教视频一区| 国产精品综合二区| 久久久亚洲高清| 国产精品一区免费视频| 久久综合九色综合97婷婷| 久久精品99久久久| 日韩女优电影在线观看| 琪琪久久久久日韩精品| 91精品国产欧美一区二区18| 日韩av在线播放中文字幕| 69堂亚洲精品首页| 奇米综合一区二区三区精品视频 | 日韩精品乱码免费| 91.com视频| 在线看日本不卡| 亚洲小少妇裸体bbw| 欧美午夜不卡在线观看免费| 亚洲精品免费一二三区| 色婷婷久久久亚洲一区二区三区| 亚洲人123区| 在线看一区二区| 日韩精品欧美成人高清一区二区| 欧美精品v日韩精品v韩国精品v| 偷拍亚洲欧洲综合| 欧美大白屁股肥臀xxxxxx| 精品一区二区在线视频| 国产欧美日韩精品a在线观看| 粉嫩蜜臀av国产精品网站| 中文字幕第一区二区| 色综合亚洲欧洲| 亚洲va天堂va国产va久| 欧美电影免费观看高清完整版在线| 精品在线一区二区| 国产精品家庭影院| 欧美午夜一区二区| 蜜臀精品一区二区三区在线观看 | 欧美在线免费观看视频| 亚洲妇女屁股眼交7| 日韩精品一区国产麻豆| 国产精品亚洲午夜一区二区三区 | av电影天堂一区二区在线| 一级日本不卡的影视| 91精品国产91热久久久做人人| 国产一区二区精品在线观看| 亚洲免费观看视频|