求助: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语言是计算机科学和编程领域的基石,许多初学者在学习过程中会感到困惑。本文将详细介绍C语言的基本概念、关键语法和实用示例,帮助你快速上手C语言。 ...
[详细]
蜡笔小新 2024-11-15 19:21:59
-
问题**Copyright(c)2015,烟台大学计算机学院*Allrightsreserved.*文件名称:test.cpp*作者:王敏*完成日 ...
[详细]
蜡笔小新 2024-11-15 11:49:00
-
-
本文整理了一份基础的嵌入式Linux工程师笔试题,涵盖填空题、编程题和简答题,旨在帮助考生更好地准备考试。 ...
[详细]
蜡笔小新 2024-11-15 10:42:13
-
【线段树】 本质是二叉树,每个节点表示一个区间[L,R],设m(R-L+1)2(该处结果向下取整)左孩子区间为[L,m],右孩子区间为[m ...
[详细]
蜡笔小新 2024-11-14 23:11:47
-
2019独角兽企业重金招聘Python工程师标准好文章,一起分享——有时我们会需要大量线程来处理一些相互独立的任务,为了避免频繁的申请释放线程所带 ...
[详细]
蜡笔小新 2024-11-14 20:11:23
-
题目描述:给定一个区间,支持两种操作:1. 将位置a的值修改为b;2. 查询区间[a, b]内的子序列的最大和,其中子序列中相邻的元素必须具有不同的奇偶性。 ...
[详细]
蜡笔小新 2024-11-14 19:57:14
-
本文详细介绍了兆芯X86 CPU架构的发展历程,从公司成立背景到关键技术授权,再到具体芯片架构的演进,全面解析了兆芯在国产CPU领域的贡献与挑战。 ...
[详细]
蜡笔小新 2024-11-14 15:04:34
-
文章目录:1.字符串函数2.日期时间函数2.1获取日期时间2.2日期与时间戳的转换2.3获取年月日、时分秒、星期数、天数等函数2.4时间和秒钟的转换2. ...
[详细]
蜡笔小新 2024-11-14 10:57:02
-
T15483.【清华集训2017模拟11.26】简单路径T25484.【清华集训2017模拟11.26】快乐树T35485.【清华集训2017模拟11.26】字符串T1结论题,结论很 ...
[详细]
蜡笔小新 2024-11-13 20:25:28
-
1、聊一聊首先跟大家推荐一首非常温柔的歌曲,跑步的常听。本文主要把自己对C语言中柔性数组、零数组等等的理解分享给大家,并聊聊如何构建一种统一化的学习思想 ...
[详细]
蜡笔小新 2024-11-13 17:42:24
-
在本次学习中,主要通过外部中断来控制LED的亮灭。首先,先查看相关电路图。由图可知,当CC2530端口1的0号引脚输出低电平时 ...
[详细]
蜡笔小新 2024-11-15 14:05:38
-
题目链接: L - Floating-Point Numbers。题目要求处理带有15位小数的浮点数,计算其二进制表示的最大位数。 ...
[详细]
蜡笔小新 2024-11-14 19:25:30
-
普通树(每个节点可以有任意数量的子节点)级序遍历 ...
[详细]
蜡笔小新 2024-11-14 18:53:26
-
malloc 是 C 语言中的一个标准库函数,全称为 memory allocation,即动态内存分配。它用于在程序运行时申请一块指定大小的连续内存区域,并返回该区域的起始地址。当无法预先确定内存的具体位置时,可以通过 malloc 动态分配内存。 ...
[详细]
蜡笔小新 2024-11-14 13:38:03
-
本文介绍了如何在NX中使用UFUN库进行点收集器的二次开发,包括必要的头文件包含、初始化和选择点集合的具体实现。 ...
[详细]
蜡笔小新 2024-11-14 10:18:35
-
Triste夏木_668_365
这个家伙很懒,什么也没留下!