c++实现哈夫曼编码完整代码

本文展示了如何使用C++实现哈夫曼编码。通过创建一个Node类来表示哈夫曼树节点,利用优先队列构建哈夫曼树,并递归地生成哈夫曼编码。代码包括输入字符频率、构建哈夫曼树、打印哈夫曼编码以及验证结果的全过程。
摘要由CSDN通过智能技术生成
#include <iostream>
#include <queue>
#include <vector>
#include <map>
#include <string>

using namespace std;

class Node {
  public:
    char c; //表示字符
    int frequency; //表示该字符出现的次数或频率
    Node *left;
    Node *right;

    Node(char _c, int f, Node *l = NULL, Node *r = NULL)
      :c(_c), frequency(f), left(l), right(r) { }

    bool operator<(const Node &node) const { //重载<运算法以至于在加入优先队列的时候决定如何处理结点位置
      return frequency > node.frequency;
    }
};

void initNode(priority_queue<Node> &q, int nodeNum) {
  char c;
  int frequency;
  for (int i = 0; i < nodeNum; i++) {
    cout << "输入字符和结点出现的次数: ";
    cin >> c >> frequency;
    Node node(c, frequency);
    q.push(node);
  }
}

void showNode(priority_queue<Node> q) {
  while (!q.empty()) {
    Node node = q.top(); q.pop();
    cout << node.c << ", " << node.frequency 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值