⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 1.cpp

📁 huffman 编码与译码 对任意文件二进制的编码与译码
💻 CPP
字号:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h>
typedef struct node *tree;

struct node{
    char data;
    int count;
    tree lchild,rchild;
};
tree creat(tree ,char );
void inorder(tree);
void inorder1(tree);
int n=0,m=0;
FILE *fp1;

void main()
{
    FILE *fp;
    char ch;
    tree r;
    char filename[20];
    printf("请输入所需统计的文件名:");
    gets(filename);
    fp=fopen(filename,"rb");
    if(fp==NULL)
    {
        printf("该文件不存在");
        exit(0);
    }
    r=NULL;
    ch=fgetc(fp);
    while(!feof(fp))
    {   n++;
        r=creat(r,ch);
        ch=fgetc(fp);
    }
    fclose(fp);
    fp1=fopen("out1.txt","w");
     if(fp1==NULL)
    {
        printf("文件打开失败!");
        exit(0);
    }
 inorder1( r);
 fprintf(fp1,"%d\n",m);
    inorder(r);
     fclose(fp1);

}


void inorder(tree r)
{
if(r!=NULL)
{
    inorder(r->lchild);
    printf("%d %f\n",r->data,r->count/(1.0*n));
    fprintf(fp1,"%d %f\n",r->data,r->count/(1.0*n));
    inorder(r->rchild);
}
}

void inorder1(tree r)
{
if(r!=NULL)
{
    inorder1(r->lchild);
    m++;
    inorder1(r->rchild);
}
}

tree creat(tree r,char x)
{   
    tree p;
    if(r==NULL)
    {
        p=(tree)malloc(sizeof(*p));
        p->data=x;
        p->count=1;
        p->lchild=NULL;
        p->rchild=NULL;
        return(p);
    }
    else if(r->data>x)
        r->lchild=creat(r->lchild,x);
    else if(r->data<x)
            r->rchild=creat(r->rchild,x);

    else r->count+=1;
    return(r);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -