溯影 发表于 2018-5-23 22:01:46

Huffman树

小弟自己写的Huffman树,算作这段时间的练习和提升功力的机会
在这个过程中也是学会了很多,等过了这段时间再优化一下代码,
不说了,小弟去复习量子力学了{:10_266:} ,加油!!!
**** Hidden Message *****

jesushtc 发表于 2018-5-25 12:31:16

{:5_95:}

ckflx 发表于 2018-6-15 14:54:17

666

fanyifan 发表于 2018-6-17 13:59:14

困惑我好久了,都没写出来,楼主给看个源代码呗{:5_101:}

溯影 发表于 2018-6-17 17:48:49

fanyifan 发表于 2018-6-17 13:59
困惑我好久了,都没写出来,楼主给看个源代码呗

我发了我的GitHub的地址,你可以上一下那个网址看一下。

溯影 发表于 2018-6-17 17:50:56

不熟悉GitHub的朋友也可以在这里下载源工程。

JCSY 发表于 2018-7-5 16:43:48

加油

ALIEN_NoT 发表于 2018-11-3 19:37:29

支持

你的练习簿 发表于 2018-12-11 10:51:30

来看一下

没有不劳而获 发表于 2018-12-22 17:10:20

加油

strive. 发表于 2019-4-3 12:37:51

加油

ririsliu 发表于 2019-8-9 16:17:15

Jiangxi

玄尘 发表于 2020-5-25 20:57:51

nbnb

哦啦啦啊 发表于 2020-6-1 22:57:41

1

xuexi6666 发表于 2020-7-27 17:14:32

{:5_110:}

大魔王花山薰 发表于 2020-10-8 21:46:20

1

KAaha 发表于 2020-11-1 17:56:30

#include<iostream>
using namespace std;
typedef struct{
        int weight;
        int parent,lchild,rchild;
}HTNode,*huffmanTree;
CreatHuffmanTree(HuffmanTree &HT,int n);

void Select(HuffmanTree HT,int m,int &s1,int &s2)
{
        min1=min(HT,m);
        min2=min(HT,m);
}
int min(HUffmanTree HT,int m)
{
        int i=0;
        int min;
        int min_weight;
        while(HT.parent!=0)
                i++;
        min_weight=HT.weight;
        min=i;
        for(;i<m;i++)
        {
                if(HT.weight<min_weight && HT.parent==0)
                {
                        min_weight=HT.weight;
                        min=i;
                }
        }
        HT.parent=1;
        return min;
}
void CreatHuffmanTree(HuffmanTree &HT,int n)
{
        if(n<=1) return;
        m = 2*n-1;
        HT = new HTNode;
        for(int i=1;i<=m;i++)
        {
                HT.parent=0;
                HT.lchild=0;
                HT.rchild=0;
        }
        for(int i=1;i<=n;++i)
                cin>>HT.weight;
        for(k=n+1;i<=m;i++)
        {
                Select(HT,k-1,s1,s2);
                HT.parent=k;
                HT.parent=k;
                HT.lchild=s1;
                HT.rchild=s2;
                HT.weight=HT.weight+HT.weight;
        }
}
typedef char **HuffmanCode;
void CreatHuffmanCode(Huffman HT,HuffmanCode &HC,int n)
{
        HC=new char*;
        cd=new char;
        cd='\0';
        for(i=1;i<=n;i++)
        {
                start=n-1;
                c=i;f=HT.parent;
                while(f!=0)
                {
                        --start;
                        if(HT.lchild==c)
                                cd='0';
                        else
                                cd='1';
                        c=f;
                        f=HT.parent;
                }
                HC=new char;
                strcpy(HC,&cd);
        }
        delete cd;
}
int main()
{
        void Select(HuffmanTree HT,int m,int &s1,int &s2);
        int min(HUffmanTree HT,int m);
        void CreatHuffmanTree(HuffmanTree &HT,int n);
        void CreatHuffmanCode(Huffman HT,HuffmanCode &HC,int n);


        int n;
        cout<<"请输入结点个数:"<<endl;
        cin>>n;
        HTNode *Huffman=new HTNode;
        int *weight=new int;
        char **HC=new char*;

        cout<<"请输入"<<n<<"个权值:";
        CreatHuffmanTree(huffmanTree,n);
        CreatHuffmanCode(,huffman HT,huffmancode HC,n);
        cout<<"输出哈夫曼编码:"<<endl;
}
       

Hariki 发表于 2020-11-2 14:43:11

666

ys1305589828 发表于 2020-11-8 13:57:30

{:5_103:}

杨金辉 发表于 2020-11-8 20:46:58

页: [1] 2
查看完整版本: Huffman树