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

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

?? 哈夫曼.c

?? 數(shù)據(jù)結(jié)構(gòu)的全部課程實(shí)驗(yàn)
?? C
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
#include<stdio.h>
#include<malloc.h>
#include<math.h>
#define NULL 0

typedef struct huff_code_node    //存儲(chǔ)編碼的鏈表
{
    char ch;    //編碼對(duì)應(yīng)的字符
    char code[100];        //字符對(duì)應(yīng)的哈夫曼碼
    struct huff_code_node *next;    
}hnode,*huff;

typedef struct tree_Node    //二叉樹(shù)結(jié)點(diǎn)
{
    char ch;    //字符內(nèi)容
    int amount;    //字符在字符串中出現(xiàn)的次數(shù)
    struct tree_Node *left,*right;    //指向左子樹(shù)與右子樹(shù)
}tnode,*bt;

typedef struct list_node        //鏈表結(jié)點(diǎn)
{
    char ch;    //存儲(chǔ)字符串中的字符
    int amount;    //字符在字符串中出現(xiàn)的次數(shù)
    tnode *son;    //鏈表結(jié)點(diǎn)帶有二叉子樹(shù)的根結(jié)點(diǎn)指針
    struct list_node *next;    //指向鏈表中下一個(gè)結(jié)點(diǎn)
}Node,*L;

typedef struct stack_node
{
    char ch;    //存儲(chǔ)字符
    int amount;        //出現(xiàn)次數(shù)
    bt son;        //指向二叉樹(shù)的某結(jié)點(diǎn)
    struct stack_node *next;
}snode,*stack;


char t[200],*str,*c;    //用于存儲(chǔ)和處理輸入的字符串
bt root=NULL;        //哈夫曼樹(shù)
L l,p,q,new_node;    //鏈表結(jié)點(diǎn)
huff hlist;        //計(jì)算得到的編碼表
int char_num;    //輸入的不同字符數(shù)量
int char_amount;    //輸入的所有字符數(shù)量
int code_sum;        //哈夫曼編碼總長(zhǎng)


void initial()        //初始化操作
{
    l=(Node*)malloc(sizeof(Node));        //建立空鏈表
    l->ch='\0';
    l->amount=0;
    l->son=NULL;
    l->next=NULL;

    str=t;    //將字符串指針指向字符串的第一個(gè)位置
    //鍵盤(pán)輸入字符串
    printf("輸入字符串進(jìn)行哈夫曼編碼:\n");
    scanf("%s",str);
    getchar();    
}

void pull_in_list()
{
    int exist;    //表示當(dāng)前字符是否存在于鏈表中,0為不存在,1為已存在
    int n;    //計(jì)算輸入不同字符的數(shù)量,計(jì)算后賦值給全局變量char_num
    int m;    //計(jì)算輸入所有字符的數(shù)量,計(jì)算后賦值給全局變量char_amount
    
    c=str;    //c指向第一個(gè)字符
    
    while(*c!='\0')        //若字符串未讀完
    {
        exist=0;
        p=l;    //p指向鏈表頭結(jié)點(diǎn)
        //尋找該字符是否已經(jīng)在鏈表中
        while(p->next!=NULL)    //若鏈表非空
        {
            p=p->next;
            if(p->ch==*c)    //若當(dāng)前字符已經(jīng)在鏈表中
            {
                exist=1;
                p->amount++;    //字符出現(xiàn)次數(shù)加1
                break;
            }
        }

        if(exist==0)    //若當(dāng)前字符不存在于鏈表中,則分配一個(gè)結(jié)點(diǎn)入表
        {
            new_node=(Node*)malloc(sizeof(Node));
            new_node->ch=*c;
            new_node->amount=1;
            new_node->next=NULL;
            new_node->son=NULL;
            p->next=new_node;
            p=new_node;
        }
        c++;    //讀下一個(gè)字符
    }

    printf("統(tǒng)計(jì)結(jié)果:\n");
    p=l;
    n=0;
    m=0;
    while(p->next!=NULL)
    {
        n++;
        p=p->next;
        m+=p->amount;
        printf("%c--%d\n",p->ch,p->amount);
    }
    char_num=n;
    char_amount=m;
    printf("一共有%d種字符輸入,字符總數(shù)%d\n",char_num,char_amount);
}

int list_element_amount()        //計(jì)算鏈表中結(jié)點(diǎn)的數(shù)量(不包括頭結(jié)點(diǎn))
{
    L temp;        //定義臨時(shí)指針
    int n=0;        //結(jié)點(diǎn)數(shù)量
    temp=l;
    while(temp->next!=NULL)    //后面還有結(jié)點(diǎn)
    {
        n++;
        temp=temp->next;
    }
    return n;
}

