• 大小: 51.84MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2022-07-10
  • 语言: 其他
  • 标签:

资源简介

一、实验目的
1、深入掌握自适应Huffman编码的原理
2、掌握自适应Huffman编码算法的实现过程
3、掌握和熟悉利用编程语言实现自适应Huffman编码器和解码器

二、实验要求
1、实现编码器,对输入字符给出相应的编码结果;
2、实现解码器,对步骤1中的编码结果进行解码;
3、请使用初始编码表如下:

4、对字符串ABBCADAD进行编码;
5、截图显示编码中间结果,并保证最终解码结果正确;
6、编辑程序说明文档。

资源截图

代码片段和文件信息

#include “huffmanTree.h“


int HuffmanTree::sum = 1;

//存储解码数据的字符串
string outp = ““;

//二叉树成员函数实现
BinaryTree::BinaryTree(int num int weight)
{
p_root = new Node(nullptr nullptr nullptr);
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) { //如果A节点是左孩子
if (getBrotherState(p_nodeB) == LeftChild) { // 如果B节点是左孩子
pTemp = p_nodeA->p_parent->p_left;
p_nodeA->p_parent->p_left = p_nodeB->p_parent->p_left;
p_nodeB->p_parent->p_left = pTemp;
}
else {
pTemp = p_nodeA->p_parent->p_left;
p_nodeA->p_parent->p_left = p_nodeB->p_parent->p_right;
p_nodeB->p_parent->p_right = pTemp;
}
}
else {
if (getBrotherState(p_nodeB) == LeftChild) {
pTemp = p_nodeA->p_parent->p_right;
p_nodeA->p_parent->p_right = p_nodeB->p_parent->p_left;
p_nodeB->p_parent->p_left = pTemp;
}
else {
pTemp = p_nodeA->p_parent->p_right;
p_nodeA->p_parent->p_right = p_nodeB->p_parent->p_right;
p_nodeB->p_parent->p_right = pTemp;
}
}
//交换了子节点之后,需要交换父节点
pTemp = p_nodeA->p_parent;
p_nodeA->p_parent = p_nodeB->p_parent;
p_nodeB->p_parent = pTemp;
return true;

}

//把子节点加到父节点上,第一个参数是父节点,第二个参数是子节点,第三个参数是位置
bool BinaryTree::addNode(Node * p_parent Node * p_child Brother brotherState)
{
if (p_parent == nullptr || p_child == nullptr)
return false;
if (brotherState == LeftChild) { 
if (p_parent->p_left != nullptr) {
std::cout << “error:left child exist!“ << std::endl;
return false;//如果父节点有左孩子,则不能添加到左孩子位置
}
p_parent->p_left = p_child;//否则可以添加
}
else if (brotherState == RightChild) { 
if (p_parent->p_right != nullptr) {
std::cout << “error:right child exist!“ << std::endl;
return false;//如果父节点有右孩子,则不能添加到右孩子位置
}
p_parent->p_right = p_child;//否则可以添加
}
else {
std::cout << “error:brotherState is wrong!“ << std::endl;//读取位置信息错误
return false;
}
p_child->p_parent = p_parent;
return true;
}

