logo资料库

哈夫曼树完整课程设计C++包过没优秀也有及格.doc

第1页 / 共26页
第2页 / 共26页
第3页 / 共26页
第4页 / 共26页
第5页 / 共26页
第6页 / 共26页
第7页 / 共26页
第8页 / 共26页
资料共26页,剩余部分请下载后查看
目 录
一.需求分析
1.问题描述
2.功能要求
二.系统总框图和功能模块说明
1.系统总框图
2.功能模块说明
3.系统设计
3.1主要链表
3.2主要功能函数
3.3关键函数的流程图
4.系统调试:
5.总结
6.源程序:
仲 恺 农 业 工 程 学 院 课 程 设 计 报 告 课程名称: 数据结构 院 (系): 信息科学与技术学院 专业班级: 号: 学 名: 姓 指导老师: 1
承诺书 郑重声明:本人所呈交的课程设计是本人在导师指导下独立撰写并完成的,课程设 计没有剽窃、抄袭、造假等违反学术道德、学术规范和侵权行为。本课程设计不包含任 何其他个人或集体已经发表或撰写过的研究成果,如果引用则标识出了出处。对本课程 设计的研究做出贡献的个人和集体,均已在文中以明确方式标明。 课程设计与资料若有不实之处,本人承担一切相关责任。特此声明。 签名: 年 月 日 2
目 录 一 . 需 求 分 析 ................................... 4 1 . 问 题 描 述 ....................................... 4 2 . 功 能 要 求 ....................................... 4 二 . 系 统 总 框 图 和 功 能 模 块 说 明 ... 5 1 . 系 统 总 框 图 ................................... 5 2 . 功 能 模 块 说 明 ............................... 5 2 . 功 能 模 块 说 明 ............................... 5 3 . 系 统 设 计 ....................................... 5 3 . 1 主 要 链 表 .................................... 5 3 . 2 主 要 功 能 函 数 ............................ 7 3 . 3 关 键 函 数 的 流 程 图 .................... 7 4 . 系 统 调 试 : ................................. 1 0 5 . 总 结 ............................................. 1 4 6 . 源 程 序 : ..................................... 1 4 3
一.需求分析 1.问题描述 哈夫曼编/译码器 利用哈夫曼编码进行信息通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本。但是, 这要求在发送端通过一个编码系统对待传数据预先编码,在接收端将传来的数据进行译码(复原)。 对于双工信道(即可以双向传输信息的信道),每端都需要一个完整的编/译码系统。试为这样的信 息收发站写一个哈夫曼编/译码系统。 2.功能要求 I:初始化(Initialization)。从终端读入字符集大小 n,以及 n 个字符和 n 个权值,建立哈夫曼 树,并将它存于文件 hfmTree 中。 E:编码(Encoding)。利用已建好的哈夫曼树(如不在内存,则从文件 htmTree 中读入),对文件 ToBeTran 中的正文进行编码,然后将结果存入文件 CodeFile 中。 D:译码(Decoding)。利用已建好的哈夫曼树将文件 CodeFile 中的代码进行译码,结果存入文件 TextFile 中。 P:印代码文件(Print)。将文件 CodeFile 以紧凑格式显示在终端上,每行 50 个代码。同时将此字 符形式的编码写入文件 CodePrint 中。 T:印哈夫曼树(Tree Printing)。将已在内存中的哈夫曼树以直观的方式(树或凹入表形式)显示 在终端上,同时将此字符形式的哈夫曼树写入文件 TreePrint 中。 4
二.系统总框图和功能模块说明 1.系统总框图 哈夫曼编/译码器 印 代 码 文 件 印 哈 夫 曼 树 建 立 哈 夫 曼 树 对 代 码 进 行 译 码 对 文 件 中 正 文 进 行 编 码 图 1. 系统总框图 2.功能模块说明 (1).初始化; Initialization(LiHTNode *&ht); (2).编码; Encoding(LiHTNode *&ht,LeafCode *&lc); (3).译码; Decoding(LeafCode *&lc); (4).印代码模块; Print(); (5).印哈夫曼树。 Tree_Printing(LiHTNode *&ht); 3.系统设计 3.1 主要链表 struct LiHTNode //用于建立哈夫曼树 { char data; double weight; char code; //节点 //权值 //编码 5
LiHTNode *parent; LiHTNode *lchild; LiHTNode *rchild; }; 存储结构如图所示 //双亲 //左孩子 //右孩子 parent code weight data lchild rchild 图 2. 哈夫曼树节点存储结构 struct LeafCode //用于存储叶子节点和哈夫曼编码 { }; char leaf; //叶子 char code[N]; //叶子到根节点的编码串 int top; //栈顶指针 LeafCode *next; 存储结构如图所示 Leaf code[N] top 图 3. 叶子哈夫曼编码存储结构 6
3.2 主要功能函数 Initialization(LiHTNode *&ht) //初始化 Encoding(LiHTNode *&ht,LeafCode *&lc) //编码 Decoding(LeafCode *&lc) Print() //译码 Tree_Printing(LiHTNode *&ht) 3.3 关键函数的流程图 //印代码模块 //印哈夫曼树 (1). Initialization(LiHTNode *&ht) //初始化 开始 存入 ASCLL 码和各字 符权重,字符集大小 n 设置为 128 创建哈夫曼树 存 入 文 件 htmTree 结束 7
(2). Encoding(LiHTNode *&ht,LeafCode *&lc) //编码 图 4. 初始化 开始 文 对 件 ToBeTran 中 正 将 结 果 存 入 文 件 CodeFile 中 结束 图 5. 编码 (3). Decoding(LeafCode *&lc) //译码 开始 利用已建好的哈夫曼树 将 文 件 CodeFile 中 的 代码进行译码 结 果 存 入 文 件 结束 8
分享到:
收藏