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

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

?? huffmancoding.cpp

?? 霍夫曼編碼:包括畫出霍夫曼樹 編解碼等功能。簡單易用
?? CPP
字號:
/*Copyright by Shihang Zouzhen Xuwenjie
  May 4th 2008

  filename:Huffman coding
  Used for用來完成對輸入的一組字符串的哈夫曼編碼,譯碼,以及編寫哈夫曼樹的小程序
*/
#include<iostream.h>
#include<stdlib.h>
#define N 100
	int weighti[N];
    char zifui[N];
	int zifushumu;
typedef  struct{  
	 int  weight;
     int  parent,lchild,rchild;
	 char zifu;
}HTNode,*HuffmanTree;//動態(tài)分配數(shù)組存儲哈夫曼樹

typedef   struct{
	int start;
	char cd[N];
}HCNode,*Huffmancode;


#include "iostream.h"
#include "string.h"
#include <stdlib.h>
#define SMAX 100
#define CMAX 20
int ch;
int DEPTH;
class  hufftree;             //聲明
class  huffnode{
public:
	int	weight;
	int parent;
	int lchild;
	int rchild;
public:
	friend hufftree;
};
 
class huffcode{
private:
	int start;
	char data;
	char code[CMAX];
public:
	friend hufftree;
};
class hufftree{
public:
	int charnumber;
	char str[SMAX];
	char stack[CMAX];
	int *w;
	huffnode *ht;
	huffcode *hc;

	hufftree();
	~hufftree();
    void getstr();
	void getdawt();
    void huffcoding();
    void getout();
	void painttree();
	void TreePrinting();
};
hufftree::hufftree()
{charnumber=0;
w=NULL;
ht=NULL;
hc=NULL;
}

hufftree::~hufftree()
{

	delete []w;
	delete []ht;
	delete []hc;
}

void hufftree::getstr()               //獲得字符串
{
cout<<"請輸入一組字符串:";
  cin>>str;
}
void hufftree::getdawt()              //分辨字符類型以及權(quán)重
{
char *p;
int  wt[CMAX];
int top;
int strlength;
strlength=strlen(str);
top=0;
p=str;
if(strlen(str)<1) return;
for(int i=0;i<strlength;i++,p++) 
    {int tag=0;
     int j=0;
     while(tag==0&&j<=top){
		 if(*p==stack[j]) tag=1;
		 else j++;}
	 if(tag==0)
	 {stack[top]=*p;
	  wt[top]=1;
	  top++;}
	 else wt[j]++;}
zifushumu=charnumber=top;
hc=new huffcode[charnumber+1];
w=new int[charnumber];
for(i=0;i<charnumber;i++){
	weighti[i]=w[i]=wt[i];
	zifui[i]=hc[i+1].data=stack[i];}
	cout<<"字符數(shù)目:"<<charnumber<<endl;
	cout<<endl;
	cout<<"字符權(quán)重統(tǒng)計:"<<endl;

	
for(i=0;i<charnumber;i++){

	cout<<"字符:"<<hc[i+1].data<<' ';
	cout<<"權(quán)重:"<<w[i]<<endl;
	}

cout<<endl;
cout<<endl;


}

void gouzao(HuffmanTree &HT,char zifu[], int weight[], int n) 
{	// w存放n個字符的權(quán)值(均>0),構(gòu)造哈夫曼樹HT,
	// 并求出n個字符的哈夫曼編碼HC
	int i, k, l, m, r, s1, s2;
	if (n<=1) return;
	m=2*n-1;
	HT = (HuffmanTree)malloc((m+1) * sizeof(HTNode));  // 0號單元未用
	for (i=1; i<=n; i++) 
	{ 	HT[i].zifu=zifu[i];
		HT[i].weight=weight[i];//社有一組權(quán)值存放于數(shù)組中,通過數(shù)組weight[]傳遞進(jìn)來
		HT[i].parent=0;
		HT[i].lchild=0;
		HT[i].rchild=0;
	}
	for (i=n+1; i<=m; i++)
	{ 	HT[i].zifu='-';
		HT[i].weight=0;
		HT[i].parent=0;
		HT[i].lchild=0;
		HT[i].rchild=0;
	}
	for (i=n+1; i<=m; i++) 
	{  // 建哈夫曼樹
		// 在HT[1..i-1]中選擇parent為0且weight最小的兩個節(jié)點,
		// 其序號分別為s1和s2。
        s1=s2=32767;
        l=r=0;             /*l和r是最小權(quán)重的兩個節(jié)點位置*/
        for(k=1;k<=i-1;k++)
            if  (HT[k].parent==0)
                if(HT[k].weight<s1)
                {
                    s2=s1;
                    r=l;
                    s1=HT[k].weight;
                    l=k;
                }
                else if (HT[k].weight<s2)
                {
                    s2=HT[k].weight;
                    r=k;
                }

                HT[l].parent=i;
                HT[r].parent=i;
                HT[i].weight=HT[l].weight+HT[r].weight;
                HT[i].lchild=l;
                HT[i].rchild=r;
    }

}
	//--- 從葉子到根逆向求每個字符的哈夫曼編碼 ---
