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

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

?? main.cpp

?? 利用haffman編碼對文章實現壓縮和解密
?? CPP
字號:
#include <iostream>
#include <cmath>
#include <cstring>
#define N 128
using namespace std;

struct HuffmanNode
{
    int weight;
    int parent;
    int lchild;
    int rchild;
    char ch;
};

HuffmanNode HT[300];  //存儲huffman樹
char HC[N][100];  //存儲huffman編碼
int fre[N];    //fre[]中存放對應字母的次數
char le[N];    //le數組存儲文章中出現的字母
int m, sum, total = 0;  //m為huffman數的結點總數,total為字符種類數, sum為文章中字符的總個數


//初始化字母出現頻率數組f[]
void InitFre()
{
    int i;

    for (i = 0; i < N; i++)
    fre[i] = 0;
}
//讀入文件,計算字母出現個數和頻率
void OpenFile()
{
    char ch;
    int i;

    freopen("Huffman.txt", "rb", stdin);
    while (scanf("%c", &ch) != EOF)   //讀入并計算字母個數
    {
        for (i = 0; i < total; i++) //判斷字母是否已經出現過
        {
            if (ch == le[i])    //字母已經出現過,頻數加一
            {
                fre[i]++;
                break;
            }
        }
        if (i == total)     //字母未出現過
        {
            fre[total]++;
            le[total++] = ch;
        }
    }
}
//函數功能:選擇兩個權值最小的結點
void Select(int &p1, int &p2, int n)
{
    int i, j;
    for (i = 1; i <= n; i++)    //p1初始化
    {
        if (HT[i].parent == -1)
        {
            p1 = i;
            break;
        }
    }
    for (j = i + 1; j <= n; j++)    //p2初始化
    {
        if (HT[j].parent == -1)
        {
            p2 = j;
            break;
        }
    }
    for (i = 1; i <= n; i++)    //選擇一個權值最小的給p1
        if ((HT[p1].weight > HT[i].weight) && (HT[i].parent == -1) && (p2 != i))    p1 = i;
    for (j = 1; j <= n; j++)    //選擇剩下權值最小的給p2
        if ((HT[p2].weight > HT[j].weight) && (HT[j].parent == -1) && (p1 != j))    p2 = j;
}
//存儲各個字符對應的huffman編碼
void Encoding()
{
    int c, p, i;    //c 和p 分別指示T 中孩子和雙親的位置
    char cd[total + 1];    //臨時存放編碼
    int start;     //指示編碼在cd中的位置
    cd[total] = '\0';    //編碼結束符
    for (i = 1; i <= total; i++)    //依次求葉子HT[i]的編碼
    {
        start = total;  //編碼起始位置的初值
        c = i;  //從葉子HT[i]開始上溯
        while ((p = HT[c].parent) != -1)    //p指向的點不是根結點
        {
            cd[--start] = (HT[p]. lchild == c)? '0' : '1';  //若HT[c]是HT[p]的左孩子,則生成代碼0,否則生成代碼1
            c = p; //繼續上溯
        }
        strcpy(HC[i], &cd[start]);  //將編碼復制到編碼表HC中
        printf("%c(%d): %s\n", HT[i].ch, fre[i - 1], HC[i]);    //輸出編碼表
    }
}
//將字母頻數作為權值建立huffman樹
void HuffmanCoding()
{
    int i, p1, p2;
    m = 2 * total - 1;
    for (i = 1; i <= total; i++)  //HT初始化
    {
        HT[i].weight = fre[i - 1];
        HT[i].parent = -1;
        HT[i].lchild = -1;
        HT[i].rchild = -1;
        HT[i].ch = le[i - 1];
    }
    for (i = total + 1; i <= m; i++)  //HT初始化
    {
        HT[i].weight = 0;
        HT[i].parent = -1;
        HT[i].lchild = -1;
        HT[i].rchild = -1;
        HT[i].ch = 0;
    }
    if(total == 1)  //如果只有一個字符,不需要建立huffman樹
    {
        HC[1][0] = '0';
        HC[1][1] = '\0';
        printf("%c(%d): %s\n", HT[1].ch, fre[0], HC[1]);    //輸出編碼表
        return;
    }
    for (i = total + 1; i <= m; i++)   // 建立huffman樹
    {
        Select(p1, p2, i - 1);  //選擇兩個最小的權值
        HT[p1].parent = i;
        HT[p2].parent = i;
        HT[i].lchild = p1;
        HT[i].rchild = p2;
        HT[i].weight = HT[p1].weight + HT[p2].weight;
    }
    Encoding(); //存儲各個字符對應的huffman編碼
}
//將文章按照huffman編碼壓縮
void EssayTranslate()
{
    freopen("Huffman.txt", "rb", stdin);
    freopen("Encode.txt", "wb", stdout);
    char ch;    //存放文章中的字符
    char te = 0;    //存放轉換后的字符
    int temp = 7;   //指示壓縮過的huffman編碼長度
    sum = 1;    //文章中出現過的字符個數
    while (scanf("%c", &ch) != EOF)   //將Huffman.txt中的字母編碼輸出到Huffman.txt中
    {
        int i;
        for (i = 1; i <= total; i++)    //查找字符的huffman編碼
        {
            if (ch == HT[i].ch)
                break;
        }
        int len = strlen(HC[i]);
        int j;
        for (j = 0; j < len; j++)   //將huffman編碼壓縮為一個字符儲存
        {
            if (HC[i][j] == '1')
                te = te | (1 << temp);
            temp--;
            if (temp == -1)  //八位huffman編碼壓縮為一個字符后輸出
            {
                printf("%c", te);
                te = 0;
                temp = 7;
            }
        }
        sum++;
    }
    if (temp != 7)  printf("%c", te);//如果最后的剩余編碼不足八位,輸出
}
//將壓縮后的文章解壓
void EssayDecode()
{
    freopen("Encode.txt", "rb", stdin);
    freopen("Decode.txt", "wb", stdout);
    char ch;    //指示壓縮文章中的字符
    char str[100];  //指示壓縮文章中字符對應的huffman編碼
    int flag = 1;   //指示已經轉換完的字符個數
    int pos = m, j = 0; //pos指示結點位置,j指示str中0、1的位置
    while (scanf("%c", &ch) != EOF)
    {
        int i;
        for (i = 7; i >= 0; i--)    //依次轉換壓縮后字符所代表的huffman編碼
        {
            if (ch & (1 << i))  //對應編碼為1,pos指向結點的右子樹
            {
                str[j++] = '1';
                pos = HT[pos].rchild;
            }
            else    //對應編碼為零,pos指向結點的左子樹
            {
                str[j++] = '0';
                pos = HT[pos].lchild;
            }
            if (HT[pos].lchild == -1 || pos == -1)   //如果已經到了huffman樹葉子的位置,輸出所代表的字符
            {
                str[j] = '\0';
                j = 0;
                int p;
                for(p = 1; p <= total; p++) //找到編碼str對應的字符輸出
                {
                    if(!strcmp(str, HC[p]))
                        break;
                }
                printf("%c", HT[p].ch);
                pos = m;
                flag++;
                if(flag == sum)  return;    //如果已經轉換了所有的字符,結束
            }
        }
    }
}

