亚洲欧美第一页_禁久久精品乱码_粉嫩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):
    char huff[100]="";        //用于存儲(chǔ)當(dāng)前字符的哈夫曼編碼串
    int i,j,n=0;

    hlist=(hnode*)malloc(sizeof(hnode));
    hlist->ch='\0';
    for(i=0;i<100;i++)
        hlist->code[i]='\0';
    hlist->next=NULL;
    hp=hlist;    

    //建立空棧
    code=(stack)malloc(sizeof(snode));
    code->amount=0;
    code->ch='\0';
    code->next=NULL;
    code->son=NULL;        //棧的頭結(jié)點(diǎn)指向樹(shù)的根結(jié)點(diǎn)
    top=code;

    r=root;
    temp=(stack)malloc(sizeof(snode));    //給哈夫曼樹(shù)的根結(jié)點(diǎn)分配棧結(jié)點(diǎn)
    temp->amount=r->amount;
    temp->ch='0';
    temp->next=top;
    temp->son=r;
    top=temp;
    
    while(r!=NULL)    //當(dāng)前結(jié)點(diǎn)存在
    {
        if(r->left!=NULL&&r->left->amount!=-1)    //當(dāng)前結(jié)點(diǎn)有左孩子
        {
            r=r->left;        //r轉(zhuǎn)向左孩子
            r->amount=-1;

            temp=(stack)malloc(sizeof(snode));    //給左孩子分配棧結(jié)點(diǎn)
            temp->amount=r->amount;
            temp->ch='0';
            temp->next=top;
            temp->son=r;
            top=temp;
        }
        else if(r->right!=NULL&&r->right->amount!=-1)        //當(dāng)前結(jié)點(diǎn)有右孩子
        {
            r=r->right;        //r轉(zhuǎn)向右孩子
            r->amount=-1;

            temp=(stack)malloc(sizeof(snode));    //給右孩子分配棧結(jié)點(diǎn)
            temp->amount=r->amount;
            temp->ch='1';
            temp->next=top;
            temp->son=r;
            top=temp;
        }
        else    //無(wú)未訪問(wèn)的孩子結(jié)點(diǎn)
        {
            
            if(r->left==NULL&&r->right==NULL)    //當(dāng)前結(jié)點(diǎn)為葉子結(jié)點(diǎn)
            {
                for(i=0;i<100;i++)    //對(duì)哈夫曼編碼數(shù)組初始化
                    huff[i]='\0';

                //先輸出該葉子結(jié)點(diǎn)的編碼
                printf("字符%c,編碼為:",r->ch);
                readcode=top;
                i=0;

                while(readcode!=code)
                {
                    huff[i++]=readcode->ch;        //將棧元素倒置入哈夫曼編碼數(shù)組中
                    readcode=readcode->next;
                }
                
                temp_huff=(hnode*)malloc(sizeof(hnode));    //為當(dāng)前字符及其編碼創(chuàng)建結(jié)點(diǎn)
                temp_huff->ch=r->ch;        //存儲(chǔ)編碼的原字符
                for(j=0;j<100;j++)        //初始化編碼串?dāng)?shù)組
                    temp_huff->code[j]='\0';

                j=0;

                for(i=i-2;i>=0;i--)                //依次讀出哈夫曼編碼數(shù)組中的編碼串
                {
                    printf("%c",huff[i]);
                    temp_huff->code[j++]=huff[i];
                }
                temp_huff->next=NULL;
                hp->next=temp_huff;
                hp=temp_huff;

                printf("\t\t");
                if(++n%2==0)
                    printf("\n");
            }

            if(top->next!=code)        //若棧非空
            {
                top=top->next;
                r=top->son;
            }
            else
                break;
        }
    }
}

