资源简介

压缩包中包含实验报告,运行视频,是数据结构实验课程作业,可以借鉴参考。其中功能包括输入字母及频率,然后生成相应的哈夫曼编码,然后编码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\link.command.1.tlog

     文件       3142  2018-01-02 23:57  20161380162林俊贤实验5哈夫曼\20161380162林俊贤哈夫曼源程序\20161380162林俊贤实验5哈夫曼\Debug\20161380.6F16703A.tlog\link.read.1.tlog

     文件        878  2018-01-02 23:57  20161380162林俊贤实验5哈夫曼\20161380162林俊贤哈夫曼源程序\20161380162林俊贤实验5哈夫曼\Debug\20161380.6F16703A.tlog\link.write.1.tlog

     文件        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个文件信息

评论

共有 条评论