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

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

?? huffman.c

?? 對文本文件success.dat進行霍夫曼編碼
?? C
字號:
/*
 * 程序功能:對文本文件success.dat進行霍夫曼編碼,用文本文件coding.dat保存編碼
 * 編程思路:
   第一步:
       首先打開掃描文件success.dat,統計出每個字符出現的次數,作為各個字符的權,
   在這里我假設文本文件里面的字符只包含a~z這26個小寫字母,用CharCount函數掃描文件,統計
   出各個字符在文件中出現的次數(注意,如果某個字符一個都沒出現,那就設它的權為1,因為權
   是0的話將不能正確編碼,血的教訓) CharCount函數的原型如下:
   void CharCount(FILE *fp, int *Count, int length);
   其中fp是要掃描的文件的指針,數組Count的每個元素分別用來統計a,b..z在文件中出現的次數,
   length是數組的長度。

   第二步:
       根據給定的字符集(這里設字符集為a~z這26個小寫字母), 和各字符的權(用CharCount函數得到的),
   創建哈夫曼樹,函數原型如下:
   void createHTree(HuffmanTree HT, char *c, int *w, int n);
   其中數組c[0..n-1]就是要編碼的字符集,w[0..n-1]就是Count函數得到的各字符的權,構造霍夫曼樹HT

   第三步:
       對霍夫曼樹中的n個葉子結點進行編碼,第i個葉子結點的編碼存放在HC[i]中(1 <= i <= n)
	函數原型如下:
	void HuffmanCoding(HuffmanTree HT, HuffmanCode HC, int n);
	若中HT是構造的一棵霍夫曼樹,HC是一個字符串數組,n是霍夫曼樹葉子結點的數目

   第四步:
       對文本文件success.dat進行霍夫曼編碼,用文本文件coding.dat保存編碼,函數原型如下:
       void Coding(HuffmanTree HT, HuffmanCode HC, int n);
    其中HT是構造好的一棵霍夫曼樹,HC是保存著霍夫曼樹各葉子結點編碼的字符串數組,n是葉子結點
	的數目。
	    這個函數以讀方式打開success.dat和寫方式打開coding.dat,然后從success.dat里面讀一個字符,
	在字符串數組HC中找出該字符的編碼,寫入coding.dat文件,直到success.dat讀完為止。 

 * Copyright (c) 2006 All rights reserved.
 * 文件名:HuffmanCoding.c
 *
 * 文件標識:霍夫曼編碼
 * 摘要:對文本文件success.dat進行霍夫曼編碼,用文本文件coding.dat保存編碼
 * 輸入:無
 * 輸出:輸出一個霍夫曼編碼文件(文件內容是0或1的字符序)
 *
 * 當前版本 0.01
 * 作者:羅
 * 完成日期:2006年4月4日
 */


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXLEAFNUM 50    /* 葉子結點的最大數目 */

/* 定義一個霍夫曼樹的結構 */
typedef struct node
{
    char ch;                   /* 當前結點表示的字符,對于非葉子結點,此域不用 */
	int weight;                /* 當前結點的權值 */
    int parent;                /* 當前結點的父結點下標,為0表示無父結點 */
    int lchild, rchild;        /* 當前結點左右孩子結點的下標,都為0時表示無孩子結點 */
} HuffmanTree[2*MAXLEAFNUM];
typedef char* HuffmanCode[MAXLEAFNUM+1];

/* 在HT[1~n]中選擇weigth最小的且parent為0的結點,用p1,p2帶回 */
void select(HuffmanTree HT, int n, int *p1, int *p2);

/* 根據給定的字符集創建哈夫曼樹 */
void createHTree(HuffmanTree HT, char *c, int *w, int n);

/* n個葉子結點在霍夫曼樹HT中的下標為1~n,第i(i<=i<=n)個葉子的編碼存放HC[i]中 */
void HuffmanCoding(HuffmanTree HT, HuffmanCode HC, int n);

/* 利用具有n個字符的霍夫曼編碼的編碼集(1~n)對字符逐個進行編碼 */
/* 最后把編碼存儲在buff 所指向的字符指針中 */
void Coding(HuffmanTree HT, HuffmanCode HC, int n);


/* 統計字符在文件中出現的次數,并作為該字符的權進行霍夫曼編碼 */
void CharCount(FILE *fp, int *Count, int length);