void describe_tree()    //交互式顯示哈夫曼樹(shù)
{
    bt t;
    stack s,top,temp;
    int choice;

    s=(stack)malloc(sizeof(snode));
    s->amount=0;
    s->ch='\0';
    s->next=NULL;
    s->son=NULL;
    top=s;
    
    t=root;//t指向哈夫曼樹(shù)的根結(jié)點(diǎn)

    temp=(stack)malloc(sizeof(snode));    //分配新棧結(jié)點(diǎn)
    temp->amount=t->amount;        
    temp->ch=t->ch;
    temp->next=top;        //結(jié)點(diǎn)入棧
    temp->son=t;    //將當(dāng)前二叉樹(shù)結(jié)點(diǎn)指針給棧頂結(jié)點(diǎn)
    top=temp;        //修改棧頂指針

    printf("輸入1往左子樹(shù),輸入2往右子樹(shù),輸入3返回父結(jié)點(diǎn),輸入4退出程序,其它輸入無(wú)效\n");
    scanf("%d",&choice);
    getchar();
    
    while(choice==1||choice==2||choice==3)
    {
        if(choice==1)        //往左子樹(shù)
        {
            if(t->left!=NULL)
            {
                t=t->left;
                temp=(stack)malloc(sizeof(snode));    //分配新棧結(jié)點(diǎn)
                //新結(jié)點(diǎn)入棧
                temp->amount=t->amount;        
                temp->ch=t->ch;
                temp->next=top;        //結(jié)點(diǎn)入棧
                temp->son=t;    //將當(dāng)前二叉樹(shù)結(jié)點(diǎn)指針給棧頂結(jié)點(diǎn)
                top=temp;        //修改棧頂指針
                printf("%c,%d\n",t->ch,t->amount);
            }
            else    //左子樹(shù)不存在,當(dāng)前結(jié)點(diǎn)已經(jīng)是葉子結(jié)點(diǎn)
                printf("無(wú)左孩子!\n");    
        }
        else if(choice==2)    //往右子樹(shù)
        {
            if(t->right!=NULL)
            {
                t=t->right;
                temp=(stack)malloc(sizeof(snode));    //分配新棧結(jié)點(diǎn)
                //新結(jié)點(diǎn)入棧
                temp->amount=t->amount;
                temp->ch=t->ch;
                temp->next=top;        //結(jié)點(diǎn)入棧
                temp->son=t;    //將當(dāng)前二叉樹(shù)結(jié)點(diǎn)指針給棧頂結(jié)點(diǎn)
                top=temp;        //修改棧頂指針
                printf("%c,%d\n",t->ch,t->amount);
            }
            else    //右子樹(shù)不存在,當(dāng)前結(jié)點(diǎn)已經(jīng)是葉子結(jié)點(diǎn)
                printf("無(wú)右孩子!\n");
        }
        else if(choice==3)    //返回父結(jié)點(diǎn)
        {
            if(top->next!=s)    //棧非空
            {
                top=top->next;
                t=top->son;
                printf("%c,%d\n",t->ch,t->amount);
            }
            else
                printf("已經(jīng)在根結(jié)點(diǎn)了!\n");
        }
        //else if(choice==4)    //退出程序
        //    exit(0);

        scanf("%d",&choice);
        getchar();
    }
}


void codeoutput()    //輸出原始字符串的哈夫曼編碼串
{
    huff hp;
    //char *s;
    int i;
    c=str;        //c指向原始字符串str的首位置
    printf("\n\n原始字符串為:%s\n哈夫曼編碼為:",c);
    code_sum=0;
    //在編碼鏈表中找尋與c匹配的編碼串
    while(*c!='\0')        //字符串未讀完
    {
        hp=hlist->next;        //hp指向編碼鏈表的第一個(gè)字符編碼組
        
        while(hp->ch!=*c&&hp->next!=NULL)    //尚未找到匹配字符且后面還有字符
            hp=hp->next;
        //退出循環(huán)的原因可能是找到了匹配字符,也可能是鏈表讀完,需要進(jìn)一步判斷
        if(hp->ch==*c)    //找到匹配字符
        {
            i=0;
            while(hp->code[i]!='\0')
                printf("%c",hp->code[i++]);            
        }
        code_sum+=i;
       c++;
    }
    printf("\n\n");
}