//判断p节点是否在树中,返回节点信息
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->p_left != nullptr) {
queue.push(p_node->p_left);
}
if (p_node->p_right != nullptr) {
queue.push(p_node->p_right);
}
}
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_n

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2020-01-12 18:30  1191170125_严伟_实验2\实验报告\
     文件     1113617  2020-01-12 18:30  1191170125_严伟_实验2\实验报告\1191170125+严伟+实验二.docx
     目录           0  2019-11-13 10:39  1191170125_严伟_实验2\源代码\
     目录           0  2019-11-13 10:41  1191170125_严伟_实验2\源代码\adaptiveHuffman\
     目录           0  2019-11-13 10:13  1191170125_严伟_实验2\源代码\adaptiveHuffman\.vs\
     目录           0  2019-11-13 10:13  1191170125_严伟_实验2\源代码\adaptiveHuffman\.vs\adaptiveHuffman\
     目录           0  2019-11-14 16:32  1191170125_严伟_实验2\源代码\adaptiveHuffman\.vs\adaptiveHuffman\v15\
     文件       38912  2019-11-14 16:32  1191170125_严伟_实验2\源代码\adaptiveHuffman\.vs\adaptiveHuffman\v15\.suo
     文件    37789696  2019-11-14 16:32  1191170125_严伟_实验2\源代码\adaptiveHuffman\.vs\adaptiveHuffman\v15\Browse.VC.db
     目录           0  2019-11-13 10:14  1191170125_严伟_实验2\源代码\adaptiveHuffman\.vs\adaptiveHuffman\v15\ipch\
     目录           0  2019-11-13 10:41  1191170125_严伟_实验2\源代码\adaptiveHuffman\.vs\adaptiveHuffman\v15\ipch\AutoPCH\
     目录           0  2019-11-14 12:30  1191170125_严伟_实验2\源代码\adaptiveHuffman\.vs\adaptiveHuffman\v15\ipch\AutoPCH\1e0a61e5ddd2089\
     文件    38600704  2019-11-14 15:58  1191170125_严伟_实验2\源代码\adaptiveHuffman\.vs\adaptiveHuffman\v15\ipch\AutoPCH\1e0a61e5ddd2089\ADATIVEHUFF.ipch
     目录           0  2019-11-13 10:41  1191170125_严伟_实验2\源代码\adaptiveHuffman\.vs\adaptiveHuffman\v15\ipch\AutoPCH\1f43f785a88f2e7a\
     文件    38141952  2019-11-13 10:41  1191170125_严伟_实验2\源代码\adaptiveHuffman\.vs\adaptiveHuffman\v15\ipch\AutoPCH\1f43f785a88f2e7a\ADATIVEHUFF.ipch
     目录           0  2019-11-13 10:38  1191170125_严伟_实验2\源代码\adaptiveHuffman\.vs\adaptiveHuffman\v15\ipch\AutoPCH\59b291d91855879a\
     文件    40566784  2019-11-13 10:38  1191170125_严伟_实验2\源代码\adaptiveHuffman\.vs\adaptiveHuffman\v15\ipch\AutoPCH\59b291d91855879a\ADATIVEHUFF.ipch
     目录           0  2019-11-13 10:15  1191170125_严伟_实验2\源代码\adaptiveHuffman\.vs\adaptiveHuffman\v15\ipch\AutoPCH\a0c76fed011b15ef\
     文件    31719424  2019-11-13 10:34  1191170125_严伟_实验2\源代码\adaptiveHuffman\.vs\adaptiveHuffman\v15\ipch\AutoPCH\a0c76fed011b15ef\HUFFMANTREE.ipch
     目录           0  2019-11-13 10:40  1191170125_严伟_实验2\源代码\adaptiveHuffman\.vs\adaptiveHuffman\v15\ipch\AutoPCH\bca905110c37abfa\
     文件    40566784  2019-11-13 10:40  1191170125_严伟_实验2\源代码\adaptiveHuffman\.vs\adaptiveHuffman\v15\ipch\AutoPCH\bca905110c37abfa\ADATIVEHUFF.ipch
     文件        1458  2019-11-13 10:13  1191170125_严伟_实验2\源代码\adaptiveHuffman\adaptiveHuffman.sln
     目录           0  2019-11-14 11:45  1191170125_严伟_实验2\源代码\adaptiveHuffman\adaptiveHuffman\
     文件        6034  2019-11-13 10:38  1191170125_严伟_实验2\源代码\adaptiveHuffman\adaptiveHuffman\adaptiveHuffman.vcxproj
     文件        1080  2019-11-13 10:38  1191170125_严伟_实验2\源代码\adaptiveHuffman\adaptiveHuffman\adaptiveHuffman.vcxproj.filters
     文件         165  2019-11-13 10:13  1191170125_严伟_实验2\源代码\adaptiveHuffman\adaptiveHuffman\adaptiveHuffman.vcxproj.user
     文件       10522  2019-11-14 11:45  1191170125_严伟_实验2\源代码\adaptiveHuffman\adaptiveHuffman\adativeHuff.cpp
     目录           0  2019-11-13 10:38  1191170125_严伟_实验2\源代码\adaptiveHuffman\adaptiveHuffman\Debug\
     文件         199  2019-11-13 10:38  1191170125_严伟_实验2\源代码\adaptiveHuffman\adaptiveHuffman\Debug\adaptiveHuffman.log
     目录           0  2019-11-13 10:38  1191170125_严伟_实验2\源代码\adaptiveHuffman\adaptiveHuffman\Debug\adaptiveHuffman.tlog\
     文件         296  2019-11-13 10:38  1191170125_严伟_实验2\源代码\adaptiveHuffman\adaptiveHuffman\Debug\adaptiveHuffman.tlog\adaptiveHuffman.lastbuildstate
............此处省略37个文件信息

评论

共有 条评论