资源简介
C++实现自适应(动态)哈夫曼编码,读入txt文本编码并将结果输出到指定txt文本中
代码片段和文件信息
#include “adaptiveHuffman.h“
int AdaptiveHuffman::sum = 1;
BinaryTree::BinaryTree(int numint weight){
p_root = new Node(nullptrnullptrnullptr);
p_root->num = num;
p_root->weight = weight;
}
BinaryTree::~BinaryTree()
{
deleteNode(p_root);
}
bool BinaryTree::swap(Node * p_nodeA Node * p_nodeB)
{
if(p_nodeA==nullptr||p_nodeB==nullptr||p_nodeA==p_nodeB)
return false;
Node *pTemp;
if (getBrotherState(p_nodeA)==LeftChild) {
if (getBrotherState(p_nodeB)==LeftChild) {
pTemp = p_nodeA->parent->leftChild;
p_nodeA->parent->leftChild = p_nodeB->parent->leftChild;
p_nodeB->parent->leftChild = pTemp;
}
else {
pTemp = p_nodeA->parent->leftChild;
p_nodeA->parent->leftChild = p_nodeB->parent->rightChild;
p_nodeB->parent->rightChild = pTemp;
}
}
else {
if (getBrotherState(p_nodeB)==LeftChild) {
pTemp = p_nodeA->parent->rightChild;
p_nodeA->parent->rightChild = p_nodeB->parent->leftChild;
p_nodeB->parent->leftChild = pTemp;
}
else {
pTemp = p_nodeA->parent->rightChild;
p_nodeA->parent->rightChild = p_nodeB->parent->rightChild;
p_nodeB->parent->rightChild = pTemp;
}
}
pTemp = p_nodeA->parent;
p_nodeA->parent = p_nodeB->parent;
p_nodeB->parent = pTemp;
return true;
}
bool BinaryTree::addNode(Node * parent Node * p_child Brother brotherState)
{
if(parent==nullptr||p_child==nullptr)
return false;
if (brotherState == LeftChild) {
if (parent->leftChild != nullptr) {
std::cout << “error:left child exist!“ << std::endl;
return false;
}
parent->leftChild = p_child;
}
else if (brotherState == RightChild) {
if (parent->rightChild != nullptr) {
std::cout << “error:right child exist!“ << std::endl;
return false;
}
parent->rightChild = p_child;
}
else {
std::cout << “error:brotherState is wrong!“ << std::endl;
return false;
}
p_child->parent = parent;
return true;
}
Node * BinaryTree::findNode(Node *p)
{
Node *p_node = p_root;
std::queue queue;
queue.push(p_node);
while (!queue.empty()) {
p_node = queue.front();
if (p_node == p) {
return p_node;
}
queue.pop();
if (p_node->leftChild != nullptr) {
queue.push(p_node->leftChild);
}
if (p_node->rightChild != nullptr) {
queue.push(p_node->rightChild);
}
}
return nullptr;
}
bool BinaryTree::setNodeNum(Node* p_node int num)
{
if(p_node==nullptr)
return false;
else {
p_node->num = num;
return true;
}
}
bool BinaryTree::isAncestor(Node * p_nodeChild Node * p_nodeAncestor)
{
while (p_nodeChild != p_root) {
if (p_nodeChild ==
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 7599 2018-12-20 15:18 adaptiveHuffman.cpp
文件 1449 2018-12-20 15:13 adaptiveHuffman.h
- 上一篇:Linux环境下——C语言聊天室项目
- 下一篇:算术编码c++170579
相关资源
- 算术编码c++170579
- C++从入门到精通第三版 清华大学出版
- 五子棋C++代码
- C++课设 简单的投票系统
- 计算机图形学VSC++生成时钟报告含代码
- 基于c++小型公司工资管理系统的设计
- 数据结构与算法c语言 严蔚敏 代码实
- 节约里程法c++实现
- C++学习路线视频全套
- 用C语言实现FFT算法的编写,可与DFT时
- C语言实现CFOP解魔方算法
- 快速傅里叶算法FFTc语言实现
- Visual C++ 网络 流量 监控 系统
- C++ 矩阵类 实现常用的矩阵操作
- 计算机图形学直线段的扫描转换C++实
- 50道习题源程序.zip
- RTCM 3.0解码C++代码
- 批量16位图像转8位
- C++数值排序
- C++大作业———医院病人看病情景代
- OpenKE在windows环境下运行的C++动态链接
- 基于Qt5.9Creator的一个简单socket通信C
- 求两点之间所有路径的C++代码
- C++ 跨平台 异步消息队列
- VC++对话框CDialog的全屏显示及控件居中
- VC++中对Access数据库操作
- VC++ OpenGL三维物体建模--雨伞的绘制(
- 马尔科夫链的C++代码实现
- C++课程设计 电煤气管理系统
- DTW算法 C语言代码
评论
共有 条评论