热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

求助:C语言实现哈夫曼树编码与解码系统

最近遇到了一道关于哈夫曼树的编程题目,需要在下午之前完成。题目要求设计一个哈夫曼编码和解码系统,能够反复显示和处理多个项目,直到用户选择退出。希望各位大神能够提供帮助。
### 背景 最近遇到一道关于哈夫曼树的编程题目,需要在下午之前完成。题目要求设计一个哈夫曼编码和解码系统,能够反复显示和处理多个项目,直到用户选择退出。由于时间紧迫,希望各位大神能够提供帮助。 ### 问题描述 设计一个利用哈夫曼算法的编码和译码系统,能够反复显示和处理多个项目,直到用户选择退出。 ### 基本要求 1. 将权值数据存放在数据文件(文件名为`data.txt`,位于执行程序的当前目录中)。 2. 分别采用动态和静态存储结构。 3. 初始化:通过键盘输入字符集大小`n`、`n`个字符和`n`个权值,建立哈夫曼树。 4. 编码:利用建好的哈夫曼树生成哈夫曼编码。 5. 输出编码。 ### 实现要求 - 使用VC6.0实现,做成一个控制台程序即可。 - 不能使用任何MFC扩展动态库,如STL或组件。 - 如果删除数据文件或破坏数据,程序应能检测出这种异常,不能崩溃。 ### 代码示例 ```c #include #include #define MAX 21 struct Huffnode { char data; /* 结点值 */ int weight; /* 权值 */ int parent; /* 父结点 */ int left; /* 左结点 */ int right; /* 右结点 */ }; struct Huffcode { char cd[MAX]; int start; }; Huffnode ht[2 * MAX]; Huffcode hcd[MAX], d; int i, k, f, l, r, n, c, m1, m2; char ch, *menu[] = { "-------------构建哈夫曼树------------", "1.----------添加字符和权值-----------", "2.----------输出哈夫曼编码-----------", "3.----------退出系统-----------------" }; void Enter() { printf("输入元素个数:"); scanf("%d", &n); for (i = 1; i <= n; i++) { getchar(); printf("第%d个元素=>\n\t结点值:", i); scanf("%c", &ht[i].data); printf("\t权重:"); scanf("%d", &ht[i].weight); } for (i = 1; i <= 2 * n - 1; i++) { ht[i].parent = ht[i].left = ht[i].right = 0; } for (i = n + 1; i <= 2 * n - 1; i++) { /* 构造哈夫曼树 */ m1 = m2 = 32767; l = r = 0; /* l和r是最小权重的两个结点位置 */ for (k = 1; k <= i - 1; k++) { if (ht[k].parent == 0) { if (ht[k].weight 3); return s; } void main() { for (;;) { switch (menu_select()) { case 1: Enter(); break; case 2: Display(); break; case 3: exit(0); } } } ``` ### 问题讨论 1. **UP** 2. **UP** 3. 额。。。难道高手都在午休。。。惨了惨了 4. 这个时候来问作业题是否太晚了? 5. 没办法。。。刚才无聊开了下邮箱。。。就看到了,要是下午要的时候才看到更惨 6. just do it~~ 我的资源里有,用MFC做的,没使用扩展库! [链接](http://download.csdn.net/source/403519) 希望有所帮助! 7. 楼主........ 祝你好运了饿~~~~ 8. **UP** 9. 我下下来看了,东西很好,但是能力有限,没搞懂。。。。 10. 汗~~有啥不懂?把里面的枝枝叶叶去掉,拿出来核心代码,放到控制台下,就行了! 11. 不能使用任何MFC扩展动态库,比如STL或者组件。 够bt 12. 就是让我们用单纯的C语言写好像。。。。刚找到一个挺简单的正在研究,如果能用,发上来大家共享下 13. 改天好好研究下你的代码,今天先随便找了个简单的改了改打发一下任务吧,一会研究下怎么把分给你 汗。。。。。。。。。顺便把代码粘上来分享吧,虽然很简单 14. 附上简单代码示例 15. 看不懂 能写详细点吗? 16. 附上另一个代码示例
推荐阅读
  • 本文详细探讨了C++中赋值运算符重载函数(operator=)的使用方法和注意事项,结合实例分析了其参数、返回值、调用时机等关键点,并讨论了浅拷贝和深拷贝的区别及其重要性。 ... [详细]
  • 题意题目大意很简单,很容易找出对应字母的ASCII码值的关系,但是有一点需要注意,请看代码:读字符串必须要用getline ... [详细]
  • 本文将详细介绍NSRunLoop的工作原理,包括其基本概念、消息类型(事件源)、运行模式、生命周期管理以及嵌套运行等关键知识点,帮助开发者更好地理解和应用这一重要技术。 ... [详细]
  • 在使用 Spring Cloud Config 作为配置中心时,若在配置文件中指定了请求路径但未能生效,本文将探讨其原因及解决方案。 ... [详细]
  • 本文介绍了两种使用Java发送短信的方法:利用第三方平台的HTTP请求和通过硬件设备短信猫。重点讲解了如何通过Java代码配置和使用短信猫发送短信的过程,包括必要的编码转换、串口操作及短信发送的核心逻辑。 ... [详细]
  • Android中解析XML文件的实践指南
    本文详细介绍了在Android应用开发中解析XML文件的方法,包括从本地文件和网络资源获取XML文件的不同途径,以及使用DOM、SAX和PULL三种解析方式的具体实现。 ... [详细]
  • 本文探讨了在JavaScript中执行字符串形式代码的多种方法,包括使用eval()函数以及跨页面调用的方法。同时,文章详细介绍了JavaScript中字符串的各种常用方法及其应用场景。 ... [详细]
  • 本文介绍如何在Ubuntu环境下为OpenWrt系统构建并安装首个'Hello World'应用程序的IPK包。文章不仅涵盖了基本的环境搭建,还详细说明了代码编写、Makefile配置及最终的IPK包生成与安装过程。 ... [详细]
  • addcslashes—以C语言风格使用反斜线转义字符串中的字符addslashes—使用反斜线引用字符串bin2hex—函数把包含数据的二进制字符串转换为十六进制值chop—rt ... [详细]
  • 尽管PHP是一种强大且灵活的Web开发语言,但开发者在使用过程中常会陷入一些典型的陷阱。本文旨在列出PHP开发中最为常见的10种错误,并提供相应的预防建议。 ... [详细]
  • 本文提供了一个详细的PHP用户认证和管理的代码示例,包括用户登录验证、数据库连接、错误处理等关键部分的实现。 ... [详细]
  • 详细的介绍针对graphiclayer的空间查询。首先,空间查询的方式:提供多种类型的空间查询,包括点周边、线周边、面内等多种方式;其次,图形绘制完成后状态的展示;再次 ... [详细]
  • 本教程将深入探讨C#编程语言中的条件控制结构,包括if语句和switch语句的使用方法。通过本课的学习,您将掌握如何利用这些控制结构来实现程序的条件分支逻辑。 ... [详细]
  • 题目描述了一个病毒检测问题,要求使用AC自动机算法统计目标文本中多个模式串的出现次数。 ... [详细]
  • AJAX技术允许网页在不重新加载整个页面的情况下进行异步更新,通过向服务器发送请求并接收JSON格式的数据,实现局部内容的动态刷新。 ... [详细]
author-avatar
Triste夏木_668_365
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有