void analyze()    //編碼性能分析
{
    int n=0;
    printf("\t\t\t性能分析中...\n\n");
    while(pow(2,n)<char_num)    //計(jì)算等長(zhǎng)編碼情況下需要的編碼位數(shù)
        n++;
    printf("等長(zhǎng)碼需要 %d 位,編碼總長(zhǎng) %d 位,本次哈夫曼編碼總長(zhǎng) %d , 壓縮比 %g\n",n,n*char_amount,code_sum,(float)code_sum/(n*char_amount));

}

main()
{
    int choice;
    //初始化,操作包括建立空鏈表和鍵盤(pán)輸入字符串
    initial();

    //將接收的字符串依次讀入鏈表中,并統(tǒng)計(jì)出現(xiàn)的次數(shù)
    pull_in_list();

    //建立最優(yōu)二叉樹(shù)
    root=create();

    //交互式顯示哈夫曼樹(shù)
    if(root!=NULL)
    {
        printf("\n哈夫曼樹(shù)構(gòu)造完成,是否查看哈夫曼樹(shù),輸入1查看,其它輸入跳過(guò)");
        scanf("%d",&choice);
        getchar();

        if(choice==1)
            describe_tree();
    }
    else
    {
        printf("哈夫曼樹(shù)未建立,查看字符串中是否只含一種字符,或者重試\n");
        exit();
    }

    //要挾據(jù)建立的最優(yōu)二叉樹(shù)進(jìn)行編碼
    encoding();

    //將原始字符串的哈夫曼編碼串輸出
    codeoutput();

    //編碼性能分析
    analyze();

    printf("\n\n\t\t\tAll Copyright Are Presevered By cobby\n\n輸入任何鍵退出\n");
    scanf("%d",&choice);
}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
另类中文字幕网| 欧美一级片在线看| 国产91精品一区二区麻豆网站| 五月天激情综合网| 亚洲一区二区三区自拍| 一区二区三区四区高清精品免费观看| 精品久久一区二区| 精品欧美乱码久久久久久| 欧美久久一区二区| 777a∨成人精品桃花网| 日韩一区二区在线看片| 日韩欧美在线影院| 亚洲精品一区二区三区精华液| 日韩三级中文字幕| 欧美变态tickling挠脚心| 欧美一三区三区四区免费在线看| 9人人澡人人爽人人精品| aaa欧美日韩| 欧美熟乱第一页| 在线成人小视频| 日韩女优av电影| 日韩视频在线永久播放| 精品日韩欧美在线| 亚洲国产激情av| 亚洲欧美一区二区三区孕妇| 亚洲制服丝袜一区| 亚洲777理论| 韩日精品视频一区| 国产成人精品亚洲777人妖| 99久久精品免费观看| 在线这里只有精品| 91精品国产综合久久精品图片| 日韩美女在线视频| 国产精品久久久久久久午夜片| 玉足女爽爽91| 日本视频一区二区三区| 激情五月激情综合网| 成人精品免费看| 精品视频1区2区| 精品少妇一区二区三区免费观看| 国产精品视频第一区| 亚洲色图一区二区三区| 天堂蜜桃一区二区三区 | 久久国产精品72免费观看| 精品一区免费av| 不卡电影免费在线播放一区| 欧美主播一区二区三区美女| 欧美成人精品高清在线播放| 亚洲国产精品黑人久久久| 亚洲国产视频一区二区| 国产在线精品免费| 在线观看国产91| 精品粉嫩aⅴ一区二区三区四区| 国产农村妇女毛片精品久久麻豆| 亚洲精选视频在线| 狠狠狠色丁香婷婷综合激情| 在线中文字幕一区| 久久嫩草精品久久久精品一| 亚洲午夜羞羞片| 国产精品1区2区3区| 欧美日韩高清影院| 国产精品另类一区| 日韩av在线播放中文字幕| 成人动漫在线一区| 3d动漫精品啪啪| 中文在线一区二区| 亚洲成人一区二区在线观看| 国产精品一卡二卡在线观看| 99国产精品久久久久久久久久 | 欧美中文字幕一区二区三区| 精品粉嫩超白一线天av| 久久国产综合精品| 国产不卡视频一区二区三区| 99re热视频这里只精品| 久久久99久久| 亚洲成人一二三| 成人伦理片在线| 精品国产露脸精彩对白| 亚洲少妇最新在线视频| 国产另类ts人妖一区二区| 欧美一区二区三区喷汁尤物| 国产精品久久久久久久久快鸭 | 日本一区二区不卡视频| 一级特黄大欧美久久久| 麻豆极品一区二区三区| 欧美影院精品一区| 中文av一区特黄| 狠狠久久亚洲欧美| 欧美高清视频www夜色资源网| 中文字幕一区二区三区四区| 老司机精品视频线观看86| 欧美体内she精视频| 国产精品电影一区二区| 亚洲综合网站在线观看| 99精品黄色片免费大全| 精品粉嫩超白一线天av| 免费成人在线播放| 欧美亚洲动漫精品| 亚洲国产视频一区| 99精品视频在线播放观看| 欧美激情一区二区三区蜜桃视频| 奇米精品一区二区三区在线观看一| 天使萌一区二区三区免费观看| 99天天综合性| 欧美国产一区在线| 高清av一区二区| 国产亚洲一二三区| 国产精品亚洲一区二区三区在线| 日韩一区二区三区免费看| 日韩 欧美一区二区三区| 欧洲av在线精品| 一区二区三区高清在线| 91亚洲资源网| 亚洲三级在线免费| 色综合视频在线观看| 国产成人自拍在线| 国产日产亚洲精品系列| 舔着乳尖日韩一区| www激情久久| 成人在线综合网站| 香蕉av福利精品导航| 91精品国产色综合久久久蜜香臀| 国内精品第一页| 午夜精品一区在线观看| 久久久久国产免费免费| 制服视频三区第一页精品| 日韩电影在线看| 欧美成人vps| 成人午夜伦理影院| 亚洲一区二区三区四区五区中文| 91麻豆精品国产无毒不卡在线观看| 国产在线观看一区二区| 国产精品久久一级| 在线观看日韩精品| 免播放器亚洲一区| 亚洲视频在线一区观看| 麻豆精品视频在线观看| 欧美成人性战久久| 91美女精品福利| 天堂一区二区在线| 日韩码欧中文字| 91福利国产精品| 国产在线视频精品一区| 亚洲免费在线电影| 国产亚洲一区二区在线观看| 亚洲第一综合色| 91精品国产入口| www.爱久久.com| 成人不卡免费av| 日韩亚洲欧美综合| 丰满亚洲少妇av| 亚洲一区二区美女| 国产精品日产欧美久久久久| 欧美午夜精品电影| aaa欧美大片| 激情综合色播激情啊| 青青青伊人色综合久久| 亚洲精品综合在线| 国产精品免费丝袜| 欧美电影免费观看完整版 | 日韩一卡二卡三卡国产欧美| 一本一道久久a久久精品| 久久av老司机精品网站导航| 日韩一区中文字幕| 久久综合九色综合97_久久久| 国产精品自在欧美一区| 久久国产精品露脸对白| 中文字幕一区av| 国产日韩欧美高清在线| 欧美一区二区三区四区视频| 欧美视频在线一区二区三区| 成人性视频免费网站| 国产黄人亚洲片| 蜜臀a∨国产成人精品| 免费一级片91| 亚洲视频1区2区| 成人免费在线播放视频| 国产精品日日摸夜夜摸av| 久久久亚洲综合| 久久久久国产精品人| 精品久久国产字幕高潮| 日韩欧美国产综合| 91麻豆精品国产| 欧美一级精品大片| 欧美日韩国产电影| 欧美一级高清大全免费观看| 欧美在线一区二区| 欧美精品少妇一区二区三区| 成人黄动漫网站免费app| 福利一区二区在线观看| 日本欧美加勒比视频| 午夜电影网亚洲视频| 日本vs亚洲vs韩国一区三区二区| 亚洲成人一区在线| 美女看a上一区| 免费久久精品视频| 韩日av一区二区| 国内精品国产成人国产三级粉色 | 国产日韩欧美a| 国产精品国产三级国产a|