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

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

?? human.c

?? 香農(nóng)-范諾 和 霍夫曼無損 壓縮算法
?? C
字號(hào):
#include<stdio.h>
#include<conio.h>
#include<string.h>
/*
哈夫曼編碼示例程序
哈夫曼建樹算法描述:
1. 將所有權(quán)值分別構(gòu)造一個(gè)只有一個(gè)結(jié)點(diǎn)的二叉樹結(jié)點(diǎn),將這些結(jié)點(diǎn)加入集合A(哈夫曼森林)
2. 檢查集合A成員的個(gè)數(shù),如果為1,則算法結(jié)束,集合A中唯一的結(jié)點(diǎn)為哈夫曼樹的根。
3. 從集合A中取出根結(jié)點(diǎn)權(quán)值最小的兩棵樹a, b,集合中不再保留這兩棵樹。
4. 由a和b分別為左、右子樹構(gòu)造一個(gè)新的二叉樹r, 令r的權(quán)值等于a的權(quán)值與b的權(quán)值之和。
5. 將r加入到集合A中,返回第 2 步。
*/

struct HuffmanNode /*哈夫曼樹結(jié)點(diǎn)類型*/
{
    char data;               /*結(jié)點(diǎn)上的數(shù)據(jù)*/
    int power;               /*結(jié)點(diǎn)的權(quán)值*/
    HuffmanNode *lchild;     /*左分支(作為二叉樹結(jié)點(diǎn)時(shí)用)*/
    HuffmanNode *rchild;     /*右分支(作為二叉樹結(jié)點(diǎn)時(shí)用)*/
    HuffmanNode *next;       /*后繼指針(作為單鏈表結(jié)點(diǎn)時(shí)用)*/
};

/*給Huffman森林(按各樹根結(jié)點(diǎn)的值升序排列的帶頭結(jié)點(diǎn)的鏈表)添加一棵Huffman樹使得鏈表仍然有序  */
void AddNode(HuffmanNode *headNode, HuffmanNode *pNode)
{
    HuffmanNode *p = headNode;
    /*  找到第一個(gè)權(quán)值小于給定結(jié)點(diǎn)的結(jié)點(diǎn),p指定該結(jié)點(diǎn)的前一個(gè)結(jié)點(diǎn)  */
    while (p->next && p->next->power < pNode->power) p = p->next;
    pNode->next = p->next;
    p->next = pNode;
}
/*    功能:構(gòu)造哈夫曼樹  */
/*    參數(shù)說明  */
/*    n: 字符的個(gè)數(shù)  */
/*    datas: 要統(tǒng)計(jì)的字符  */
/*    powers: 字符對(duì)應(yīng)的權(quán)值(出現(xiàn)的次數(shù))   */
HuffmanNode* CreateHuffmanTree(int n, char datas[], int powers[])
{
    HuffmanNode head;
    head.next = NULL; //初始化森林
    for (int i = 0; i < n; i++)
    {
        HuffmanNode *pNode = new HuffmanNode;
        pNode->data = datas[i];
        pNode->power = powers[i];
        pNode->lchild = pNode->rchild = pNode->next = NULL;
        AddNode(&head, pNode);
    }
    /*開始構(gòu)造      */
    while (head.next)
    {
        if (!head.next->next) /*只剩最后一個(gè)結(jié)點(diǎn),這就是根 */
        {
            return head.next;
        }
        /* 取前兩個(gè)出來構(gòu)造一棵新樹(因?yàn)殒湵硪呀?jīng)按權(quán)值升序排列了,前兩個(gè)就是最小的兩個(gè))    */
        HuffmanNode *pN1, *pN2, *pRoot;
        pN1 = head.next;              /*第一個(gè)結(jié)點(diǎn)     */
        pN2 = pN1->next;              /*第二個(gè)結(jié)點(diǎn)     */
        head.next = pN2->next;        /*將這兩個(gè)結(jié)點(diǎn)從鏈表中刪除     */
        pRoot = new HuffmanNode;    /*為這兩個(gè)結(jié)點(diǎn)建立根結(jié)點(diǎn) */
        pRoot->power = pN1->power + pN2->power; /*權(quán)值相加  */
        pRoot->lchild = pN1;          /*左分支為第一個(gè)結(jié)點(diǎn)  */
        pRoot->rchild = pN2;          /*右分支為第二個(gè)結(jié)點(diǎn)  */
        /* 將新的根加入哈夫曼森林   */
        AddNode(&head, pRoot);
    }
    return NULL;
}

/*     計(jì)算哈夫曼樹的帶權(quán)路徑長度PWL       */
/*     node: 樹結(jié)點(diǎn)        */
/*     level: 當(dāng)前層數(shù)        */
int GetPWL(HuffmanNode *node, int level)
{
    if (!node) return 0;
    if (!node->lchild && !node->rchild) return node->power * level;       /*     是葉結(jié)點(diǎn)        */
    return GetPWL(node->lchild, level + 1) + GetPWL(node->rchild, level+1);
}