void HuffmanCoding(HuffmanTree &HT,char zifu[],int n)
{	HCNode hcd[N],d;
	int f,i,c,k;
	d.cd[n+1] = '\0';                         // 編碼結(jié)束符。
	for (i=1; i<=n; ++i) 
	{                  // 逐個字符求哈夫曼編碼
		d.start = n+1;                          // 編碼結(jié)束符位置
		for (c=i, f=HT[i].parent; f!=0; c=f, f=HT[f].parent) 
			// 從葉子到根逆向球編碼
			if (HT[f].lchild==c) d.cd[--d.start] = '0';
			else d.cd[--d.start] = '1';
			hcd[i]=d;}
    cout<<"輸出哈夫曼編碼: "<<endl;
    for(i=1;i<=n;i++)
    {
        cout<<zifu[i]<<": ";
		for(k=hcd[i].start;k<=n;k++)
        cout<<hcd[i].cd[k];
        cout<<endl;
    }
} // HuffmanCoding
void decode(HuffmanTree &HT,int m)
  {   int a=2*m-1;
	  int  i;
	  char b[N];
      i=0;        //從根節(jié)點開始往下搜索
	  cout<<"請輸入一串二進(jìn)制碼: ";
      cin>>b;    //讀入一個二進(jìn)制碼
	  cout<<"經(jīng)譯碼后為: ";
      while (b[i]!='\0')
	  {if(HT[a].lchild!=0)
         { if(b[i]=='0')  
				a=HT[a].lchild;
           else 
			    a=HT[a].rchild;
		   i++;}
       if(HT[a].lchild==0)       //tree[i] 是葉子節(jié)點
              { cout<<HT[a].zifu; a=2*m-1; }
	} cout<<endl;
}

