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

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

?? 哈夫曼編碼.txt

?? Huffman編碼實(shí)現(xiàn)壓縮和解壓縮
?? TXT
字號(hào):
/*優(yōu)先隊(duì)列*/
#ifndef _priorityqueue_H
#define _priorityqueue_H
struct heapstruct;
typedef struct heapstruct *priorityqueue;
typedef struct HuffmanTree *Pos;
typedef Pos Tree;
struct NODE
{
    long i;
    unsigned char c;
};
struct HuffmanTree
{
    struct NODE elements;
    Tree LeftTree;
    Tree RightTree;
};
typedef Tree elementtype;
struct heapstruct
{
    int max;
    int size;
    elementtype *elements;
};
priorityqueue initialize(int MAX);
void insert(elementtype x, priorityqueue q);
elementtype deletemin(priorityqueue q);
int isfull(priorityqueue q);
int isempty(priorityqueue q);
#endif
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include"priorityqueue.h"
#define MIN -1;
priorityqueue initialize(int MAX)
{
    priorityqueue H = NULL;
    H = (priorityqueue)malloc(sizeof(struct heapstruct));
    if(NULL == H)
    {
        printf("NO MEMORY!!!\n");
        return NULL;
    }
    else
    {
        if((H->elements = (elementtype*)malloc((MAX+1) * sizeof(elementtype))) != NULL)
        {
            H->elements[0] = (Tree)malloc(sizeof(struct HuffmanTree));
            H->elements[0]->elements.c = 0;
            H->elements[0]->elements.i = MIN;
            H->elements[0]->LeftTree = NULL;
            H->elements[0]->RightTree = NULL;
            H->max = MAX;
            H->size = 0;
            return H;
        }
        else
        {
            free(H);
            return NULL;
        }
    }
}
void insert(elementtype x,priorityqueue q)
{
    assert(!isfull(q));
    int j = 0;
    q->size = q->size + 1;
    for(j = q->size; x->elements.i < q->elements[j/2]->elements.i;j = j/2)
    {
        q->elements[j] = q->elements[j/2];
    }
    q->elements[j] = x;
}
elementtype deletemin(priorityqueue q)
{
    assert(!isempty(q));
    elementtype x ;
    elementtype last;
    int i = 0;
    int child = 0;
    last = q->elements[q->size];
    q->size = q->size - 1;
    x = q->elements[1];
    for(i = 1; 2*i <= q->size;i = child )
    {
        child = 2 * i;
        if(2*i != q->size && q->elements[child]->elements.i > q->elements[child+1]->elements.i)
        {
            child++;
        }
        if(last->elements.i > q->elements[child]->elements.i)
        {
            q->elements[i] = q->elements[child];
        }
        else
        {
            break;
        }
    }
    q->elements[i] = last;
    return x;
}
int isfull(priorityqueue q)
{
    assert(NULL != q);
    return q->size == q->max ?1:0;
}
int isempty(priorityqueue q)
{
    assert(NULL != q);
    return q->size == 0?1:0;
}
/*實(shí)現(xiàn)huffman編碼壓縮*/
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include"priorityqueue.h"

long FileSize = 0;
struct CODE
{
    char CodeString[256];
    unsigned char c;
    long i;
}
G_CODE[256];

struct HuffmanTree CodeTree[512];
void copyc_str(char c ,char *s,int n);
Tree BuildTree(priorityqueue Q);
void EnCode(char s[],Tree T);
void SaveTree(Tree T);

void HuffmanCode(void)
{
    char s[256] = {'\0'};
    Tree T = NULL;
    priorityqueue Q = NULL;
    Q = initialize(512);
    unsigned char c = 0;
    int i = 0;
    FILE *FpFrom = NULL;
    FpFrom = fopen("test.txt", "rb");
    for(i = 0; i < 256 ; i++)
    {
        G_CODE[i].i = 0;
    }
    if(NULL != FpFrom)
    {
        while(!feof(FpFrom))
        {
            c = fgetc(FpFrom);
            G_CODE[c].c = c;
            G_CODE[c].i++;
            FileSize++;
        }
    }
    fclose(FpFrom);
    for(i = 0; i < 256 ; i++)
    {
        if(G_CODE[i].i > 0)
        {
            T = (Tree)malloc(sizeof(struct HuffmanTree));
            if(NULL == T)
            {
                printf("NO Memory!!!\n");
            }
            else
            {
                T->elements.c = G_CODE[i].c;
                T->elements.i = G_CODE[i].i;
                T->LeftTree = NULL;
                T->RightTree = NULL;
                insert(T,Q);
            }
        }
    }
    T = BuildTree(Q);
    EnCode(s,T);
    SaveTree(T);
    FreeTree(T);
}

