没有合适的资源?快使用搜索试试~ 我知道了~
数据结构哈夫曼树编码译码实验报告 (2).pdf
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 38 浏览量
2022-11-12
13:07:33
上传
评论
收藏 348KB PDF 举报
温馨提示
试读
21页
。。。
资源推荐
资源详情
资源评论
资料范本
本资料为 word 版本,可以直接编辑和打印,感谢您的下载
数据结构哈夫曼树编码译码实
验报告
地点:__________________
时间:__________________
说明:本资料适用于约定双方经过谈判,协商而共同承认,共同遵守的责任与
义务,仅供参考,文档可直接下载或修改,不需要的部分可直接删除,使用时
请详细阅读内容
【详细设计】
具体代码实现如下:
//HaffmanTree.h
#include<iostream>
#include<fstream>
#include<string>
struct HuffmanNode //哈夫曼树的一个结点
{
int weight;
int parent;
int lchild,rchild;
};
class HuffmanTree //哈夫曼树
{
private:
HuffmanNode *Node; //Node[]存放哈夫曼树
char *Info; //Info[]存放源文用到的字符——源码,如
'a','b','c','d','e',此内容可以放入结点中,不单独设数组存放
int LeafNum; //哈夫曼树的叶子个数,也是源码个数
public:
HuffmanTree();
~HuffmanTree();
void CreateHuffmanTree(); /*在内存中建立哈夫曼树,存放在 Node[]
中。 让用户从两种建立哈夫曼树的方法中选择:
1.从键盘读入源码字符集个数,每个字符,和每个字符的权重,建立哈夫
曼树,
并将哈夫曼树写入文件 hfmTree 中。2.从文件 hfmTree 中读入哈夫曼树信
息,建立哈夫曼树*/
void CreateHuffmanTreeFromKeyboard();
void CreateHuffmanTreeFromFile();
void Encoder(); /*使用建立好的哈夫曼树(如果不在内存,则从文件
hfmTree 中读入并建立内存里的哈夫曼树),
对文件 ToBeTran 中的正文进行编码,并将码文写入文件 CodeFile 中。
ToBeTran 的内容可以用记事本等程序编辑产生。*/
void Decoder(); /*待译码的码文存放在文件 CodeFile 中,使用建立好
的哈夫曼树(如果不在内存,
则从文件 hfmTree 中读入并建立内存里的哈夫曼树)将码文译码,
得到的源文写入文件 TextFile 中,并同时输出到屏幕上。*/
void PrintCodeFile(); /*将码文文件 CodeFile 显示在屏幕上*/
void PrintHuffmanTree(); /*将哈夫曼树以直观的形式(凹入表示法,
或广义表,或其他树形表示法)显示在屏幕上,
同时写入文件 TreePrintFile 中*/
void PrintHuffmanTree_aoru(int T,int layer=1); /*凹入表示法显示哈
夫曼树,由 PrintHuffmanTree()调用*/
};
/////////////////////////////////////////////////////////////////
//HuffmanTree.cpp
#include<string>
#include<limits> //为使用整型最大值
#include"HuffmanTree.h"
using namespace std;
//******************************************************
HuffmanTree::HuffmanTree()
{
Node=NULL;
}
//******************************************************
HuffmanTree::~HuffmanTree()
{
delete[]Node;
}
//******************************************************
void HuffmanTree::CreateHuffmanTree()
{
char Choose;
cout<<"你要从文件中读入哈夫曼树(按 1),还是从键盘输入哈夫曼树(按
2)?";
cin>>Choose;
if(Choose=='2') {//键盘输入建立哈夫曼树
CreateHuffmanTreeFromKeyboard();
}//choose=='2'
else { //从哈夫曼树文件 hfmTree.dat 中读入信息并建立哈夫曼树
CreateHuffmanTreeFromFile();
}
}
//******************************************************
void HuffmanTree::CreateHuffmanTreeFromKeyboard()
{
int Num;
cout<<"\n 请输入源码字符集个数:";
cin>>Num;
if (Num<=1)
{
cout<<"无法建立少于 2 个叶子结点的哈夫曼树。\n\n";
return;
}
LeafNum=Num;
Node=new HuffmanNode[2*Num-1];
Info=new char[2*Num-1];
for(int i=0;i<Num;i++) {//读入哈夫曼树的叶子结点信息
cout<<"请输入第"<<i+1<<"个字符值";
getchar();
Info[i]=getchar(); //源文的字符存入字符数组 Info[]
getchar();
cout<<"请输入该字符的权值或频度";
cin>>Node[i].weight; //源文的字符权重存入 Node[].weight
Node[i].parent=-1;
Node[i].lchild=-1;
Node[i].rchild=-1;
}
剩余20页未读,继续阅读
资源评论
G11176593
- 粉丝: 6689
- 资源: 3万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功