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

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

?? huffmantree.c

?? 霍夫曼編碼的實現(xiàn)
?? C
字號:
/*
 * 作者:antigloss at http://cpp.ga-la.com
 * 最后修改:05-10-2 15:35
 * 螞蟻的 C/C++ 標準編程
 */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "../header/huffmantree.h"
#include "../mylib/error_handler.h"

static const char *msg[] = { "Please input a character: ",
                             "Please input its weight: ",
                             "Invalid input!! You should input an integer."};

/* Begin of creat_hufftree 05-10-2 13:10 */
void creat_hufftree(HuffmanTree ht, unsigned n) /* 形成赫夫曼樹 */
{
    unsigned i, s1, s2, size = 2 * n - 1;
    
	for ( i = n + 1; i <= size; ++i ) {
		s1 = s2 = 0;
		Select(ht, i, &s1, &s2); /* 選擇 parent 為 0,且 weight 最小的兩個結(jié)點 */
		ht[s1].parent = ht[s2].parent = i;
		ht[i].lchild = s1;
		ht[i].rchild = s2;
		ht[i].weight = ht[s1].weight + ht[s2].weight;
	}
} /* End of creat_hufftree */

/* Begin of destroy_huffcode 05-10-2 14:50 */
void destroy_huffcode(HuffmanCode hc, unsigned n) /* 銷毀赫夫曼編碼 */
{
     unsigned i;
     
     for ( i = 1; i <= n; ++i ) {
         free(hc[i]);
     }
     free(hc);
} /* End of destroy_huffcode */

/* Begin of encode_hufftree 05-10-2 15:00 */
HuffmanCode encode_hufftree(HuffmanTree ht, unsigned n)
{ /* 從葉子到根逆向求每個字符的赫夫曼編碼 */
	char *cd;
	unsigned start, i, child, parent;
	HuffmanCode hc;
	
    hc = malloc( (n + 1) * sizeof *hc ); /* 分配 n 個字符編碼的頭指針向量 */
	if ( !hc ) {
		return NULL;
    }
    
	cd = malloc( n * sizeof *cd ); /* 分配編碼的工作空間 */
	if ( !cd ) {
        free(hc);
		return NULL;
    }
    
	cd[n-1] = '\0'; /* 編碼結(jié)束符 */	
	for ( i = 1; i <= n; ++i ) { /* 逐個字符求赫夫曼編碼 */
		start = n - 1; /* 編碼結(jié)束位置 */
		for ( child = i, parent = ht[i].parent; parent != 0;
              child = parent, parent = ht[parent].parent ) { /* 從葉子到根逆向求編碼 */
			if ( ht[parent].lchild == child ) {
				cd[--start]='0';
            } else {
				cd[--start]='1';
            }
		}
		hc[i] = malloc( (n - start) * sizeof *hc[i] ); /* 為第i個字符編碼分配空間 */
		if ( !hc[i] ) {
            destroy_huffcode( hc, i - 1 );
            free(cd);
			return NULL;
        }
		strcpy(hc[i], &cd[start]);
	}
	
	free(cd); /* 釋放工作空間 */	
	return hc;
} /* End of encode_hufftree */
                             
/* Begin of HuffmanTree 05-10-2 12:10 */
HuffmanTree init_hufftree(unsigned n) /* 初始化赫夫曼樹 */
{
	int tmp, chk;
    unsigned i, size = 2 * n - 1;
	HuffmanTree ht, p;
	
    ht = malloc( (size + 1) * sizeof *ht ); /* 不使用 0 號單元 */
    if ( !ht ) {
        return NULL;
    }
    
    for ( p = ht + 1, i = 1; i <= n; ++i, ++p) {
		fputs(msg[0], stdout);
		tmp = getchar();
		if ( tmp != '\n' && tmp != EOF ) {
            flush_stdin();
        }
        p->data = tmp;
        
        fputs(msg[1], stdout);
		while ( ( chk = scanf("%u", &p->weight) ) != 1 ) {
            if ( chk != EOF ) {
                flush_stdin();
            }
            printf("%s\n\n%s", msg[2], msg[1]);
        }
        flush_stdin();
		p->lchild = p->parent = p->rchild = 0;
	}
	
	for ( ; i <= size; ++i, ++p ) {
		p->lchild = p->parent = p->rchild = p->weight = 0;
    }
    
    return ht;
} /* End of HuffmanTree */

