- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《数据结构》课程设计报告
53091 1 实 验 A3
姓名 杨天宇 学号 2009级 15班
502 组 室: 12
提交日期 成绩 指导教师
问题解析(对问题的分析、解题思路与解题方法): 问题分析:
编码程序读取一个txt文件,压缩成huf文件,并使用一个img文件来 保存编码。
解码程序读取huf文件和huf文件,解码为原来的txt文件。 图形化程序调用编码程序、解码程序完成功能,并图形化显示树。
解题思路:
源文件字符频率使用出现次数表示。 img文件保存字符出现频率,可以由此构造哈夫曼树。 哈夫曼树每个节点含有字符、编码、左指针、右指针。
排序算法使用自定义的快速排序算法。
解题方法:
文件编码:
读入txt文件
统计词频 借鉴课本上的方法构建哈夫曼树 构建字符替换表
输出img文件、huf文件
图形化表示:
根据用户选择,调用coder进行压缩 读入img文件,图形化显示哈夫曼树、字符编码、压缩率 根据用户选择,调用decoder进行输出
文件解码: 读入img文件,构造哈夫曼树 读入huf文件,译码并输出文件
coder和decoder比较简单,适用于过程化编程;huff需要图形化显 示,使用qt框架。整个程序运行在linux平台,使用c标准库和qt库,因 此原则上源代码可移植于win dows。
任务分工及进度计划:
杨天宇:任务分配,生成哈夫曼编码,图形化表示
闫小龙:存储打印源文件字符的频率,排序、生成哈夫曼树 常耀光:给出文件编码,译码程序,并计算压缩率
数据结构选择(包括改进或给出)、算法设计:
CharPair记录字符-出现次数的键值对, CharPair数组charTable为字母频率统计表。
根据该表,可以构建 haffman树。
typedef struct{
char c;
int n;
}CharPair;
CharPair charTable[];
SubPair记录字符-替代字符串的键值对,用于编码输出时从里边得到字符对应的字符 串形式编码。
typedef struct{
const char c;
char* r;
}SubPair;
TreeNode表示huffman树的节点,数据域是 CharPair。该节点是实际节点时, pair.c
有实际字符,否则 pair.c为0.
typedef struct __a{
CharPair pair;
struct __a* left;
struct __a* right;
}TreeNode;
MainWidget负责管理所有Widget
class MainWidget: public QWidget
{
Q_OBJECT
sig nals:
// 读取、输出文件完成后发出信号,通知 Mai nWin dow给出提示
void loadFileOk(co nst QStri ng);
void exportFileOk(co nst QStri ng);
public slots:
// 读取文件,使huffview 画图,显示压缩率
void ope nl mportFileDialog();
// 输出文件
void ope nExportFileDialog();
private:
// 显示压缩率
void showRate();
// 窗口内的部分成员
QPushButto n* importButt on;
QPushButt on* exportButt on;
HuffView* huffView;
QTextEdit* textEdit;
QGridLayout* gridLayout;
QFileI nfo txtFileI nfo;
QFilel nfo imgFilel nfo;
QFilel nfo hufFilel nfo;
};
HuffView负责具体画图
class HuffView : public QGraphicsView
{
Q_OBJECT
public:
explicit HuffView(QWidget *pare nt = 0);
// 矩形长度常量
enum{ RectLe n = 50 };
// 清空
void clear();
public slots:
// 画图。参数依次为:树的节点, x坐标,y坐标,层树。
void in itSce ne( TreeNode*, i nt, i nt, i nt);
protected:
// 重写双击事件,允许放大缩小
void mouseDoubleClickEve nt(QMouseEve nt *eve nt);
private:
// 画矩形,画线
void drawRect(TreeNode*, i nt, in t);
文档评论(0)