int main()
{
    InitFre();  //字母出現頻率數組fre初始化
    OpenFile();    //讀入文件,計算字母出現個數和頻率
    HuffmanCoding();    //將字母頻數作為權值建立huffman樹
    EssayTranslate();    //將文章按照huffman編碼壓縮
    EssayDecode();   //將壓縮后的文章解壓
    return 0;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲成人资源在线| 国产美女一区二区三区| 色婷婷综合久久久久中文一区二区 | 麻豆视频一区二区| 视频一区二区三区中文字幕| 亚洲福利电影网| 五月天丁香久久| 日本91福利区| 国产乱国产乱300精品| 国产成人小视频| 成人黄色软件下载| 91色视频在线| 欧美日韩国产一区| 日韩午夜电影av| 精品毛片乱码1区2区3区| 久久久久国产成人精品亚洲午夜| 国产欧美日韩三区| 亚洲嫩草精品久久| 日本欧美肥老太交大片| 国产精品一区久久久久| 成人午夜电影久久影院| 色婷婷综合五月| 制服丝袜亚洲色图| 久久久精品欧美丰满| 亚洲欧美自拍偷拍色图| 亚洲一区二区av在线| 精品在线免费视频| eeuss鲁片一区二区三区 | 日韩美女主播在线视频一区二区三区| 日韩欧美一级特黄在线播放| 国产清纯在线一区二区www| 樱桃视频在线观看一区| 免费高清不卡av| av午夜精品一区二区三区| 欧美日韩国产一级片| 久久久www免费人成精品| 亚洲柠檬福利资源导航| 韩国欧美一区二区| 91丝袜美腿高跟国产极品老师| 欧美一区二区在线不卡| 国产精品久久久久久久久免费丝袜| 天天做天天摸天天爽国产一区 | 日韩女优av电影在线观看| 国产精品乱码妇女bbbb| 日韩av中文在线观看| 色诱视频网站一区| 中文字幕第一区综合| 老司机精品视频线观看86 | 蜜桃av噜噜一区二区三区小说| www.日韩大片| xfplay精品久久| 亚洲国产视频在线| 成人av在线一区二区三区| 欧美一区二区三区播放老司机| 国产精品视频麻豆| 国产一区二区在线观看免费| 欧美日韩视频在线第一区| 亚洲美腿欧美偷拍| 成人丝袜18视频在线观看| 久久久久久久久久久久久久久99 | 国产三级久久久| 精品在线视频一区| 欧美成人一区二区三区片免费| 亚洲在线视频一区| 色猫猫国产区一区二在线视频| 国产精品久久久久一区| 国产成a人亚洲精品| 久久久久久99精品| 国产精品18久久久久久久久久久久 | 欧美日韩高清在线| 一区二区三区资源| 色综合久久久久久久久久久| 国产精品色哟哟| 99国产精品久久久久| 亚洲视频 欧洲视频| 91免费视频网址| 亚洲图片另类小说| 欧美性大战久久| 日韩国产高清影视| 日韩精品一区二| 极品美女销魂一区二区三区| 26uuu亚洲综合色| 国产一区二区女| 欧美国产日韩a欧美在线观看| 成人毛片视频在线观看| 亚洲图片另类小说| 欧美日韩精品一区二区三区四区| 亚洲国产一区视频| 精品三级av在线| 国产成人免费av在线| 亚洲欧美日韩久久| 在线不卡中文字幕| 国产一区免费电影| 亚洲日本va午夜在线影院| 欧美日韩和欧美的一区二区| 精品在线一区二区| 自拍偷拍亚洲综合| 欧美一区二区三区在线观看视频| 美脚の诱脚舐め脚责91| 国产精品久久久久一区二区三区| 欧洲精品中文字幕| 久久精品国产亚洲一区二区三区| 国产精品色眯眯| 欧美日韩精品一区二区天天拍小说| 蜜臀av一区二区在线免费观看| 欧美国产日韩亚洲一区| 欧美日韩一区国产| 高清不卡一二三区| 日本伊人色综合网| 最新国产精品久久精品| 91精品国产综合久久久久| 成人黄页在线观看| 美国十次了思思久久精品导航| 国产精品国产三级国产普通话蜜臀 | 在线综合+亚洲+欧美中文字幕| 精品一二三四在线| 亚洲国产成人porn| 国产精品成人一区二区三区夜夜夜| 欧美日精品一区视频| 国产麻豆视频一区| 免费在线观看一区| 樱花影视一区二区| 国产精品视频看| 日韩一区二区三区四区五区六区| 99久久伊人网影院| 国产成人在线视频网站| 天堂午夜影视日韩欧美一区二区| 国产精品伦一区二区三级视频| 日韩小视频在线观看专区| 91精彩视频在线| 成人av影视在线观看| 国产毛片精品视频| 久久66热偷产精品| 麻豆精品一区二区av白丝在线| 成人免费在线视频| 国产精品三级视频| 中文字幕精品综合| 久久久久久久av麻豆果冻| 日韩美女视频一区二区在线观看| 欧美在线综合视频| 色婷婷久久99综合精品jk白丝| 国产精品一区一区| 国产精品911| 国产成a人无v码亚洲福利| 国产在线精品一区二区夜色 | 一个色妞综合视频在线观看| 国产精品第四页| 国产精品久久久久久久岛一牛影视 | 一区二区三区在线观看欧美| 中文字幕视频一区| 中文字幕在线一区| 一区在线观看免费| 亚洲精品国产第一综合99久久| 亚洲欧美日本韩国| 亚洲午夜在线视频| 日韩成人dvd| 韩国精品一区二区| 成人免费av网站| 91蜜桃传媒精品久久久一区二区| 91影院在线观看| 91久久精品日日躁夜夜躁欧美| 色婷婷狠狠综合| 欧美色爱综合网| 日韩欧美国产wwwww| 久久天堂av综合合色蜜桃网| 欧美激情一区二区三区四区| 国产精品全国免费观看高清 | 在线日韩国产精品| 欧美美女一区二区在线观看| 欧美成人精精品一区二区频| 久久蜜桃av一区精品变态类天堂| 国产精品私人影院| 亚洲黄色免费网站| 老司机精品视频线观看86| 国产精品一二三四五| 色天天综合色天天久久| 制服丝袜亚洲色图| 中文子幕无线码一区tr| 亚洲精品国产成人久久av盗摄 | 国产三级久久久| 综合分类小说区另类春色亚洲小说欧美| 亚洲欧美日韩国产另类专区| 日韩影院在线观看| 成人午夜精品一区二区三区| 精品视频在线视频| 国产欧美日韩另类视频免费观看| 亚洲三级小视频| 理论电影国产精品| 在线观看区一区二| 久久综合九色综合97_久久久| 1024国产精品| 久久99精品久久只有精品| www.爱久久.com| 精品国产区一区| 亚洲一区免费视频| 国产黄人亚洲片| 欧美日韩国产大片| 亚洲欧美日韩人成在线播放| 精品一区二区三区视频在线观看 | 国产精品二区一区二区aⅴ污介绍|