求助:C语言实现哈夫曼树编码与解码系统
作者:Triste夏木_668_365 | 来源:互联网 | 2024-11-15 19:59
最近遇到了一道关于哈夫曼树的编程题目,需要在下午之前完成。题目要求设计一个哈夫曼编码和解码系统,能够反复显示和处理多个项目,直到用户选择退出。希望各位大神能够提供帮助。
### 背景
最近遇到一道关于哈夫曼树的编程题目,需要在下午之前完成。题目要求设计一个哈夫曼编码和解码系统,能够反复显示和处理多个项目,直到用户选择退出。由于时间紧迫,希望各位大神能够提供帮助。
### 问题描述
设计一个利用哈夫曼算法的编码和译码系统,能够反复显示和处理多个项目,直到用户选择退出。
### 基本要求
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=)的使用方法和注意事项,结合实例分析了其参数、返回值、调用时机等关键点,并讨论了浅拷贝和深拷贝的区别及其重要性。 ...
[详细]
蜡笔小新 2024-12-15 15:43:11
-
题意题目大意很简单,很容易找出对应字母的ASCII码值的关系,但是有一点需要注意,请看代码:读字符串必须要用getline ...
[详细]
蜡笔小新 2024-12-15 15:28:13
-
-
本文将详细介绍NSRunLoop的工作原理,包括其基本概念、消息类型(事件源)、运行模式、生命周期管理以及嵌套运行等关键知识点,帮助开发者更好地理解和应用这一重要技术。 ...
[详细]
蜡笔小新 2024-12-15 15:24:53
-
在使用 Spring Cloud Config 作为配置中心时,若在配置文件中指定了请求路径但未能生效,本文将探讨其原因及解决方案。 ...
[详细]
蜡笔小新 2024-12-15 13:22:47
-
本文介绍了两种使用Java发送短信的方法:利用第三方平台的HTTP请求和通过硬件设备短信猫。重点讲解了如何通过Java代码配置和使用短信猫发送短信的过程,包括必要的编码转换、串口操作及短信发送的核心逻辑。 ...
[详细]
蜡笔小新 2024-12-14 18:08:31
-
本文详细介绍了在Android应用开发中解析XML文件的方法,包括从本地文件和网络资源获取XML文件的不同途径,以及使用DOM、SAX和PULL三种解析方式的具体实现。 ...
[详细]
蜡笔小新 2024-12-15 22:53:22
-
本文探讨了在JavaScript中执行字符串形式代码的多种方法,包括使用eval()函数以及跨页面调用的方法。同时,文章详细介绍了JavaScript中字符串的各种常用方法及其应用场景。 ...
[详细]
蜡笔小新 2024-12-15 17:08:55
-
本文介绍如何在Ubuntu环境下为OpenWrt系统构建并安装首个'Hello World'应用程序的IPK包。文章不仅涵盖了基本的环境搭建,还详细说明了代码编写、Makefile配置及最终的IPK包生成与安装过程。 ...
[详细]
蜡笔小新 2024-12-15 13:28:28
-
addcslashes—以C语言风格使用反斜线转义字符串中的字符addslashes—使用反斜线引用字符串bin2hex—函数把包含数据的二进制字符串转换为十六进制值chop—rt ...
[详细]
蜡笔小新 2024-12-15 12:31:43
-
尽管PHP是一种强大且灵活的Web开发语言,但开发者在使用过程中常会陷入一些典型的陷阱。本文旨在列出PHP开发中最为常见的10种错误,并提供相应的预防建议。 ...
[详细]
蜡笔小新 2024-12-15 11:03:44
-
本文提供了一个详细的PHP用户认证和管理的代码示例,包括用户登录验证、数据库连接、错误处理等关键部分的实现。 ...
[详细]
蜡笔小新 2024-12-14 22:32:23
-
详细的介绍针对graphiclayer的空间查询。首先,空间查询的方式:提供多种类型的空间查询,包括点周边、线周边、面内等多种方式;其次,图形绘制完成后状态的展示;再次 ...
[详细]
蜡笔小新 2024-12-14 21:28:17
-
本教程将深入探讨C#编程语言中的条件控制结构,包括if语句和switch语句的使用方法。通过本课的学习,您将掌握如何利用这些控制结构来实现程序的条件分支逻辑。 ...
[详细]
蜡笔小新 2024-12-14 18:24:05
-
题目描述了一个病毒检测问题,要求使用AC自动机算法统计目标文本中多个模式串的出现次数。 ...
[详细]
蜡笔小新 2024-12-14 17:53:50
-
AJAX技术允许网页在不重新加载整个页面的情况下进行异步更新,通过向服务器发送请求并接收JSON格式的数据,实现局部内容的动态刷新。 ...
[详细]
蜡笔小新 2024-12-14 17:11:55
-
Triste夏木_668_365
这个家伙很懒,什么也没留下!