sinat_35066848 2016-06-06 14:01 采纳率: 40%
浏览 1609

C语言 Huffman树编码的问题

我已经读入文本,然后定义了一个指针栈,把所有的结点都按频率存入栈中,不知道现在如何利用现有的数组,来构建一个Huffman树?请大神指点。
部分代码如下,还没写完。

 #include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct tnode{
    char word;
    int count;
    int flag;
    struct tnode *left;
    struct tnode *right;
};
struct tnode *p,*q;
struct tnode str[128];
struct tnode *arr[128];
int curr=0;
int temp;
int main()
{
    FILE *IN,*OUT;
    IN=fopen("input.txt","r");
    char c;
    int i,num,j;
    int temp;
    while((c=fgetc(IN))!=EOF){
        str[(int)c].word=c;
        str[(int)c].count++;
    }
    str[10].count=0;
    /*for(i=0;i<128;i++){
        printf("%d  %c  %d\n",i,str[i].word,str[i].count);
    }*/
    for(i=0;i<128;i++){
        if(str[i].count!=0){
            p=(struct tnode*)malloc(sizeof(struct tnode));
            p->count=str[i].count;
            p->word=str[i].word;
            p->left=p->right=NULL;
            arr[curr++]=p;
        }
    }
    for(i=0;i<curr;i++){
        for(j=i+1;j<curr;j++){
            if((arr[j]->count<arr[i]->count)||((arr[j]->count==arr[i]->count)&&(arr[j]->word<arr[i]->word))){
                q=arr[i];
                arr[i]=arr[j];
                arr[j]=q;
            }
        }
    }
    /*for(i=0;i<curr;i++){
        printf("%2d  %c  %d\n",i,arr[i]->word,arr[i]->count);
    }*/
    fseek(IN,0,SEEK_SET);
    while(c=fgetc(IN)!=EOF){
        if(c=='\n'){
            continue;
        }

    }
    return 0;
}
  • 写回答

1条回答 默认 最新

  • 咖啡不加盐 2016-06-06 14:11
    关注

    没明白你的意思,题目的意思就是为了构建霍夫曼树?

    评论

报告相同问题?

悬赏问题

  • ¥20 求数据集和代码#有偿答复
  • ¥15 关于下拉菜单选项关联的问题
  • ¥15 如何修改pca中的feature函数
  • ¥20 java-OJ-健康体检
  • ¥15 rs485的上拉下拉,不会对a-b<-200mv有影响吗,就是接受时,对判断逻辑0有影响吗
  • ¥15 使用phpstudy在云服务器上搭建个人网站
  • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
  • ¥15 vue3+express部署到nginx
  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况