霍夫曼树的构造
来源:百度知道 编辑:UC知道 时间:2024/06/01 17:39:11
#include<iostream>
#include<malloc.h>
#include<string.h>
#include<stdio.h>
using namespace std;
typedef struct{
unsigned int weight;
unsigned int parent,lchild,rchild;
}HTNode,*HuffmanTree;
typedef char * * HuffmanCode;
void HuffmanCoding(HuffmanTree&HT,HuffmanCode&HC,int *w,int n){
if(n<1)return;
int m=2*n-1;
HT=(HuffmanTree)malloc((m+1)*sizeof(HTNode));
int i;
HuffmanTree p;//p应该是什么类型?
for(p=HT+1,i=1;i<=n;++i,++p,++w) *p={*w,0,0,0};
for(;i<m;++i,++p) *p={0,0,0,0};
//找出权值最小的两个结点
int min1=513,min2=513;
for(i=n+1;i<m;++i){
if(w[i]<w[min1]){min2=min1;min1=i;}
else if(w[i]<w[min2])
min2=i;
HT[min1].parent=i;HT[min2].parent=i;
HT[i].lchild=min1;HT[i].rchild=min2;
HT[i].weight=HT[min1].weight+HT[min2].weight;
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
typedef struct
{
unsigned int Weight;
unsigned int Parent;
unsigned int lChild;
unsigned int rChild;
}HTNode,*HuffmanTree;
typedef char **HuffmanCode;
int LookFor(char *str,char letter,int count);
void OutputWeight(char *Data,int Length,
char **WhatLetter,
int **Weight,int *Count);
void HuffmanCoding(HuffmanTree *HT,
HuffmanCode *HC,
int *Weight,
int Count);
void Select(HuffmanTree HT,int Count,int *s1,int *s2);
int main()
{
HuffmanTree HT;
HuffmanCode HC;
char Data[100];
char *WhatLetter;
int *Weight;
int Count;
int i;
printf("Please input the line:");
/* Example: aaaaaaaaaaaaaabcccccc*/
scanf("%s",Data);
printf("\n");