void main()
{   cout<<"-------------------施行 鄒震 徐文杰 哈夫曼編碼------------------"<<endl;
    cout<<"-               Copyright by Shihang Zouzhen Xuwenjie          -"<<endl;
    cout<<"-          編碼規(guī)則:哈夫曼樹的左節(jié)點編0符,右節(jié)點編1符        -"<<endl;
	cout<<"-                             ^_^                              -"<<endl;
    cout<<"-                 先初始化,請錄入一組字符串                   -"<<endl;
	cout<<"----------------------------------------------------------------"<<endl;
	cout<<endl;
	int i,m,k;
	int j=1;
	int b;
	int weight[N];
    char zifu[N];
   hufftree hftree1;
   hftree1.getstr();
   hftree1.getdawt();
	//cin>>m;




for (i=1;i<=zifushumu;i++)
{
zifu[i]=zifui[i-1];
weight[i]=weighti[i-1];
}

	cout<<endl;
		cout<<"----------------------------------------------------------------"<<endl;
    cout<<"請選擇操作:  "<<endl;
	cout<<"         1.構(gòu)造哈夫曼樹"<<endl;
    cout<<"         2.輸出字符對應(yīng)的哈夫曼編碼"<<endl;
    cout<<"         3.輸入一串0 1代碼,進(jìn)行哈夫曼譯碼"<<endl;
	cout<<"         4.結(jié)束本程序"<<endl;
	cout<<"----------------------------------------------------------------"<<endl;
    cin>>i;
   	while(j!=0)
    {switch(i)
        {//case 1:
         




         case 1:
			HTNode *HT;
            gouzao(HT,zifu,weight,zifushumu);
	        cout<<"	節(jié)點	字符	權(quán)重	父節(jié)點	 左子節(jié)點  右子節(jié)點"<<endl;
			for (k=1;k<=2*zifushumu-1;k++)
			{ 
				 cout<<"	"<<k<<"	"<<HT[k].zifu<<"	"<<HT[k].weight<<"	"<<HT[k].parent;
				 cout<<"        "<<HT[k].lchild<<"         "<<HT[k].rchild<<endl;
			}
	        cout<<endl; 
    cout<<"請選擇操作:"<<endl;

    cout<<"         1.構(gòu)造哈夫曼樹"<<endl;
    cout<<"         2.輸出字符對應(yīng)的哈夫曼編碼"<<endl;
    cout<<"         3.輸入一串0 1代碼,進(jìn)行哈夫曼譯碼"<<endl;
	cout<<"         4.結(jié)束本程序"<<endl;
	cout<<"----------------------------------------------------------------"<<endl;
			cin>>i;
			j=1;
			break;
		 case 2:
            gouzao(HT,zifu,weight,zifushumu);
			HuffmanCoding(HT,zifu,zifushumu);
	        cout<<endl;
    cout<<"請選擇操作:"<<endl;

    cout<<"         1.構(gòu)造哈夫曼樹"<<endl;
    cout<<"         2.輸出字符對應(yīng)的哈夫曼編碼"<<endl;
    cout<<"         3.輸入一串0 1代碼,進(jìn)行哈夫曼譯碼"<<endl;
	cout<<"         4.結(jié)束本程序"<<endl;
	cout<<"----------------------------------------------------------------"<<endl;
			cin>>i;
			j=1;
			break;
		 case 3: 
            gouzao(HT,zifu,weight,zifushumu);
			decode(HT,zifushumu);
            cout<<endl;
    cout<<"請選擇操作:"<<endl;

    cout<<"         1.構(gòu)造哈夫曼樹"<<endl;
    cout<<"         2.輸出字符對應(yīng)的哈夫曼編碼"<<endl;
    cout<<"         3.輸入一串0 1代碼,進(jìn)行哈夫曼譯碼"<<endl;
	cout<<"         4.結(jié)束本程序"<<endl;
	cout<<"----------------------------------------------------------------"<<endl;
			cin>>i;
			j=1;
            break;
         case 4:
			cout<<"歡迎使用!"<<endl;
			j=0;
            break;
         default:
            cout<<"輸入有誤,重新輸入"<<endl;
			break;
        }
	} 
}