FreeTree(Tree T)
{
    if(NULL != T)
    {
        FreeTree(T->LeftTree);
        FreeTree(T->RightTree);
        free(T);
    }
}

Tree BuildTree(priorityqueue Q)
{
    Tree LeftTree = NULL;
    Tree RightTree = NULL;
    Tree T = NULL;
    while(Q->size >= 2)
    {
        T = (Tree)malloc(sizeof(struct HuffmanTree));
        if(NULL != T)
        {
            T->elements.c = '-';
            LeftTree = deletemin(Q);
            RightTree = deletemin(Q);
            T->LeftTree = LeftTree;
            T->RightTree = RightTree;
            T->elements.i = T->LeftTree->elements.i + T->RightTree->elements.i;
            insert(T,Q);
        }
    }
    T = deletemin(Q);
    return T;
}
void EnCode(char s[],Tree T)
{
    char Left[256];
    char Right[256];
    if((NULL == T->RightTree) && (NULL == T->LeftTree))
    {
        strcpy(G_CODE[T->elements.c].CodeString , s);
    }
    else
    {
        strcpy(Left,s);
        copyc_str('0',Left,256);
        strcpy(Right,s);
        copyc_str('1',Right,256);
        EnCode(Right,T->RightTree);
        EnCode(Left,T->LeftTree);
    }
}
void SaveTree(Tree T)
{
    int i = 0;
    int k = 0;
    CodeTree[0] = *T;
    /*free(T);*/
    for(k = 0;i <= k; i++)
    {
        if(NULL != CodeTree[i].RightTree && NULL != CodeTree[i].LeftTree)
        {
            int m = k+1;
            int n = k+2;
            CodeTree[m] = *(CodeTree[i].LeftTree);
            CodeTree[i].LeftTree = m;
            CodeTree[n] = *(CodeTree[i].RightTree);
            CodeTree[i].RightTree = n;
            //free(CodeTree[i].LeftTree);
            //free(CodeTree[i].RightTree);
            k = k + 2;
        }
        else
        {
            CodeTree[i].LeftTree = -1;
            CodeTree[i].RightTree = -1;
        }
    }
}
void copyc_str(char c ,char *s,int n)
{
    assert(n > strlen(s));
    char *p = NULL;
    p = s;
    while('\0' != *p)
    {
        p++;
    }
    *p = c;
    p++;
    *p = '\0';
}
void compress(void)
{
    int i = 0;
    int j = 0;
    unsigned char c = '0';
    unsigned char code = 0;
    FILE *FpCompressed = NULL;
    FILE *FpFrom = NULL;
    HuffmanCode();
    FpFrom = fopen("test.txt", "rb");
    FpCompressed = fopen("test.hf", "wb");
    if(NULL != FpFrom&&NULL != FpCompressed)
    {
        fprintf(FpCompressed,"%c%c", 'H','F');
        fprintf(FpCompressed, "%ld", FileSize);
        for(i = 0; i < 512 ; i++)
        {
            fprintf(FpCompressed ,"%c,%d,%d,", CodeTree[i].elements.c, CodeTree[i].LeftTree, CodeTree[i].RightTree);
        }
        while(!feof(FpFrom))
        {
            char temp[512] = {'\0'};
            c = fgetc(FpFrom);
            strcpy(temp,G_CODE[c].CodeString);
            int k = strlen(temp);
            char *p = temp;
            for(; k > 0; k--,p++)
            {
                if(*p == '0')
                {
                    code = code<<1;
                    j++;
                    if(8 == j)
                    {
                        fputc(code,FpCompressed);
                        j = 0;
                    }
                }
                else if(*p == '1')
                {
                    code = (code<<1) + 1;
                    j++;
                    if(8 == j)
                    {
                        fputc(code,FpCompressed);
                        j = 0;
                    }
                }
            }
        }
    }
    fclose(FpFrom);
    if(0 != j)
    {
        j = 8-j;
        code = code<<j;
        fputc(code,FpCompressed);
    }
    fclose(FpCompressed);
}
main()
{
    printf("compressing......\n");
    compress();
    UnCompress();
    printf("ok\n");
    return 0;
}
int UnCompress(void)
{
    int i = 0;
    int j = 0;
    long size = 0;
    unsigned char c = '0';
    struct CodeTreeToUncompress
    {
        unsigned char c;
        int Left;
        int Right;
    }CTTU[512];
    FILE *FpCompressed = NULL;
    FILE *UnCompressed = NULL;
    UnCompressed = fopen("test.t", "wb");
    FpCompressed = fopen("test.hf", "rb");
    if(NULL != UnCompressed && NULL != FpCompressed)
    {
        if(fgetc(FpCompressed) == 'H')
        {
            if(fgetc(FpCompressed) == 'F')
            {
                ;
            }
            else
            {
                printf("error\n");
                return 0;
            }
        }
        else
        {
            printf("error\n");
            return 0;
        }
        fscanf(FpCompressed,"%ld", &size);
        for(i = 0;i < 512; i++)
        {
            fscanf(FpCompressed,"%c,%d,%d,", &CTTU[i].c, &CTTU[i].Left, &CTTU[i].Right);
        }
        while(!feof(FpCompressed)&&size > 0)
        {
            c = fgetc(FpCompressed);
            for(i = 0; i < 8; i++)
            {
                if((c>>7)|0 != 0)
                {
                    j = CTTU[j].Right;
                    if(CTTU[j].Right == -1 && CTTU[j].Left == -1)
                    {
                        fputc(CTTU[j].c,UnCompressed);
                        j = 0;
                        size--;
                    }
                }
                else
                {
                    j = CTTU[j].Left;
                    if(CTTU[j].Right == -1 && CTTU[j].Left == -1)
                    {
                        fputc(CTTU[j].c,UnCompressed);
                        j = 0;
                        size--;
                    }
                }
                c = c<<1;
            }
        }
    }
        fclose(FpCompressed);
        fclose(UnCompressed);
}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91亚洲午夜精品久久久久久| 欧美精品乱码久久久久久按摩| 亚洲综合成人在线| 日韩精品一区二区三区在线播放 | 蜜臀久久99精品久久久久久9| 国产欧美日韩不卡| 91精品国产免费| 色欧美88888久久久久久影院| 激情久久五月天| 亚洲国产综合在线| 国产精品乱码人人做人人爱 | 91视频在线观看| 国内外成人在线视频| 伊人一区二区三区| 国产欧美日韩久久| 337p日本欧洲亚洲大胆精品| 欧美日韩精品福利| 日本道在线观看一区二区| 成人性色生活片免费看爆迷你毛片| 五月婷婷综合网| 亚洲免费观看视频| 久久精品人人做| 精品久久久久久无| 在线不卡中文字幕| 欧美喷潮久久久xxxxx| 色噜噜久久综合| 91亚洲国产成人精品一区二三| 成人精品国产免费网站| 国产一区999| 国产精品一区二区在线观看不卡| 日韩av午夜在线观看| 视频一区免费在线观看| 亚洲成人资源在线| 香蕉av福利精品导航| 亚洲永久免费av| 亚洲1区2区3区视频| 亚洲综合色区另类av| 亚洲免费观看高清完整版在线| 亚洲国产成人在线| 中文字幕av不卡| 国产精品狼人久久影院观看方式| 国产亚洲综合av| 国产精品丝袜久久久久久app| 国产欧美日韩精品一区| 国产精品三级av| 国产精品每日更新| 亚洲日本成人在线观看| 亚洲久本草在线中文字幕| 亚洲欧美日韩电影| 一区二区三区高清不卡| 亚洲妇熟xx妇色黄| 秋霞av亚洲一区二区三| 久久av中文字幕片| 欧美亚洲日本国产| 欧美电影在线免费观看| 日韩一区二区三区三四区视频在线观看| 日韩欧美一级特黄在线播放| 久久久99精品久久| 国产精品免费视频网站| 成人免费一区二区三区在线观看| 自拍偷拍欧美精品| 亚洲成人久久影院| 精品中文字幕一区二区小辣椒| 国产精品夜夜嗨| 91色.com| 日韩三级中文字幕| 亚洲国产成人一区二区三区| 亚洲乱码精品一二三四区日韩在线| 亚洲综合一区在线| 看电影不卡的网站| 99久久99精品久久久久久| 欧美视频一区在线| 精品国产凹凸成av人网站| 中文字幕不卡在线观看| 夜夜精品视频一区二区| 久久精品国产一区二区| 99精品黄色片免费大全| 91精品麻豆日日躁夜夜躁| 国产视频一区不卡| 一区二区三国产精华液| 久久疯狂做爰流白浆xx| 91猫先生在线| 欧美一二三区在线观看| 中文字幕一区二区三区在线播放| 婷婷六月综合网| 丰满岳乱妇一区二区三区| 欧美在线看片a免费观看| 欧美岛国在线观看| 日韩伦理电影网| 久久99精品网久久| 色噜噜狠狠色综合欧洲selulu| 日韩精品一区二区三区在线| 亚洲美女视频在线观看| 精品中文字幕一区二区小辣椒| 在线这里只有精品| 久久精品这里都是精品| 日本亚洲三级在线| 色综合久久久久久久久久久| 26uuu成人网一区二区三区| 亚洲一区精品在线| 国产99久久久久久免费看农村| 欧美日韩精品欧美日韩精品一| 日本一区二区三区视频视频| 免费一级欧美片在线观看| 在线视频综合导航| 久久久99久久| 久久成人免费网| 欧美日韩国产另类一区| 国产精品久久久99| 国产精品自产自拍| 欧美成人a视频| 婷婷激情综合网| 欧美在线|欧美| 综合色中文字幕| 国产成人av一区| 欧美刺激脚交jootjob| 日韩精品乱码免费| 精品视频色一区| 一区二区三区中文免费| 99久久夜色精品国产网站| 国产亚洲一二三区| 久久成人免费网站| 欧美电影免费观看高清完整版在 | 成人av网站大全| 国产无一区二区| 国内偷窥港台综合视频在线播放| 欧美一区二区成人6969| 日韩avvvv在线播放| 欧美日韩亚洲综合| 尤物av一区二区| 色狠狠综合天天综合综合| 中文字幕色av一区二区三区| 成人综合婷婷国产精品久久| 精品黑人一区二区三区久久| 麻豆成人综合网| 日韩精品在线一区二区| 狠狠色狠狠色综合| 精品日韩成人av| 久久国产尿小便嘘嘘| 精品捆绑美女sm三区| 精品亚洲国产成人av制服丝袜| 欧美成人国产一区二区| 久久99精品一区二区三区三区| 2020日本不卡一区二区视频| 国产在线精品视频| 激情偷乱视频一区二区三区| 日韩一区二区三区四区五区六区| 天天免费综合色| 精品国产乱码久久| 国产成人在线视频网址| 国产精品久久久久aaaa| 91丝袜美腿高跟国产极品老师 | 欧美精品1区2区3区| 日本一道高清亚洲日美韩| 欧美成人艳星乳罩| 国产成人av福利| 成人免费一区二区三区在线观看| 91美女片黄在线| 性做久久久久久免费观看欧美| 日韩亚洲欧美中文三级| 国产盗摄视频一区二区三区| 国产精品天美传媒沈樵| 在线观看91视频| 日本不卡高清视频| 欧美国产精品一区| 日本精品视频一区二区三区| 亚洲国产综合人成综合网站| 日韩欧美一二三四区| 丰满白嫩尤物一区二区| 亚洲伦理在线免费看| 538prom精品视频线放| 国产精品亚洲午夜一区二区三区| 亚洲人精品午夜| 91精品国产福利| 成人动漫在线一区| 亚洲一区二区三区视频在线| 26uuu精品一区二区三区四区在线| 粉嫩av亚洲一区二区图片| 一区二区激情小说| 欧美大片日本大片免费观看| jvid福利写真一区二区三区| 香蕉成人啪国产精品视频综合网| 久久天天做天天爱综合色| 91久久精品网| 久久丁香综合五月国产三级网站| 亚洲天堂久久久久久久| 精品人伦一区二区色婷婷| 91色九色蝌蚪| 国产在线视频不卡二| 一区二区三区日本| xnxx国产精品| 在线成人av影院| 97精品久久久午夜一区二区三区| 美女一区二区久久| 亚洲自拍偷拍欧美| 国产日韩欧美不卡| 日韩一区二区免费电影| 99久久99精品久久久久久| 精品一二线国产| 日韩国产精品91|