资源简介
压缩包中包含实验报告,运行视频,是数据结构实验课程作业,可以借鉴参考。其中功能包括输入字母及频率,然后生成相应的哈夫曼编码,然后编码txt文件中的文本,输出,并且会把输出结果存入文件。重新打开控制台,可以通过读取文件重新建立哈夫曼树,就很强
代码片段和文件信息
#include“heap.h“
#include
#include
#include
#include
#include
using namespace std;
struct HuffmanNode{
int weight;//权值
char data;//字母
int num;//记录编码序号
HuffmanNode *leftchild *rightchild *parent;
HuffmanNode(){ weight = 0; data = ‘#‘; num = -1; leftchild = 0; rightchild = 0; parent = 0; }
bool operator<=(HuffmanNode& R){ return weight <= R.weight; }
bool operator>(HuffmanNode& R){ return weight>R.weight; }
};
class HuffmanTree{
public:
void Initialize();
void Encoding() { Encoding(root); }//将输入的字符信息编码
void Decoding() { Decoding(root); }
void PrintCodefile();
void PrintHuffmanTree();
void ReadHuffmanTree();
int IsInitialized();
HuffmanNode* getRoot() { return root; }
protected:
int count;//计算输入的字符总数
HuffmanNode *root;//树根
vector>codeBlock;//二维向量存储编码,外向量为字母对应的编码序号,内向量为字母对应的编码
void mergeTree(HuffmanNode& ht1 HuffmanNode& ht2 HuffmanNode*&parent);//合并二叉树
void coding(HuffmanNode*t ofstream& outfile);
int preOrder(HuffmanNode*t char x);
void Encoding(HuffmanNode* t);
void Decoding(HuffmanNode* t);
};
void HuffmanTree::Initialize(){
ofstream outfile(“hfmTreeData.txt“ ios::out);
MinHeap hp;
HuffmanNode*parent = 0 first second work;
cout << “请输入出现的字母种类个数(包括空格)“ << endl;
cin >> count;
outfile << count << “\n“;
cin.get();//清除回车
for (int i = 0; i cout << “请输入第“ << i + 1 << “个字符信息和权值:“ << endl;
cin.get(work.data);//为了能识别空格,使用cin.get来获取字符
cin.get();//清除回车
cin >> work.weight;
outfile << work.data << “ “ << work.weight << “ “ << “\n“;
cin.get();//清除回车
work.leftchild = 0;
work.rightchild = 0;
work.parent = 0;
hp.Insert(work);//插入最小堆
}
for (int i = 0; i hp.RemoveMin(first);//选择根的权值最小的树
hp.RemoveMin(second);//选择根的权值次小的树
mergeTree(first second parent);//合并
hp.Insert(*parent);//重新插入最小堆中
}
root = parent;//建立根结点
codeBlock.resize(50 vector(50 -1));//编码数组初始化
ofstream outfile2(“hfmTree.txt“ ios::out);
coding(root outfile2);//编码
outfile2.close();
cout << “初始化哈夫曼树成功“ << endl << endl;
};
void HuffmanTree::mergeTree(HuffmanNode&bt1 HuffmanNode&bt2 HuffmanNode*&parent){
parent = new HuffmanNode;
parent->leftchild = new HuffmanNode(bt1); parent->rightchild = new HuffmanNode(bt2);
parent->weight = bt1.weight + bt2.weight;//合并之和
bt1.parent = bt2.parent = parent;//双亲重新指向
}
void HuffmanTree::coding(HuffmanNode* t ofstream& outfile){
static int temp[20];//临时保存编码的数组
static int i = 0;//记录行进位置
static int j = 0;//记录编码序号
if (t->data == ‘#‘){
temp[i] = 0;
i++;
coding(t->leftchild outfile);
temp[i] = 1;
i++;
coding(t->rightchild outfile);
}
else if (t->data != ‘#‘){
//cout << t->data << “:“;
outfile << t->data;
outfile << “:“;
t->num = j;//保存编码序号
for (int n = 0; n codeBlock[j][n] = temp[n];
//cout << temp[n];
outfile << temp[n];
}
j++;
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 182784 2018-01-03 00:01 20161380162林俊贤实验5哈夫曼\20161380162林俊贤哈夫曼报告.doc
文件 9108 2018-01-02 21:08 20161380162林俊贤实验5哈夫曼\20161380162林俊贤哈夫曼源程序\20161380162林俊贤实验5哈夫曼\20161380162林俊贤实验5哈夫曼.cpp
文件 4204 2018-01-02 20:52 20161380162林俊贤实验5哈夫曼\20161380162林俊贤哈夫曼源程序\20161380162林俊贤实验5哈夫曼\20161380162林俊贤实验5哈夫曼.vcxproj
文件 1094 2018-01-02 20:52 20161380162林俊贤实验5哈夫曼\20161380162林俊贤哈夫曼源程序\20161380162林俊贤实验5哈夫曼\20161380162林俊贤实验5哈夫曼.vcxproj.filters
文件 122 2018-01-02 23:56 20161380162林俊贤实验5哈夫曼\20161380162林俊贤哈夫曼源程序\20161380162林俊贤实验5哈夫曼\Codefile.txt
文件 265 2018-01-02 23:57 20161380162林俊贤实验5哈夫曼\20161380162林俊贤哈夫曼源程序\20161380162林俊贤实验5哈夫曼\Debug\20161380.6F16703A.tlog\20161380162林俊贤实验5哈夫曼.lastbuildstate
文件 2444 2018-01-02 23:56 20161380162林俊贤实验5哈夫曼\20161380162林俊贤哈夫曼源程序\20161380162林俊贤实验5哈夫曼\Debug\20161380.6F16703A.tlog\cl.command.1.tlog
文件 13384 2018-01-02 23:57 20161380162林俊贤实验5哈夫曼\20161380162林俊贤哈夫曼源程序\20161380162林俊贤实验5哈夫曼\Debug\20161380.6F16703A.tlog\CL.read.1.tlog
文件 932 2018-01-02 23:57 20161380162林俊贤实验5哈夫曼\20161380162林俊贤哈夫曼源程序\20161380162林俊贤实验5哈夫曼\Debug\20161380.6F16703A.tlog\CL.write.1.tlog
文件 4358 2018-01-02 23:56 20161380162林俊贤实验5哈夫曼\20161380162林俊贤哈夫曼源程序\20161380162林俊贤实验5哈夫曼\Debug\20161380.6F16703A.tlog\li
文件 3142 2018-01-02 23:57 20161380162林俊贤实验5哈夫曼\20161380162林俊贤哈夫曼源程序\20161380162林俊贤实验5哈夫曼\Debug\20161380.6F16703A.tlog\li
文件 878 2018-01-02 23:57 20161380162林俊贤实验5哈夫曼\20161380162林俊贤哈夫曼源程序\20161380162林俊贤实验5哈夫曼\Debug\20161380.6F16703A.tlog\li
文件 909 2018-01-02 23:57 20161380162林俊贤实验5哈夫曼\20161380162林俊贤哈夫曼源程序\20161380162林俊贤实验5哈夫曼\Debug\20161380162林俊贤实验5哈夫曼.log
文件 586806 2018-01-02 23:56 20161380162林俊贤实验5哈夫曼\20161380162林俊贤哈夫曼源程序\20161380162林俊贤实验5哈夫曼\Debug\20161380162林俊贤实验5哈夫曼.obj
文件 404480 2018-01-02 23:56 20161380162林俊贤实验5哈夫曼\20161380162林俊贤哈夫曼源程序\20161380162林俊贤实验5哈夫曼\Debug\vc120.idb
文件 462848 2018-01-02 23:56 20161380162林俊贤实验5哈夫曼\20161380162林俊贤哈夫曼源程序\20161380162林俊贤实验5哈夫曼\Debug\vc120.pdb
文件 2133 2017-12-14 16:41 20161380162林俊贤实验5哈夫曼\20161380162林俊贤哈夫曼源程序\20161380162林俊贤实验5哈夫曼\heap.h
文件 263 2018-01-02 23:57 20161380162林俊贤实验5哈夫曼\20161380162林俊贤哈夫曼源程序\20161380162林俊贤实验5哈夫曼\hfmTree.txt
文件 189 2018-01-02 21:09 20161380162林俊贤实验5哈夫曼\20161380162林俊贤哈夫曼源程序\20161380162林俊贤实验5哈夫曼\hfmTreeData.txt
文件 29 2018-01-02 21:01 20161380162林俊贤实验5哈夫曼\20161380162林俊贤哈夫曼源程序\20161380162林俊贤实验5哈夫曼\ToBeTran.txt
文件 7602176 2018-01-03 00:01 20161380162林俊贤实验5哈夫曼\20161380162林俊贤哈夫曼源程序\20161380162林俊贤实验5哈夫曼.sdf
文件 1054 2018-01-02 21:23 20161380162林俊贤实验5哈夫曼\20161380162林俊贤哈夫曼源程序\20161380162林俊贤实验5哈夫曼.sln
..A..H. 15360 2018-01-03 00:01 20161380162林俊贤实验5哈夫曼\20161380162林俊贤哈夫曼源程序\20161380162林俊贤实验5哈夫曼.v12.suo
文件 157696 2018-01-02 23:56 20161380162林俊贤实验5哈夫曼\20161380162林俊贤哈夫曼源程序\Debug\20161380162林俊贤实验5哈夫曼.exe
文件 736148 2018-01-02 23:56 20161380162林俊贤实验5哈夫曼\20161380162林俊贤哈夫曼源程序\Debug\20161380162林俊贤实验5哈夫曼.ilk
文件 1485824 2018-01-02 23:56 20161380162林俊贤实验5哈夫曼\20161380162林俊贤哈夫曼源程序\Debug\20161380162林俊贤实验5哈夫曼.pdb
文件 0 2018-01-02 23:55 20161380162林俊贤实验5哈夫曼\20161380162林俊贤哈夫曼源程序\Debug\Codefile.txt
文件 263 2018-01-02 23:55 20161380162林俊贤实验5哈夫曼\20161380162林俊贤哈夫曼源程序\Debug\hfmTree.txt
文件 189 2018-01-02 23:55 20161380162林俊贤实验5哈夫曼\20161380162林俊贤哈夫曼源程序\Debug\hfmTreeData.txt
文件 12807828 2018-01-02 21:10 20161380162林俊贤实验5哈夫曼\20161380162林俊贤实验5哈夫曼.mp4
............此处省略10个文件信息
- 上一篇:multi output SVR
- 下一篇:基于神经网络的时间序列预测方法
相关资源
- Huffman Compress 霍夫曼编码 压缩 解压缩
- 编码 隐匿在计算机软硬件背后的语言
- X264实时编码,FFmpeg实时解码
- 使用FFmpeg采集摄像头图像和麦克风音
- Big5编码台湾繁体字体和GBK编码简体字
- BCH编译码程序
- Eclipse专业配色方案 - 让编码更舒适高
- FEC 编码和解码的程序
- 基于FFmpeg4.0.2的AAC编码器
- 密码编码学与网络安全:原理与实践(
- 高斯移动热源编码
- 最简单的基于FFmpeg的编码器 1.2
- ffmpeg 源码demo
- 最简单的基于FFMPEG的音频编码器 1.1
- 最简单的基于FFMPEG的视频编码器修正
- ffmpeg_windows屏幕录制并编码成H264
- H264实时编码RTSP直播
- 国家统计局行政区划编码.zip
- 国家统计局 2018年统计用区划代码和城
- 维吾尔文字符集unicode编码表
- hdb3的Verilog HDL编码
- 维吾尔文unicode编码表
- GB21669-2008 信息技术 维吾尔文、哈萨克
- 信息论与编码王勇编著总复习提纲
- 行政区划2020.zip
- 全国行政区划,省市县、省会城市、
- 哈夫曼树--链表实现编码,解码
- 一个用C写很不错的GPRS的PDU编码程序
- 易语言模块将任何编码转换到GB2312源
-
Hex十六进制/ba
se64编码转换器
评论
共有 条评论