Huffman编码

请输入编码的字符个数:
8
请输入各字符及对应的出现频率:
a 78
c 23
e 65
1 109
r 34
7 89
d 23
t 56
result:
1 : 01
7 : 00
a : 110
c : 11111
d : 11110
e : 101
r : 1110

t : 100

#include 
#include  
#include 
#include 
using namespace std;
//定义结构体指针 
struct Node
{
	Node *lchild;
	Node *rchild;
	int f;
	char c;
};
//定义编码组成元素 
struct com{  
    bool operator ()(Node *a,Node *b){  
        return a->f >= b->f;
    }  
};  
//定义Huffman结构体 
struct fuhs
{
	char code[100];
	char c;
}symbol[100];
bool com1(fuhs a,fuhs b)
{
	return a.cf=p1->f+p2->f;
	head->lchild=p1;
	head->rchild=p2;
	head->c='%'; 
	return head;
}
int ans=0;
char bianhao[100];
//遍历树给出编码 
void build(Node *head,int in)
{
	if(head->lchild==NULL&&head->rchild==NULL)
	{
		symbol[ans].c=head->c;
		for(int i=0;ilchild,in+1);
	bianhao[in]='1';
	build(head->rchild,in+1);
}
//主函数 
int main()
{
	//优先队列进行存储 
	priority_queue, com>que;
	Node *word[100];
	int n;
	printf("请输入编码的字符个数:\n");
	scanf("%d",&n);
	getchar();
	printf("请输入各字符及对应的出现频率:\n");
	for(int i=0;ilchild=word[i]->rchild=NULL;
		scanf("%c %d",&word[i]->c,&word[i]->f);
		getchar();
		que.push(word[i]);
	}
	Node *head;
	while(que.size()!=1)
	{
		Node *p1=que.top();
		que.pop();
		Node *p2=que.top();
		que.pop();
		head=creat(p1,p2);
		que.push(head);
	}
	build(head,0); 
	//排序 
	sort(symbol,symbol+n,com1);
	printf("result:\n");
	for(int i=0;i

你可能感兴趣的:(C/C++)