/*    獲取所有葉點(diǎn)的哈夫曼編碼    */
/*    node: 樹結(jié)點(diǎn)                */
/*    code: 上層前綴              */
void GetCodes(HuffmanNode *node, const char *code)
{
    if (!node->lchild && !node->rchild)
    {
        /*是葉結(jié)點(diǎn),打印編碼    */
	printf("%c %d %s\n",node->data,node->power,code);
        /*cout << node->data << " " << node->power << " " << code << endl;       */
        return;
    }

    int len = strlen(code);
    char *newcode = new char[len+2];
    strcpy(newcode, code);
    newcode[len+1] = '\0';
    if (node->lchild)          /*左分支分配'1'        */
    {
        newcode[len] = '1';
        GetCodes(node->lchild, newcode);
    }
    if (node->rchild)         /*右分支分配'0'        */
    {
        newcode[len] = '0';
        GetCodes(node->rchild, newcode);
    }
    delete[] newcode;
}

/*     釋放所有結(jié)點(diǎn),要按二叉樹的方式        */
void FreeNodes(HuffmanNode *node)
{
    if (!node) return;
    FreeNodes(node->lchild);
    FreeNodes(node->rchild);
    delete node;
}
/*請(qǐng)嘗試改變主函數(shù),使之能統(tǒng)計(jì)指定文本文件中的各字母出現(xiàn)的次數(shù),然后給這些字母編碼,并將文本文件的內(nèi)容編碼后輸出到out.txt中      */