//函數功能:在HT[1~n]中選擇weigth最小的且parent為0的結點,用p1,p2帶回
//參數:HT為n棵霍夫曼樹,p1和p2用來帶回weight最小的且parent為0的兩個結點
//返回值:無
void select(HuffmanTree HT, int n, int *p1, int *p2)
{
	static int first = 1;
	int k, i;
	while (HT[first].parent != 0)
		first++;
	k = first;
	for (i = first+1; i <= n; i++)
	if ((HT[i].parent == 0) && (HT[i].weight < HT[k].weight))
	{
		k = i;
	}
	if (k = first)
	{
		first++;
		while (HT[first].parent != 0)
			first++;
	}
	*p1 = k;

	k = first;
	for (i = first+1; i <= n; i++)
	if ((HT[i].parent == 0) && (HT[i].weight < HT[k].weight) &&(i != *p1))
	{
		k = i;
	}
	if (k == first)
	{
		first++;
		while (HT[first].parent != 0)
			first++;
	}
	*p2 = k;
}


/* 
 * 函數功能:創建霍夫曼樹
 * 參數:數組c[0..n-1]和w[0..n-1]存放了n個字符,以及其概率,構造霍夫曼樹HT
 * 返回值:無
*/
void createHTree(HuffmanTree HT, char *c, int *w, int n)
{
	int i, s1, s2;
	if (n <= 1)
		return;
	/* 根據n個權值構造n棵只有根結點的二叉樹 */
	for (i = 1; i <= n; i++)
	{
		HT[i].ch = c[i-1];
		HT[i].weight = w[i-1];
		HT[i].parent = HT[i].lchild = HT[i].rchild = 0;
	}

	for (; i < 2*n; i++)
	{
		HT[i].parent = HT[i].lchild = HT[i].rchild = 0;
	}

	/* 構造霍夫曼樹,從HT[1.. i-1]中選擇parent 為0,且weight最小的兩棵樹,其序號為s1和s2 */
    for (i = n+1; i < 2*n; 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;
	}
}

/* 
 * 函數功能:對霍夫曼樹中的葉子結點進行編碼,第i個結點的編碼放在HC[i]中(1 <= i <= n)
 * 參數:HT為一棵霍夫曼樹,HC為一個存放霍夫曼編碼的字符串數組,n為葉子的個數
 * 返回值:無
*/
void HuffmanCoding(HuffmanTree HT, HuffmanCode HC, int n)
{
    /*n個葉子結點在霍夫曼樹HT中的下標為1~n,第i(i<=i<=n)個葉子的編碼存放HC[i]中*/
    char *cd;
    int i, start, c, f;
    if (n <= 1)
        return;
    cd = (char *)malloc(n);
    cd[n-1] = '\0';
    i = 1;
    while (i <= n)
    {
        start = n-1;
        for (c=i, f=HT[c].parent; f!=0; c=f, f=HT[c].parent)
        {
            if (HT[f].lchild == c)
               cd[--start] = '1';
            else
               cd[--start] = '0';
        }
        HC[i] = (char *)malloc(n - start);
        strcpy(HC[i], &cd[start]);
        i++;
    } 
}


/*
 * 函數功能: 利用具有n個字符的霍夫曼編碼的編碼集(1~n)對字符逐個進行編碼
 * 最后把編碼存儲在buff 所指向的字符指針中
 * 參數:一棵霍夫曼樹,字符集
*/
void Coding(HuffmanTree HT, HuffmanCode HC, int n)
{
	char ch;
	int i;
	FILE *IN, *OUT;

	if ((IN = fopen("success.dat", "r")) == NULL)
	{
		printf("File Open Error!\n");
		exit(1);
	}

	if ((OUT = fopen("coding.dat", "w+")) == NULL)
	{
		printf("File Open Error!\n");
		exit(1);
	}

	while (!feof(IN))
	{
		ch = fgetc(IN);
		i = 1;
		while ((HT[i].ch != ch) && (i <= n))
		{
			i++;
			if (i > n)
				return;
		}

		/* 將ch代表的字符的編碼寫入到輸出文件 */
		fputs(HC[i], OUT);
	}

	fclose(IN);
	fclose(OUT);
}