bt create()    //建立最優(yōu)二叉樹(shù)
{
    //=========================================
    //這些變量用于尋找最小結(jié)點(diǎn)
    L min1_pos,min2_pos,t,min_pri;
    bt min1_son,min2_son;
    int min1,min2;
    char min1_c,min2_c;
    //=========================================

    //=========================================
    //這些變量用于構(gòu)造二叉子樹(shù)
    bt left,right,root;
    //==========================================

    //==========================================
    //這些變量用于將二叉子樹(shù)信息插入鏈表
    L made,temp_p;
    //============================================

    while(list_element_amount()>=2)    //若表中還有兩個(gè)或以上結(jié)點(diǎn),則歸并繼續(xù)
    {
        //選擇次數(shù)值最小的兩個(gè)結(jié)點(diǎn)

        //============================================================================
        //先尋找第一個(gè)小結(jié)點(diǎn)
        t=l->next;
        min1=t->amount;        //將第一個(gè)結(jié)點(diǎn)的次數(shù)值賦給min1
        min1_pos=t;            //將第一個(gè)結(jié)點(diǎn)的位置指針賦給min1_pos
        min1_c=t->ch;        //將第一個(gè)結(jié)點(diǎn)的字符賦值給min1_c
        min1_son=t->son;    //將第一個(gè)結(jié)點(diǎn)的二叉指針賦值給min1_son
        min_pri=l;            //min_pri始終指向最小結(jié)點(diǎn)的前驅(qū),以方便刪除最小結(jié)點(diǎn)

        while(t->next!=NULL)
        {
            t=t->next;
            if(min1>t->amount)    //發(fā)現(xiàn)更小的結(jié)點(diǎn)
            {
                min1=t->amount;        //將當(dāng)前結(jié)點(diǎn)的次數(shù)值賦給min1
                min1_pos=t;            //將當(dāng)前結(jié)點(diǎn)的位置指針賦給min1_pos
                min1_c=t->ch;        //將當(dāng)前結(jié)點(diǎn)的字符賦值給min1_c
                min1_son=t->son;    //將當(dāng)前結(jié)點(diǎn)的二叉指針賦值給min1_son
            }
        }//退出本循環(huán)時(shí),最小結(jié)點(diǎn)的信息找出,將該結(jié)點(diǎn)刪除

        min_pri=l;
        while(min_pri->next!=min1_pos)
            min_pri=min_pri->next;
        //退出循環(huán)時(shí)min_pri指向min1_pos的前驅(qū)
        min_pri->next=min1_pos->next;        //刪除結(jié)點(diǎn)min1_pos
        //尋找第一個(gè)小結(jié)點(diǎn)完成
        //=================================================================

        //=================================================================
        //先尋找第二個(gè)小結(jié)點(diǎn)
        t=l->next;
        min2=t->amount;        //將第二個(gè)結(jié)點(diǎn)的次數(shù)值賦給min2
        min2_pos=t;            //將第二個(gè)結(jié)點(diǎn)的位置指針賦給min2_pos
        min2_c=t->ch;
        min2_son=t->son;
        min_pri=l;        //min_pri始終指向最小結(jié)點(diǎn)的前驅(qū),以方便刪除最小結(jié)點(diǎn)

        while(t->next!=NULL)
        {
            t=t->next;
            if(min2>t->amount)    //發(fā)現(xiàn)更小的結(jié)點(diǎn)
            {
                min2=t->amount;        //將當(dāng)前結(jié)點(diǎn)的次數(shù)值賦給min2
                min2_pos=t;            //將當(dāng)前結(jié)點(diǎn)的位置指針賦給min2_pos
                min2_c=t->ch;
                min2_son=t->son;
            }
        }//退出本循環(huán)時(shí),最小結(jié)點(diǎn)的信息找出,將該結(jié)點(diǎn)刪除

        min_pri=l;
        while(min_pri->next!=min2_pos)
            min_pri=min_pri->next;
        //退出循環(huán)時(shí)min_pri指向min1_pos的前驅(qū)
        min_pri->next=min2_pos->next;        //刪除結(jié)點(diǎn)min2_pos
        //尋找第二個(gè)小結(jié)點(diǎn)完成
        //=================================================================


        //==================================================================
        //兩個(gè)最小結(jié)點(diǎn)找到,由這對(duì)結(jié)點(diǎn)級(jí)成一個(gè)二叉子樹(shù),將根結(jié)點(diǎn)插入鏈表中
        if(min1_son==NULL)    //該結(jié)點(diǎn)無(wú)二叉子樹(shù)指針,則須新分配一個(gè)二叉樹(shù)結(jié)點(diǎn)
        {
            left=(bt)malloc(sizeof(tnode));        //產(chǎn)生左孩子
            left->amount=min1;        //次數(shù)值復(fù)制
            left->ch=min1_c;        //字符復(fù)制
            left->left=NULL;
            left->right=NULL;
        }
        else    //該結(jié)點(diǎn)為計(jì)算產(chǎn)生的結(jié)點(diǎn),它已指向一個(gè)二叉子樹(shù)
            left=min1_son;    //left直接指向已經(jīng)生成的二叉子樹(shù)的根結(jié)點(diǎn)

        if(min2_son==NULL)    //該結(jié)點(diǎn)無(wú)二叉子樹(shù)指針,則須新分配一個(gè)二叉樹(shù)結(jié)點(diǎn)
        {
            right=(bt)malloc(sizeof(tnode));        //產(chǎn)生右孩子
            right->amount=min2;        //次數(shù)值復(fù)制
            right->ch=min2_c;        //字符復(fù)制
            right->left=NULL;
            right->right=NULL;
        }
        else
            right=min2_son;    //left直接指向已經(jīng)生成的二叉子樹(shù)的根結(jié)點(diǎn)

        root=(bt)malloc(sizeof(tnode));
        root->amount=min1+min2;
        root->ch='\0';        //對(duì)于計(jì)算產(chǎn)生的樹(shù)結(jié)點(diǎn),字符均為空
        root->left=left;
        root->right=right;
        //二叉子樹(shù)完成

        //生成一個(gè)對(duì)應(yīng)上面已產(chǎn)生二叉子樹(shù)地址的鏈表結(jié)點(diǎn)
        made=(L)malloc(sizeof(Node));
        made->amount=root->amount;
        made->ch=root->ch;
        made->next=NULL;
        made->son=root;

        //將生成的鏈表結(jié)點(diǎn)插入鏈表中
        temp_p=l;
        while(temp_p->next!=NULL)
            temp_p=temp_p->next;
        //退出循環(huán)時(shí)temp_p指向鏈表最后一個(gè)結(jié)點(diǎn)
        temp_p->next=made;        //將生成的結(jié)點(diǎn)插入鏈表
    }

    temp_p=l->next;
    return temp_p->son;
}