?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91电影在线观看| 国产精品色眯眯| 亚洲成年人网站在线观看| 91蝌蚪porny九色| 最近中文字幕一区二区三区| 99综合电影在线视频| 国产精品污网站| 91亚洲国产成人精品一区二三| 亚洲丝袜制服诱惑| 色综合天天天天做夜夜夜夜做| 亚洲日本va午夜在线影院| 色猫猫国产区一区二在线视频| 一区二区三区波多野结衣在线观看| 欧美色精品在线视频| 奇米在线7777在线精品| 欧美成人激情免费网| 国产成人av福利| 亚洲日本在线视频观看| 欧美日韩情趣电影| 久久不见久久见免费视频7| 日本一区二区三区在线不卡| 不卡的av中国片| 五月婷婷激情综合网| 精品国产不卡一区二区三区| 成人免费的视频| 午夜欧美在线一二页| 精品国产电影一区二区| 99精品视频免费在线观看| 婷婷夜色潮精品综合在线| 久久久久久久久久久电影| 91在线视频官网| 免费成人在线观看视频| 国产欧美一区二区精品性色超碰| 91国产免费观看| 国产真实乱子伦精品视频| 亚洲三级电影网站| 久久在线观看免费| 欧美调教femdomvk| 国产精品一区二区你懂的| 亚洲在线免费播放| 日本一区二区三区久久久久久久久不 | 久久久一区二区三区捆绑**| 91蜜桃视频在线| 国产一区999| 婷婷开心激情综合| 中文字幕欧美日韩一区| 欧美一区二区三区四区视频| 99精品热视频| 国产suv一区二区三区88区| 亚洲成人tv网| 亚洲女爱视频在线| 久久精品亚洲国产奇米99| 欧美日韩一级视频| 99国产精品久| 国产精品中文字幕日韩精品 | 久久久99精品久久| 制服丝袜中文字幕一区| 色综合亚洲欧洲| 高潮精品一区videoshd| 久久精品国产在热久久| 亚洲v日本v欧美v久久精品| 一区免费观看视频| 欧美高清一级片在线观看| 日韩精品中文字幕在线不卡尤物 | 国产一区二区女| 天天免费综合色| 亚洲一区二区三区国产| 亚洲色图欧美激情| 中文字幕亚洲精品在线观看| 久久精品网站免费观看| 久久女同互慰一区二区三区| 日韩一区二区三区四区五区六区 | 成人性生交大片免费看视频在线| 激情六月婷婷久久| 美女精品一区二区| 蜜臀a∨国产成人精品| 香蕉久久夜色精品国产使用方法 | 久久精品人人做人人综合| 日韩美一区二区三区| 91麻豆精品国产91久久久| 精品视频一区二区三区免费| 欧美亚洲国产怡红院影院| 在线欧美一区二区| 在线视频中文字幕一区二区| 在线亚洲一区观看| 在线观看亚洲精品| 欧美日韩激情一区二区| 欧美群妇大交群中文字幕| 欧美日本一区二区三区| 欧美精选一区二区| 777久久久精品| 中文字幕一区二区三| 国产精品理伦片| 国产精品久久久久aaaa| 亚洲免费电影在线| 欧美一级黄色录像| 国产黄人亚洲片| 国产精品99久久久| av资源网一区| 91视频com| 88在线观看91蜜桃国自产| 欧美一卡二卡三卡| xf在线a精品一区二区视频网站| 精品国产1区二区| 亚洲国产激情av| 亚洲欧美国产77777| 亚洲成国产人片在线观看| 蜜桃视频在线观看一区| 国产+成+人+亚洲欧洲自线| 91丨porny丨户外露出| 欧洲国内综合视频| 日韩欧美亚洲国产精品字幕久久久| 欧美成人精品3d动漫h| 国产精品青草久久| 亚洲国产视频a| 精品一区二区三区久久| 99久久免费视频.com| 欧美日韩中文国产| 国产日本一区二区| 亚洲福利国产精品| 国产一区三区三区| 色婷婷综合视频在线观看| 日韩视频一区二区| 国产精品久久夜| 男人的j进女人的j一区| 丁香婷婷综合色啪| 717成人午夜免费福利电影| 国产日韩欧美不卡在线| 亚洲一区二区在线观看视频| 精品亚洲国内自在自线福利| 色激情天天射综合网| 欧美精品一区二| 香蕉成人啪国产精品视频综合网 | 亚洲成国产人片在线观看| 国产揄拍国内精品对白| 色播五月激情综合网| 久久综合色天天久久综合图片| 亚洲精品视频免费看| 国产久卡久卡久卡久卡视频精品| 在线观看国产91| 国产精品免费久久久久| 乱一区二区av| 在线播放/欧美激情| 亚洲日本中文字幕区| 国产精品影视天天线| 欧美一区二区三区视频免费| 夜夜爽夜夜爽精品视频| 国产成人在线视频网站| 日韩午夜在线影院| 肉色丝袜一区二区| 欧美专区亚洲专区| 亚洲人成亚洲人成在线观看图片| 国产精品一区三区| 久久久久久久综合日本| 老司机午夜精品| 欧美裸体bbwbbwbbw| 亚洲综合在线视频| 色偷偷成人一区二区三区91| 最好看的中文字幕久久| 波多野洁衣一区| 中文字幕欧美激情一区| 国产精品18久久久久久久久| 精品国产99国产精品| 日本在线不卡一区| 在线观看欧美精品| 亚洲欧洲在线观看av| 久草热8精品视频在线观看| 91精品午夜视频| 亚洲成人你懂的| 91国产丝袜在线播放| 夜夜嗨av一区二区三区网页| 播五月开心婷婷综合| 国产日韩高清在线| 国产麻豆视频一区| 久久久亚洲综合| 国产麻豆午夜三级精品| 欧美一区二区三区免费视频| 亚洲国产一区二区a毛片| 91热门视频在线观看| 中文字幕一区日韩精品欧美| 99久久99精品久久久久久| 中文字幕精品一区| 高清shemale亚洲人妖| 成人欧美一区二区三区1314| 高清在线不卡av| 国产欧美日韩不卡| 韩国精品一区二区| 国产日韩欧美电影| 免费欧美高清视频| 日韩一区二区三区三四区视频在线观看| 亚洲视频网在线直播| 91麻豆成人久久精品二区三区| 日韩码欧中文字| 欧美狂野另类xxxxoooo| 五月天亚洲精品| 69堂精品视频| 国产精品综合久久| 中文字幕av资源一区| 99视频国产精品| 亚洲欧洲综合另类|