网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
04月26日漏签0天
c语言吧 关注:801,952贴子:4,377,155
  • 看贴

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

  • 3回复贴,共1页
<<返回c语言吧
>0< 加载中...

求解 这是一个哈夫曼的函数

  • 取消只看楼主
  • 收藏

  • 回复
  • √哑铃
  • 毛蛋
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼




  • √哑铃
  • 毛蛋
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
我知道是指针错了···但是不知道怎么改 谁能帮帮忙啊···


2026-04-26 16:34:29
广告
不感兴趣
开通SVIP免广告
  • √哑铃
  • 毛蛋
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
#include "stdafx.h"#include <stdio.h>#include <malloc.h>#include <string.h>#include<iostream.h>
#define UINT_MAX 1000
typedef struct { unsigned int weight; unsigned int parent,lchild,rchild; }HTNode,*HuffmanTree;
typedef char **HuffmanCode;
int min(HuffmanTree t,int i)
{
int j,f;
unsigned int k=UINT_MAX;
for(j=1;j<=i;j++)
if(t[j].weight<k&&t[j].parent==0)
k=t[j].weight,f=j;
t[f].parent=1;
return f;
}
void select(HuffmanTree t,int i,int &s1,int &s2)
{ int min(HuffmanTree t,int i);
int j;
s1=min(t,i);
s2=min(t,i); if(s1>s2)
{
j=s1;
s1=s2;
s2=j;
}
}
void HuffmanCoding(HuffmanTree &HT,HuffmanCode &HC,int *w, int n){
void select(HuffmanTree t,int i,int &s1,int &s2);
int m,i,s1,s2,start; char *cd; unsigned c,f;
HuffmanTree p; if (n<=1) return; m=2*n-1; HT = (HuffmanTree)malloc((m+1)*sizeof(HTNode)); for (p=HT, i=1; i<=n; ++i,++p,++w) { p->weight = *w; p->parent=0; p->lchild=0; p->rchild=0; } for (; i<=m;++i,++p) { p->weight = 0; p->parent=0; p->lchild=0; p->rchild=0; } for (i=n+1; i<=m;++i) { select(HT,i-1,s1,s2);
HT[s1].parent=i; HT[s2].parent = i; HT[i].lchild = s1; HT[i].rchild = s2; HT[i].weight = HT[s1].weight + HT[s2].weight; } HC=(HuffmanCode)malloc((n+1)*sizeof(char*)); cd = (char *)malloc( n * sizeof(char) ); cd[n-1]='\0'; for(i=1;i<=n;i++) { start=n-1; c=i;f=HT[i].parent; while(f!=0) { --start; if(HT[f].lchild==c) cd[start]='0'; else cd[start]='1'; c=f;f=HT[f].parent; } HC[i]=(char*)malloc((n-start)*sizeof(char)); strcpy(HC[i],&cd[start]); } free(cd);}
int main()
{ HuffmanTree HT; HuffmanCode HC; int n,i; int* w; cout<<"请输入权值的个数"<<endl;; cin>>n; w=(int*)malloc((n+1)*sizeof(int)); cout<<"请依次输入"<<n<<"个权值(整型)"<<endl; for(i=0;i<=n-1;i++) { cin>>*(w+i); } HuffmanCoding(HT,HC,w,n); for(i=1;i<=n;i++) { cout<<HC[i]<<endl; } free(HT); free(HC); return 0; }
这是代码··


  • √哑铃
  • 毛蛋
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
codepad[dot]org 那里?


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 3回复贴,共1页
<<返回c语言吧
分享到:
©2026 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示