Huffman算法_优先队列_new与delete


Huffman算法_优先队列_new与delete


一个大一新生写的代码。如有高见,望不吝赐教。没有太多时间,只放代码了。

#include <iostream>
#include <queue>
#include <vector>
#include <stdio.h>
#define maxn 222
using namespace std;
struct Tree{
	int k=0;
	string s;
	bool unite=false;
	Tree *left=NULL,*right=NULL,*self=NULL;//能够在后续操作中删去new出的内存就把它存到一个位置 
};
struct cmp{
	bool operator() (const Tree a ,const Tree b) const{
		return a.k>b.k;//如果这个是true,表示a的优先级比b小 
	}
};

priority_queue<Tree,vector<Tree>,cmp> pq;

void get_value();
void creat_Tree();
void get_num(Tree T,string s);

int main()
{
	get_value();
	creat_Tree();
	Tree tem=pq.top();
	get_num(tem,"");
	delete tem.self;
	return 0;
}

void get_value()
{
	int sum=0;
	cout << "请输入结点数:  ";
	cin >> sum;
	cout << "与相应的字符与对应值\n";
	for(int i=0;i<sum;i++){
		Tree *p=new Tree; 
		p->self=p;
		cin >> p->s >> p->k;
		pq.push(*p);
	}
}

void creat_Tree()
{
	while(pq.size()!=1){
		Tree a=pq.top();pq.pop();
		Tree b=pq.top();pq.pop();
		Tree *p=new Tree;
		p->k=a.k+b.k;
//		cout << a.k << "+" << b.k << "=" << p->k << endl;
		p->unite=true;
		if(a.k==b.k && b.unite) p->left=b.self,p->right=a.self;
		else p->left=a.self,p->right=b.self;
		p->self=p;
		pq.push(*p); 
	}
}


void get_num(Tree T,string s)
{
	if(T.unite==false)
		cout << T.s << '\t' << s << endl;
	else{
		get_num(*T.left,s+"0");
		delete T.left;T.left=NULL;//访问完就删 
		get_num(*T.right,s+"1");
		delete T.right;T.right=NULL;
	}
}

/*
一 2
第 3
在 5
要 7
共 11
上 13
是 17
中 19
过 23
同 29
和 31
的 37
有 41
*/
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值