int main()
{
    int n, pow,i=0;
    char ch, *datas = new char[n];
    float total=0;
    do
    {
        printf("請(qǐng)輸入字母個(gè)數(shù):\t: ");
        scanf("%d",&n);
    } while (n < 1);
    int *pows = new int[n];
	for(i=0;i< n;i++)
	{
		printf("請(qǐng)輸入符號(hào) %d ---> ",i+1);
		scanf("%s",&ch);
		datas[i]=ch;
	}
	for(i=0;i< n;i++)
	{
		printf("\n\t請(qǐng)輸入次數(shù) %c ---> ",datas[i]);
		scanf("%d",&pow);
		pows[i]=pow;
		total=total+pows[i];
	}

    HuffmanNode *root = CreateHuffmanTree(n, datas, pows);
    printf("構(gòu)造出哈夫曼樹的權(quán)值為:%d\n",GetPWL(root, 0));
    printf("所有字母的哈夫曼編碼如下:\n");
    GetCodes(root, "");
    FreeNodes(root);
    delete[] datas;
    delete[] pows;
    return 1;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久久久久网| 亚洲一区二区欧美日韩| 自拍偷在线精品自拍偷无码专区| 亚洲色图丝袜美腿| 免费欧美在线视频| 99久久综合狠狠综合久久| 欧美视频一区二区三区四区| 久久综合久久鬼色中文字| 亚洲成人一区二区| av中文字幕一区| 国产亚洲1区2区3区| 蜜臀av一区二区在线免费观看| 欧洲av一区二区嗯嗯嗯啊| 中文av一区特黄| 精品无码三级在线观看视频| 欧美日韩aaaaa| 亚洲乱码中文字幕综合| 国产99久久久国产精品免费看| 精品日韩欧美在线| 日本伊人精品一区二区三区观看方式| 色婷婷综合久久久久中文| 国产精品久久久久久一区二区三区| 国产一区在线精品| 欧美精品一区二区三区蜜桃 | 精品国产一区二区国模嫣然| 亚洲高清免费在线| 91搞黄在线观看| 狠狠v欧美v日韩v亚洲ⅴ| 欧美日韩一区三区四区| 亚洲一区二区三区四区在线| 蜜臀精品久久久久久蜜臀| 日韩三级电影网址| 美国欧美日韩国产在线播放| 日韩视频中午一区| 九九久久精品视频| 精品国产乱码久久久久久影片| 奇米777欧美一区二区| 91精品黄色片免费大全| 轻轻草成人在线| 精品精品欲导航| 国产美女精品在线| 国产精品视频线看| 91麻豆文化传媒在线观看| 一区二区视频在线| 欧美日韩激情一区二区三区| 日韩va欧美va亚洲va久久| 5566中文字幕一区二区电影| 日韩国产精品大片| 亚洲精品一区二区三区蜜桃下载| 国产乱码精品一区二区三区av| 中文字幕精品在线不卡| 91蝌蚪porny九色| 亚洲综合色自拍一区| 欧美日本不卡视频| 国产一区视频网站| 国产精品福利一区| 欧美在线免费观看视频| 人人超碰91尤物精品国产| 国产亚洲精品7777| 欧美韩国一区二区| 91在线观看视频| 免费在线观看精品| 国产精品国产馆在线真实露脸 | 一区二区免费在线| 欧美不卡一区二区三区四区| 成人av在线看| 石原莉奈在线亚洲二区| 久久久www免费人成精品| 91久久一区二区| 国精产品一区一区三区mba视频| 国产精品久久久久久福利一牛影视| 欧美网站大全在线观看| 国产一区二区三区视频在线播放 | 久久久国产精品麻豆| 在线观看日韩高清av| 国产一区二区三区免费播放| 亚洲三级理论片| 精品久久久三级丝袜| 色婷婷精品久久二区二区蜜臀av| 美国欧美日韩国产在线播放| 亚洲精品一二三| 欧美高清在线一区二区| 日韩午夜小视频| 欧美午夜寂寞影院| 国产91对白在线观看九色| 日本视频一区二区| 亚洲精品伦理在线| 国产精品网站一区| 日韩免费观看高清完整版在线观看| 成人动漫av在线| 国产最新精品免费| 日本不卡一二三| 一区二区三区四区精品在线视频| 国产色爱av资源综合区| 欧美一区三区二区| 欧美系列一区二区| 91蜜桃传媒精品久久久一区二区| 国产精品亚洲午夜一区二区三区| 日韩av一级电影| 亚洲精品高清在线| 一色屋精品亚洲香蕉网站| 久久久三级国产网站| 精品少妇一区二区三区免费观看 | 在线视频国产一区| 粉嫩aⅴ一区二区三区四区| 经典三级在线一区| 久久精品国产99| 美女国产一区二区| 久久99日本精品| 国产在线麻豆精品观看| 美国十次综合导航| 国内精品国产成人| 国内偷窥港台综合视频在线播放| 久久99久久99| 韩国精品一区二区| 国模一区二区三区白浆| 黄色小说综合网站| 国产专区欧美精品| 国产激情91久久精品导航| 国产精品99久久久| 成人av免费网站| 色综合久久久久综合体| 2023国产精品自拍| 国产日产欧美精品一区二区三区| 国产日韩av一区| 一区免费观看视频| 一个色在线综合| 偷拍亚洲欧洲综合| 蜜臀av一区二区在线观看| 国产一区二区在线视频| 懂色av一区二区三区免费观看 | 欧美日韩国产影片| 欧美一区二区视频免费观看| 久久综合一区二区| 中文字幕欧美日韩一区| 亚洲欧美日韩小说| 午夜精品一区二区三区电影天堂 | 亚洲午夜久久久久| 免费高清在线视频一区·| 国产精品91xxx| 在线欧美一区二区| 91精品国产色综合久久不卡蜜臀 | 风间由美中文字幕在线看视频国产欧美| 国产不卡高清在线观看视频| 色综合天天做天天爱| 9191成人精品久久| 久久久久久久免费视频了| 亚洲美女免费视频| 日韩1区2区日韩1区2区| 成人免费黄色大片| 欧美日韩一区二区在线视频| 久久综合色婷婷| 亚洲一区成人在线| 国产一区二区导航在线播放| 一本色道a无线码一区v| 日韩三级高清在线| 一区二区三区自拍| 国产一区二区三区在线观看精品 | 一区二区理论电影在线观看| 蜜桃精品视频在线| 91尤物视频在线观看| 亚洲精品在线观| 亚洲一二三四区| 国产aⅴ综合色| 欧美大片一区二区三区| 亚洲精选免费视频| 国产成人亚洲精品青草天美| 欧美日韩国产欧美日美国产精品| 国产免费观看久久| 久久se这里有精品| 欧美精品高清视频| 亚洲精品日日夜夜| 成人免费福利片| 精品毛片乱码1区2区3区| 亚洲伊人伊色伊影伊综合网| 丁香一区二区三区| 精品国精品国产| 性做久久久久久久免费看| 9i看片成人免费高清| 久久久精品国产免大香伊| 天天综合色天天综合色h| 色老综合老女人久久久| 国产精品久久久久久久久免费桃花 | 6080日韩午夜伦伦午夜伦| 亚洲素人一区二区| 成人免费视频一区二区| 麻豆精品视频在线观看| 欧美日韩一区 二区 三区 久久精品| 国产精品国产a级| 成人在线视频首页| 中文字幕第一区第二区| 国产精品系列在线播放| 精品国产不卡一区二区三区| 麻豆91精品视频| 精品国产污污免费网站入口 | 精品蜜桃在线看| 美女视频网站久久| 欧美精选午夜久久久乱码6080| 一区二区三区加勒比av| 精品视频在线视频|