/* Begin of print_huffcode 05-10-2 15:15 */
void print_huffcode(HuffmanCode hc, HuffmanTree ht, unsigned n) /* 輸出赫夫曼編碼 */
{
    unsigned i;
    
    for ( i = 1; i <= n; ++i ) {
        printf("%c: %s\n", ht[i].data, hc[i]);
    }
} /* End of print_huffcode */

/* Begin of Select 05-10-2 13:00 */
void Select(HuffmanTree p, unsigned i, unsigned *s1, unsigned *s2)
{ /* 選擇 parent 為 0,且 weight 最小的兩個結(jié)點 */
	unsigned j;

	for ( j = 1; j < i; ++j ) {
		if ( !p[j].parent ) {
			if ( !*s1 ) {
				*s1 = j;
            } else if ( p[*s1].weight > p[j].weight ) {
				*s2 = *s1;
				*s1 = j;
			} else {
				*s2 = j;
            }
		}
		
		if ( *s1 && *s2 ) break;
	}
	
	for ( ++j; j < i; ++j ) {
		if ( !p[j].parent ) {
			if ( p[*s1].weight > p[j].weight ) {
				*s2 = *s1;
				*s1 = j;
			} else if( p[*s2].weight > p[j].weight ) {
					*s2 = j;
			}
		}
	}
} /* End of Select */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美在线免费观看视频| 国产精品视频看| 日韩和的一区二区| 欧美女孩性生活视频| 亚洲成人免费电影| 欧美日本国产视频| 日韩国产高清在线| 日韩精品综合一本久道在线视频| 日韩不卡免费视频| 欧美一级一级性生活免费录像| 美腿丝袜亚洲色图| 久久久久久久综合狠狠综合| 波多野结衣中文字幕一区二区三区 | 国产精品乱码妇女bbbb| 国产一区二区三区蝌蚪| 国产欧美精品一区aⅴ影院 | 五月婷婷色综合| 欧美一区二区在线免费观看| 国产麻豆精品一区二区| 1000精品久久久久久久久| 91福利在线看| 加勒比av一区二区| 国产精品每日更新| 欧美在线不卡视频| 六月丁香综合在线视频| 国产精品久久久久久久久免费桃花| 色素色在线综合| 亚洲18女电影在线观看| 精品国产凹凸成av人导航| 91在线国产观看| 六月丁香婷婷久久| 国产精品久久久久久久久免费樱桃 | 懂色av噜噜一区二区三区av| 中文字幕综合网| 日韩一级成人av| 91亚洲精品久久久蜜桃网站| 日本不卡高清视频| 亚洲日本欧美天堂| 精品奇米国产一区二区三区| 色欧美乱欧美15图片| 国产在线视频一区二区| 亚洲综合色网站| 国产午夜亚洲精品羞羞网站| 4438x成人网最大色成网站| 成人性生交大片免费看在线播放| 午夜伊人狠狠久久| 国产精品第一页第二页第三页| 在线播放91灌醉迷j高跟美女 | 色偷偷久久人人79超碰人人澡| 奇米一区二区三区| 亚洲三级电影全部在线观看高清| 精品人伦一区二区色婷婷| 欧美日韩视频不卡| 99re这里都是精品| 国产专区综合网| 人人狠狠综合久久亚洲| 亚洲激情自拍偷拍| 国产精品看片你懂得| 日韩免费一区二区| 3atv在线一区二区三区| 在线观看欧美精品| www.欧美精品一二区| 激情都市一区二区| 开心九九激情九九欧美日韩精美视频电影 | 成人app下载| 激情亚洲综合在线| 免费人成网站在线观看欧美高清| 一区二区三区成人在线视频| 中文字幕成人av| 亚洲男人的天堂网| 国产女人18水真多18精品一级做| 日韩免费高清视频| 91精品国产乱| 欧美一二三区精品| 日韩免费高清av| 91精品国产91综合久久蜜臀| 宅男噜噜噜66一区二区66| 欧美日韩极品在线观看一区| 日本电影欧美片| 色综合久久久久久久久久久| 色综合久久综合网| 91福利视频在线| 在线视频综合导航| 在线观看三级视频欧美| 欧美亚洲自拍偷拍| 欧美精品久久一区| 欧美一区二区三区视频免费播放 | www.亚洲色图.com| 95精品视频在线| 97久久超碰国产精品| 一本色道综合亚洲| 欧美日韩国产高清一区二区三区| 欧美亚洲日本国产| 91精品福利在线一区二区三区| 欧美一级欧美一级在线播放| 日韩精品一区二区在线观看| 久久―日本道色综合久久| 久久亚洲综合av| 中文字幕第一页久久| 亚洲女女做受ⅹxx高潮| 亚洲韩国精品一区| 麻豆一区二区三| 成人黄色小视频| 欧美综合色免费| 日韩三级中文字幕| 国产精品不卡视频| 午夜影视日本亚洲欧洲精品| 激情欧美日韩一区二区| 成人av在线资源网站| 欧美视频一区在线| 久久综合色8888| 亚洲精品ww久久久久久p站 | 精品一二三四区| 9l国产精品久久久久麻豆| 精品污污网站免费看| 久久综合久久久久88| 亚洲视频免费观看| 青青草97国产精品免费观看无弹窗版| 韩国在线一区二区| 欧美专区亚洲专区| 精品国产91洋老外米糕| 亚洲人成小说网站色在线| 午夜日韩在线观看| 国产中文字幕一区| 欧美日韩免费不卡视频一区二区三区 | 亚洲精品乱码久久久久久久久 | 亚洲成av人片| 国产一级精品在线| 欧美乱妇15p| 国产精品国产三级国产有无不卡 | 欧美日韩精品欧美日韩精品一综合| 136国产福利精品导航| 日本美女一区二区三区视频| 成人av午夜影院| 日韩一区二区麻豆国产| 亚洲免费观看高清在线观看| 国产米奇在线777精品观看| 欧美午夜精品久久久久久孕妇| 日本一区二区免费在线| 日本最新不卡在线| 91在线视频免费91| 久久久亚洲精华液精华液精华液| 亚洲电影第三页| 成人免费视频caoporn| 日韩午夜激情免费电影| 亚洲在线成人精品| 99国产精品久| 中文文精品字幕一区二区| 美女在线视频一区| 欧美三区在线观看| 亚洲欧美日韩精品久久久久| 国产一区二区免费看| 欧美精品在线一区二区三区| 一区二区三区国产| 91麻豆123| 国产精品污www在线观看| 精品一区二区免费看| 91精品国产免费| 日本视频在线一区| 欧美日韩久久久久久| 夜夜嗨av一区二区三区中文字幕| 不卡的av网站| 1024国产精品| 91丝袜美女网| 亚洲日本在线a| 色婷婷狠狠综合| 一区二区三区自拍| 麻豆精品一区二区综合av| 国产片一区二区三区| 欧美日韩视频在线观看一区二区三区 | 5566中文字幕一区二区电影| 亚洲欧洲日韩av| 国产自产高清不卡| 久久先锋资源网| 黑人巨大精品欧美黑白配亚洲| 精品1区2区在线观看| 国内精品自线一区二区三区视频| 欧美日韩成人在线一区| 亚洲人快播电影网| 欧美中文字幕一区二区三区| 亚洲成人av免费| 欧美日韩亚洲另类| 五月婷婷激情综合| 91精品视频网| 精品亚洲国产成人av制服丝袜| 欧美精品一区二区三区在线播放| 狠狠色丁香婷婷综合久久片| 欧美国产1区2区| 91亚洲永久精品| 亚洲va欧美va天堂v国产综合| 91麻豆精品国产自产在线观看一区| 亚洲国产毛片aaaaa无费看| 欧美精品1区2区| 久久精品999| 国产欧美一区二区在线观看| 国产一区二区精品久久91| 亚洲欧洲韩国日本视频| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 日韩国产一二三区| 久久老女人爱爱|