• 大小: 86KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-21
  • 语言: 其他
  • 标签: CPP  

资源简介

哈工程本科算法实验哈夫曼编码【数据+代码+说明+流程图+测试用例】

资源截图

代码片段和文件信息

#include 
#define MAXBIT 10 /*定义哈夫曼编码的最大长度*/
#define MAXVALUE 10000 /*定义最大权值*/
#define MAXLEAF 30 /*定义哈夫曼树中最多叶子节点个数*/
#define MAXNODE MAXLEAF*2-1 /*哈夫曼树最多结点数*/
typedef struct   /*哈夫曼编码信息的结构*/
{
    int bit[MAXBIT];
    int start;
} Hcodetype;

typedef struct   /*哈夫曼树结点的结构*/
{
    int weight;
    int parent;
    int lchild;
    int rchild;
} Hnodetype;

void huffmantree(Hnodetype huffnode[MAXNODE]int n) /*构造哈夫曼树的函数*/
{
    int ijm1m2x1x2;
    for(i=0; i<2*n-1; i++) /*存放哈夫曼树结点的数组huffnode[]初始化*/
    {
        huffnode[i].weight=0;
        huffnode[i].parent=-1;
        huffnode[i].lchild=-1;
        huffnode[i].rchild=-1;
    }
    for(i=0; i    {
        printf(“输入第%d个节点的权值(频率)\n“i+1);
        scanf(“%d“&huffnode[i].weight);
    }
    for(i=0; i    {
        m1=m2=MAXVALUE;
        x1=x2=0;
        for(j=0; j        {
            if(huffnode[j].weight            {
                m2=m1;
                x2=x1;
                m1=huffnode[j].weight;
                x1=j;
            }
            else if(huffnode[j].weight            {
                m2=huffnode[j].weight;
                x2=j;
            }
        }
        huffnode[x1].parent=n+i;
        huffnode[x2].parent=n+i;
        huffnode[n+i].weight=huffnode[x1].weight+huffnode[x2].weight;
        huffnode[n+i].lchild=x1;
        huffnode[n+i].rchild=x2;
    }
}

void main()
{
    Hnodetype huffnode[MAXNODE];
    Hcodetype huffcode[MAXLEAF]cd;
    int ijcpn;
    printf(“输入要构造哈夫曼树的节点个数 n\n“);
    scanf(“%d“&n); /*输入叶子节点个数*/
    while(n<1)
    {
        printf(“error:输入违法,无法构造哈夫曼树 \n请重新输入:\n“);
        scanf(“%d“&n); /*输入叶子节点个数*/
    }
    huffmantree(huffnoden); /*建立哈夫曼树*/
    for(i=0; i    {
        cd.start=n-1;
        c=i;
        p=huffnode[c].parent;
        while(p!=-1)
        {
            if(huffnode[p].lchild==c) cd.bit[cd.start]=0;
            else cd.bit[cd.start]=1;
            cd.start--;
            c=p;
            p=huffnode[c].parent;
        }
        for(j=cd.start+1; j            huffcode[i].bit[j]=cd.bit[j];
        huffcode[i].start=cd.start;
    }
    for(i=0; i    {
        printf(“第%d个节点的哈夫曼编码:“i+1);
        for(j=huffcode[i].start+1; j            printf(“%d“huffcode[i].bit[j]);
        printf(“\n“);
    }
}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件        2827  2016-12-06 09:04  哈夫曼编码\哈夫曼.c
     文件       28844  2016-12-06 09:14  哈夫曼编码\哈夫曼.exe
     文件        2053  2016-12-06 09:14  哈夫曼编码\哈夫曼.o
     文件       10205  2016-12-06 09:17  哈夫曼编码\测试用例_.xlsx
     文件       74805  2016-12-06 09:49  哈夫曼编码\说明+流程图.docx
     目录           0  2018-11-26 19:26  哈夫曼编码\

评论

共有 条评论