/*
 * 函數名:CharCount
 * 參數:一個指向文件的指針,以及一個整型數組
 * 函數功能:統計文件中每個字符出現的次數,由Count數組帶回字符出現的次數
 * 返回值:無
*/
void CharCount(FILE *fp, int *Count, int length)
{
	char ch;
	int i;
	/* 如果某個字符在文件中沒有出現,則它的權為1 */
	for (i = 0; i < length; i++)
	{
		Count[i]=1;
	}

	/* 碰到一個出現的字符,就將它的權增1 */
	while (!feof(fp))
	{
		ch = fgetc(fp);
		Count[(ch) - 97]++;
	}
}

int main(int argc, char* argv[])
{
	/* 要進行霍夫曼編碼的字符集 */
    char CharSet[] = "abcdefghijklmnopqrstuvwxyz";

    /* 字符的權 */
    static int weight[26];

	/* 字符集字符個數 */
	int size, i;
    
	/* 霍夫曼樹變量 */

    HuffmanTree HT;
	/* 霍夫曼編碼集 */
	HuffmanCode HC;

	FILE *IN;

	if ((IN = fopen("success.dat", "r")) == NULL)
	{
		printf("File Open Error!\n");
		exit(1);
	}


	size = strlen(CharSet); 
	/* 統計各個字符在文件中出現的次數 */
    CharCount(IN, weight, size);

	/* 輸出各字符在文件中出現的次數,次數為1表示在文件中沒有出現該字符 */
	printf("各個字符的權為:\n");
	for (i = 0; i < size; i++)
	{
		printf("%3d", weight[i]);
		if ((i+1) % 10 == 0)
			printf("\n");
	}
	printf("\n");
	fclose(IN);

	/* 根據字符集和權值創建霍夫曼樹 */
	createHTree(HT, CharSet, weight, size);

	/* 對哈夫曼樹中的葉子結點進行編碼 */
	HuffmanCoding(HT, HC, size);
	/* 輸出各個字符對應的編碼 */
	printf("各個字符的編碼分別為:\n");
	for (i = 1; i <= size; i++)
	{
		printf("%c = %s\n", HT[i].ch, HC[i]);
	}

	/* 對文件進行編碼,執行完后看看你的當前工作目錄下的coding.dat文件,是不是有字符編碼了 */
	Coding(HT, HC, size);

	return 0;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品一区二区三区久久| 日韩一区二区精品葵司在线| 欧美日韩免费电影| 国产精品人成在线观看免费 | 蜜桃91丨九色丨蝌蚪91桃色| 92国产精品观看| 久久综合色播五月| 亚瑟在线精品视频| 色哟哟日韩精品| 欧美高清在线一区| 激情图片小说一区| 6080午夜不卡| 亚洲国产aⅴ成人精品无吗| 成人高清在线视频| 中文字幕免费不卡| 国产一区二区电影| 久久综合色一综合色88| 日本成人在线电影网| 欧美精品在线视频| 同产精品九九九| 欧美久久久久久久久中文字幕| 亚洲视频小说图片| 91蜜桃婷婷狠狠久久综合9色| 国产免费成人在线视频| 懂色av一区二区夜夜嗨| 欧美极品另类videosde| 国产成人亚洲综合a∨婷婷| 国产亚洲精品久| 国模少妇一区二区三区| 久久青草欧美一区二区三区| 国内久久精品视频| 久久久久99精品一区| 国产精品羞羞答答xxdd| 国产亚洲一区字幕| 成人亚洲精品久久久久软件| 中文字幕国产一区| 99精品在线观看视频| 亚洲女同ⅹxx女同tv| 91黄色激情网站| 日韩主播视频在线| 日韩精品一区二区在线| 狠狠色伊人亚洲综合成人| 国产亚洲一本大道中文在线| 成人高清免费观看| 伊人开心综合网| 欧美日本在线一区| 精品一区二区影视| 国产精品每日更新| 欧美视频一二三区| 国内精品伊人久久久久av影院| 久久久久久99久久久精品网站| 成人a区在线观看| 亚洲电影在线播放| 欧美不卡一二三| 成人av在线播放网址| 亚洲国产成人精品视频| 精品国产乱码久久久久久1区2区 | 久热成人在线视频| 欧美激情一二三区| 欧美色综合久久| 国产综合久久久久久久久久久久| ...av二区三区久久精品| 欧美人与z0zoxxxx视频| 成人一区二区视频| 天堂成人国产精品一区| 欧美激情一区二区| 欧美一区二区三区免费大片| 国产福利一区二区三区视频| 夜夜爽夜夜爽精品视频| 精品免费视频一区二区| 色老头久久综合| 激情图片小说一区| 亚洲.国产.中文慕字在线| 欧美极品美女视频| 91精品在线免费观看| 成人福利在线看| 久久国产日韩欧美精品| 亚洲精品成人在线| 国产色产综合色产在线视频| 欧美色倩网站大全免费| 丁香婷婷综合激情五月色| 全部av―极品视觉盛宴亚洲| 1区2区3区欧美| 久久久五月婷婷| 91精品在线观看入口| 99久久精品免费看| 国产精品99久久久久久久vr| 日本伊人色综合网| 一区二区高清视频在线观看| 国产亚洲一区字幕| 337p粉嫩大胆噜噜噜噜噜91av| 欧美性猛交xxxx黑人交| a级高清视频欧美日韩| 精品无人码麻豆乱码1区2区| 午夜视频一区二区| 亚洲已满18点击进入久久| 日韩一区有码在线| 欧美激情一区二区三区全黄| 久久久美女艺术照精彩视频福利播放| 欧美日韩中文一区| 欧美性感一类影片在线播放| 91一区二区在线| jizz一区二区| 99久久免费精品| 99精品久久99久久久久| 国产成人高清在线| 国产91精品精华液一区二区三区| 蜜臀av一区二区在线观看| 亚洲大尺度视频在线观看| 亚洲一区免费在线观看| 亚洲制服丝袜在线| 夜夜揉揉日日人人青青一国产精品| 亚洲日本欧美天堂| 亚洲精品中文字幕乱码三区| 亚洲美女在线一区| 有坂深雪av一区二区精品| 亚洲男帅同性gay1069| 亚洲天堂av老司机| 亚洲午夜国产一区99re久久| 亚洲国产毛片aaaaa无费看| 亚洲国产视频一区二区| 亚洲成人黄色影院| 日本欧美一区二区三区| 另类小说图片综合网| 国产精品一二三四| 99久久精品情趣| 欧美三级一区二区| 日韩欧美一级片| 国产女人18水真多18精品一级做| 国产精品国产三级国产aⅴ中文| 中文字幕在线不卡视频| 一区av在线播放| 免费看日韩a级影片| 国产东北露脸精品视频| 91伊人久久大香线蕉| 欧美日韩免费观看一区三区| 欧美一区二区三区在线电影| 久久久久久日产精品| 自拍视频在线观看一区二区| 亚洲综合色自拍一区| 麻豆91免费看| 成人精品视频一区二区三区| 欧美亚洲一区二区在线| 日韩美女在线视频| 亚洲特级片在线| 欧美96一区二区免费视频| 风流少妇一区二区| 欧美精品在线观看播放| 久久精品免视看| 亚洲午夜久久久久| 国产精品综合久久| 欧美综合一区二区| 久久久久88色偷偷免费| 亚洲伊人色欲综合网| 国产一区二区三区最好精华液 | 国产aⅴ综合色| 欧美人妖巨大在线| 国产精品卡一卡二卡三| 久久精品久久99精品久久| 99免费精品在线| 精品久久久久久综合日本欧美| 亚洲人成网站精品片在线观看| 老司机免费视频一区二区| 色综合久久九月婷婷色综合| 亚洲精品在线观看视频| 亚洲国产日韩一区二区| 不卡视频一二三四| 精品成人在线观看| 日韩一区精品视频| 色婷婷综合久久久久中文一区二区| 2021国产精品久久精品| 首页国产欧美日韩丝袜| 91色.com| 中文字幕av资源一区| 久久99精品久久久| 欧美顶级少妇做爰| 亚洲国产欧美在线| 色欧美片视频在线观看| 中文字幕欧美日韩一区| 精品一区二区三区在线观看| 69久久夜色精品国产69蝌蚪网| 一区二区三区四区激情| 成人h动漫精品| 国产精品久久久久精k8| 国产精品99久久久久久宅男| 精品国产一区二区三区久久久蜜月 | 欧美本精品男人aⅴ天堂| 亚洲一区二区偷拍精品| 色婷婷av久久久久久久| 中文字幕一区二区三区在线播放 | 国产欧美日韩视频在线观看| 美国十次了思思久久精品导航| 欧美电影在线免费观看| 亚洲mv在线观看| 欧美精品1区2区3区| 亚洲成人免费视频| 欧美日本一区二区| 视频在线在亚洲| 日韩亚洲欧美高清| 免费成人在线影院|