哈夫曼编码译码器实验报告
《数据结构》课程设计报告
QFileInfo hufFileInfo; };
HuffView负责具体画图
class HuffView : public QGraphicsView {
Q_OBJECT public:
explicit HuffView(QWidget *parent = 0); //矩形长度常量
enum{ RectLen = 50 }; //清空
void clear(); public slots:
//画图。参数依次为:树的节点,x坐标,y坐标,层树。 void initScene( TreeNode*, int, int, int); protected:
//重写双击事件,允许放大缩小
void mouseDoubleClickEvent(QMouseEvent *event); private:
//画矩形,画线
void drawRect(TreeNode*, int, int); void drawLine(int,int,int,int); QGraphicsScene* scene; };
Coder主要算法:
参数验证
读文本文件,计算输入次数,构建charTable 根据charTable构造huffman树
将charTable复制到临时字符表tmp,使用自定义的快速排序对tmp排序 根据排序后的tmp,构造TreeNode*数组tmp2 在treeNode*数组tmp2上构造huffman树 将构造好的huffman树的根节点指针赋值
根据huffman树构造subTable,得到字符-编码的键值对 输出img文件,输出编码后的huf文件
Decoder要主算法
参数验证
读取img文件,构造charTable 通过charTable构造huffman树
根据huffman树,解码文件,输出
//display mapping table
QByteArray tmpda = tmpFileName.toLatin1(); const char* _tmpda = tmpda.data();
FILE* tmpfp = fopen(_tmpda, "r"); unlink(_tmpda);
QTextStream* tmpFile = new QTextStream(tmpfp); textEdit->clear();
textEdit->setText(tmpFile->readAll()); fclose(tmpfp); delete tmpFile;
//display the rate showRate(); //load OK
QString* _msg = new QString(txtFileInfo.fileName()); emit(loadFileOk(*_msg)); }
void MainWidget::openExportFileDialog(){
if(txtFileInfo.canonicalFilePath().isEmpty() txtFileInfo.canonicalFilePath().isNull()) {
QMessageBox qm;
qm.setWindowTitle(tr("Warning"));
qm.setText("You should import a file first."); qm.setIcon(QMessageBox::Warning); qm.exec(); return; }
bool ok;
QString outFileName = QInputDialog::getText(this, tr("Input name:"), tr("File name:"), QLineEdit::Normal, tr(""), &ok); if(!ok ) return;
if(outFileName.isEmpty() || outFileName.isNull()) outFileName = hufFileInfo.fileName()+".txt"; QString tmp = outFileName;
QString tmp1 = imgFileInfo.canonicalFilePath(); QString tmp2 = hufFileInfo.canonicalFilePath();
QString cmd = tr("./decoder -o ") + tmp.replace(" ").replace("(","\\(").replace(")","\\)")+tr(" ") + tmp1.replace(" ", ").replace("(","\\(").replace(")","\\)") + tr(" ") + tmp2.replace(" ", ").replace("(","\\(").replace(")","\\)"); QByteArray da = cmd.toLatin1(); const char* _da = da.data(); system(_da);
emit(exportFileOk(outFileName)); }
the file ",
相关文章
- 北邮期中信息论附加题实验报告
- 哈夫曼编码与译码数据结构实验
- 哈夫曼编码译码器1
- 哈夫曼树及哈夫曼编码译码
- 哈夫曼树课程设计
- 信息论与编码实验报告
- 哈夫曼编码实验报告
- 数据结构研究论文
- 多媒体技术实验报告
信息论实验报告 3. Matlab 仿真实验:掷骰子游戏,每次同时抛掷两枚骰子,将两枚骰子点数的和作为游戏结果,重复抛掷 1000 次(视为 1000 次信源符号输出).要求: (1) 对 1000 次游戏结果进行逐符号二进制定长编码和译码 ...
May 21 实验报告 2015 数据结构 第四次实验 姓名:陈斌 学号:E11314079 专业:13计算机科学与技术 学号E11314079专业计算机科学与技术姓名陈斌 实验日期 2015.05.21教师签字成绩 实验报告 [实验名称] ...
滁州学院 课程设计报告 课程名称: 数据结构 设计题目: 哈夫曼编码译码器 系 别: 计算机科学与技术 专 业: 网络工程 组 别: 第十组 起止日期: 2011年4月28日 ~2011年5月23日 指导教师: 计算机科学与技术系2010年 ...
实验2哈夫曼树及哈夫曼编码译码的实现 一.实验目的和要求 通过本实验使学生深刻理解二叉树的性质和存储结构.认识哈夫曼树.哈夫曼编码的作用和意义.能够建立一个哈夫曼树,并输出哈夫曼编码,正确调程序. 二.实验内容和原理 哈夫曼编码(Huffm ...
中南林业科技大学 课程设计报告 设计名称: 数据结构课程设计 姓 名: 王昆 学 号: 20094282 专业班级: 2009级软件工程 系 (院): 计算机与信息工程学院 设计时间: 2010~2011学年第二学期 设计地点: 电子信息楼 ...
本科生实验报告 实验课程 信息论与编码 学院名称 信息科学与技术学院 专业名称 通信工程 学生姓名 学生学号 指导教师 谢振东 实验地点 6C601 实验成绩 二〇 一五 年 十一 月二〇 一五 年 十一月 实验一:香农(Shannon ) ...
赫夫曼编码实验报告 一.实验内容 实现赫夫曼编码的算法 二.哈夫曼编码的实验步骤 1.输入n个信源符号及其对应的权值 2.利用select()函数找出权值最小的两个信源,并各自分配一个码元" 0"" 1&quo ...
计算机数据结构研究论文 题目: 院系: 计算机科学与信息工程系 专业: 网 络 工 程 班级: (1)班 姓名: 侯 三 杰 学号: 日期: Huffman 编码器与Joseph 约瑟夫环 .Huffman编码器 1. 问题描述: 给出一个 ...
多媒体技术及应用实验报告 班级: 姓名:学号:电信1301秦行U201313480 实验一:Huffman编码 一.实验内容 1.了解BMP图像的格式,实现BMP图片格式的数据域及文件头的分离 2.熟悉Huffman编码原理 3.用C语言使 ...