void encoding()        //根據(jù)建立的哈夫曼樹(shù)編碼
{
    stack code,top,temp,readcode;
    bt r;
    huff temp_huff,hp;

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品99久| 成人激情免费电影网址| 国产三级精品三级| 欧美视频一二三区| 国产成人精品综合在线观看| 亚洲bdsm女犯bdsm网站| 日本一区二区三区免费乱视频| 欧美在线观看视频在线| 国产成人av影院| 亚洲午夜激情av| 中文字幕一区在线观看| 日韩欧美电影一区| 欧美精品一二三| 色先锋资源久久综合| 国产一区欧美日韩| 日本美女一区二区三区视频| 亚洲视频 欧洲视频| 久久精品一区二区三区不卡| 欧美一区二区在线不卡| 色偷偷成人一区二区三区91 | 欧美蜜桃一区二区三区| 成人av免费在线播放| 国产真实乱偷精品视频免| 爽爽淫人综合网网站| 亚洲综合色噜噜狠狠| 中文字幕在线观看不卡| 国产午夜三级一区二区三| 日韩午夜中文字幕| 欧美一区二区三级| 欧美色老头old∨ideo| 色香色香欲天天天影视综合网 | 欧美精品欧美精品系列| 色悠悠亚洲一区二区| av不卡在线观看| 国产美女视频91| 国产一区福利在线| 狠狠色狠狠色综合| 精品一区在线看| 国产真实乱对白精彩久久| 久久精品国产**网站演员| 日本欧洲一区二区| 免费人成精品欧美精品| 免费三级欧美电影| 久久99精品久久久久久国产越南 | 欧美成人伊人久久综合网| 欧美裸体bbwbbwbbw| 在线免费一区三区| 欧美性欧美巨大黑白大战| 一本色道**综合亚洲精品蜜桃冫| 99精品一区二区三区| 97久久精品人人爽人人爽蜜臀| 成a人片国产精品| 99国产精品久久久| 91国偷自产一区二区使用方法| 91久久国产综合久久| 欧美午夜精品久久久久久超碰| 欧美日韩精品一区二区在线播放| 91麻豆精品国产91久久久久 | 国产色综合一区| 中文字幕欧美日本乱码一线二线| 国产精品欧美一区二区三区| 国产精品乱子久久久久| 亚洲欧美一区二区久久| 午夜视频一区在线观看| 久久精品国产亚洲高清剧情介绍 | 国产精品综合二区| 99热精品一区二区| 欧美综合色免费| 日韩欧美国产精品| 欧美韩国一区二区| 亚洲一区二区三区四区的| 日韩黄色在线观看| 国产精品一区免费在线观看| www.在线成人| 欧美日韩中文字幕一区| 亚洲精品一区二区三区四区高清 | 国产乱码精品一品二品| 成人av电影在线网| 欧美日韩www| 精品国产乱码久久久久久老虎| 国产欧美精品一区| 亚洲成人动漫一区| 黄页网站大全一区二区| 91免费版pro下载短视频| 精品视频1区2区| 26uuu欧美| 亚洲综合小说图片| 国产在线不卡视频| 欧美吻胸吃奶大尺度电影| 精品乱人伦小说| 亚洲狼人国产精品| 国产在线精品一区在线观看麻豆| 99精品视频在线观看免费| 日韩女优av电影| 亚洲精品国产精品乱码不99| 青娱乐精品视频在线| 91视频在线看| 2020国产精品| 亚洲mv大片欧洲mv大片精品| 成人av电影在线| 精品久久五月天| 亚洲一区二区欧美日韩| 粉嫩aⅴ一区二区三区四区 | 在线看国产一区| 久久久久久久综合日本| 亚洲成a人片在线观看中文| 国产91丝袜在线播放0| 制服.丝袜.亚洲.另类.中文| 亚洲视频在线观看三级| 国产乱子伦视频一区二区三区| 欧美精品一二三| 一区二区三区在线免费观看| 国产成人av网站| 精品对白一区国产伦| 丝袜亚洲精品中文字幕一区| 91丨九色porny丨蝌蚪| 国产精品美女久久久久久久久| 久久99久久精品欧美| 欧美日韩国产美女| 一区二区三区中文在线| 99视频精品全部免费在线| 国产清纯白嫩初高生在线观看91 | 91精品国产福利| 亚洲午夜激情网页| 欧美视频在线一区| 亚洲天堂福利av| 99久久精品免费精品国产| 国产精品丝袜黑色高跟| 国产在线播精品第三| 精品国内片67194| 玖玖九九国产精品| 欧美成人一区二区三区片免费| 日日夜夜精品视频免费| 欧美精品在线视频| 偷拍一区二区三区四区| 欧美美女bb生活片| 日韩精品福利网| 欧美一级淫片007| 黄一区二区三区| 国产亚洲精品bt天堂精选| 国产麻豆9l精品三级站| 久久精品人人做人人爽人人| 精品在线播放免费| 久久精品一区二区三区不卡牛牛 | 久久久综合九色合综国产精品| 免费高清视频精品| 久久综合色8888| 国产精品99久久久| 一区在线播放视频| 一本色道久久加勒比精品 | 日韩一区二区高清| 麻豆传媒一区二区三区| 久久综合久久99| 成人福利视频网站| 最新国产精品久久精品| 在线亚洲欧美专区二区| 午夜视频在线观看一区二区三区| 欧美人与性动xxxx| 激情六月婷婷综合| 国产精品第四页| 欧美午夜在线一二页| 日本成人中文字幕| 国产日韩v精品一区二区| 91一区二区三区在线观看| 一区二区三区在线影院| 欧美一级免费大片| 国产老女人精品毛片久久| 亚洲视频一区二区免费在线观看| 91国产视频在线观看| 青娱乐精品在线视频| 国产三区在线成人av| 色综合久久综合中文综合网| 日日夜夜一区二区| 欧美国产乱子伦| 欧美在线影院一区二区| 久久精品久久精品| 亚洲精品自拍动漫在线| 欧美电影精品一区二区| 成人av先锋影音| 五月天亚洲精品| 中文字幕成人网| 欧美人与性动xxxx| 成人精品高清在线| 婷婷国产v国产偷v亚洲高清| 国产视频一区不卡| 在线电影国产精品| 成人成人成人在线视频| 日韩主播视频在线| 国产精品乱码人人做人人爱| 欧美日韩国产高清一区二区| 国产一二三精品| 五月综合激情网| 国产精品久久久久久一区二区三区 | 国产精品一区专区| 亚洲gay无套男同| 国产精品久久久久久久午夜片| 91精品国产综合久久久久| 91在线观看下载| 国产精品中文有码| 日产国产高清一区二区三区|