资源简介
有以下功能:
初始化 从终端读入字符集大小n及n个字符和m个权值,建立哈夫曼树,并将它存于文件hfmtree中
编码 利用已建好的哈夫曼树(如不在内存,则从文件hfmtree中读入),对文件tobetrans中的正文进行编码,然后将结果存入文件codefile中
解码 利用已建好的哈夫曼树将文件codefile中的代码进行译码,结果存入文件textfile中
打印 将文件codefile以紧凑格式显示在终端上,每行50个代码。同时将此字符形式的编码文件写入文件codeprint中
打印哈夫曼树 将已在内存中的哈夫曼树以直观的方式(树或凹入表形式)显示在终端上,同时将此字符形式的哈夫曼树写入文件treeprint中
附带详细的设计报告(最后的课程设计等级被评定为优秀)
代码片段和文件信息
#include “huffman.h“
#include “qdebug.h“
#include
#include
#include
#include
#include
using namespace std;
Huffman::Huffman()
{
}
void Huffman::Creat_Haffmantree(int &nQString *listt1int *listt2HNodeType *&hhh){
HNodeType *HaffNode = new HNodeType[2 * n - 1];
int i j;
int m1 m2 x1 x2;
for (i = 0; i<2 * n - 1; i++)
{
HaffNode[i].weight = 0;
HaffNode[i].parent = -1;
HaffNode[i].lchild = -1;
HaffNode[i].rchild = -1;
HaffNode[i].inf = “0“;
}
for (i = 0; i {
HaffNode[i].inf=listt1[i];
HaffNode[i].weight=listt2[i];
}
for (i = 0; i {
m1 = m2 = Maxvalue;
x1 = x2 = 0;
for (j = 0; j {
if (HaffNode[j].parent == -1 && HaffNode[j].weight {
m2 = m1;
x2 = x1;
m1 = HaffNode[j].weight;
x1 = j;
}
else
{
if (HaffNode[j].parent == -1 && HaffNode[j].weight {
m2 = HaffNode[j].weight;
x2 = j;
}
}
}
//将找出的最小和次小合并,创造其父结点
HaffNode[x1].parent = n + i;
HaffNode[x2].parent = n + i;
HaffNode[n + i].weight = HaffNode[x1].weight + HaffNode[x2].weight;
HaffNode[n + i].lchild = x1;
HaffNode[n + i].rchild = x2;
HaffNode[n + i].inf = ““;
}
// cout << “显示存储的哈弗曼树信息:“ << endl;
// cout << “权值 左孩子 右孩子 双亲“ << endl;
QString aa=“哈夫曼树的信息(字符信息、左孩子、右孩子、权值、父节点):“;
fstream file2;
file2.open(“C:\\treeprint.txt“ios::out| ios::binary);
if(!file2){
qDebug()<<“treeprint.txt文件不能打开!\n“;
abort();
}
else{file2< for(int a=0;a<2*n-1;a++){
file2< file2< file2< file2< file2< }
}
file2.close();
hhh=HaffNode;
for (i = 0; i<2 * n - 1; i++)
{
qDebug() << HaffNode[i].weight << “ “;
qDebug() << HaffNode[i].lchild << “ “;
qDebug() << HaffNode[i].rchild << “ “;
qDebug() << HaffNode[i].parent << “ “;
qDebug() << HaffNode[i].inf ;
}
//写入文件
fstream outfile1;
outfile1.open(“C:\\hfmtree.txt“ ios::out | ios::trunc | ios::binary);//建立进行写入的文件
if (!outfile1) //没有创建成功则显示相应信息
{
qDebug() << “hfmtree.txt文件不能打开“ << endl;
abort();
}
for (i = 0; i<2 * n - 1; i++) //将内存中从HaffNode[i]地址开始的sizeof(HaffN
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 311027 2017-02-21 15:15 ff\b2.jpg
文件 222 2017-02-24 17:09 ff\b2.qrc
文件 429685 2017-02-22 17:47 ff\B22.png
文件 25655 2017-02-20 19:23 ff\back.jpg
文件 218440 2017-02-21 14:44 ff\background.jpg
文件 93 2017-02-24 17:10 ff\background.qrc
文件 5756 2017-02-23 20:10 ff\button.png
文件 20591 2017-02-23 20:54 ff\button2.png
文件 618 2017-02-27 23:52 ff\ff.pro
文件 18472 2017-03-02 19:39 ff\ff.pro.user
文件 9307 2017-03-01 18:50 ff\huffman.cpp
文件 847 2017-03-01 14:57 ff\huffman.h
文件 90 2017-02-21 14:27 ff\image.qrc
文件 19156 2017-03-01 15:14 ff\leef.png
文件 19825 2017-03-01 15:56 ff\leef2.png
文件 1094 2017-03-01 21:02 ff\main.cpp
文件 7191 2017-03-02 19:39 ff\mainwindow.cpp
文件 725 2017-03-01 16:52 ff\mainwindow.h
文件 5398 2017-02-24 13:06 ff\mainwindow.ui
文件 345 2017-02-27 19:53 ff\mydialog.cpp
文件 326 2017-02-24 19:33 ff\mydialog.h
文件 1202 2017-02-27 19:02 ff\mydialog.ui
文件 4821 2017-03-02 19:39 ff\mytree.cpp
文件 348 2017-03-01 11:30 ff\mytree.h
文件 778 2017-03-01 16:25 ff\mytree.ui
文件 2 2017-02-21 14:30 ff\ok.cpp
文件 26380 2017-02-21 14:23 ff\ok.jpg
文件 44 2017-02-24 17:10 ff\ok.qrc
文件 180 2017-02-28 18:47 ff\queue.cpp
文件 730 2017-02-28 20:28 ff\queue.h
............此处省略11个文件信息
- 上一篇:ueditor for bos
- 下一篇:王放912000720220.zip
相关资源
- 适用于VC的FFMpeg静态库已编译)
- QT之模仿手机主界面左右滑动翻页,带
- qt实现串口通信
- 学生信息管理系统,非常详细
- Qt Openglwidget 显示图片纹理贴图
- win32下的简单打字游戏
- VS2017环境集成百度语音识别API工程
- Qt人事管理系统
- Qt学生管理系统源码
- mqtt资料加源码stm32单片机+TCP
- Qt学生成绩管理系统源码可运行
- 工具盒类+进度条+调色板+电子钟+可拓
- openGL实现三维点云显示
- Qt之纯QML实现视频播放器源码
- QT开发的串口udptcp通信上位机软件
- Qt实现的一个文本编辑器
- IEC61850服务端模拟软件 V1.0
- Qt猜数字游戏
- Bonjour SDK for Windows
- 基于winpcap的网络数据采集器的实现
- 空间向量模型源代码
- Qt管理员权限工具
- Qt pdf poppler
- QT的使用手册
- 关于求线段和线段,线段和圆弧,圆
- QT文件传输266846
- 基于Qt5的串口调试助手
- PCL点云库SACSegmentation用法demo
- 棋盘格生成小工具
- cocos2dx经典三消游戏
评论
共有 条评论