c语言将字符串进行哈夫曼编码,C语言-哈夫曼编码实验报告

《C语言-哈夫曼编码实验报告》由会员分享,可在线阅读,更多相关《C语言-哈夫曼编码实验报告(18页珍藏版)》请在人人文库网上搜索。

1、C语言-哈夫曼编码实验报告11课程:题目:专业:班级:座号:姓名:福建工程学院课程设计数据结构 哈夫曼编码和译码 信息管理信息系统1002 班 15号 林左权2011年 6月 27日实验题目:哈夫曼编码和译码一、要解决的问题利用哈夫曼编码进行信息通信可以大大提高信道利 用率,缩短信息传输时间,降低传输成本。但是,这要 求在发送端通过一个编码系统对待传数据预先编码,在 接收端将传来的数据进行译码(复原)。对于双工信道(即 可以双向传输信息的信道),每端都需要一个完整的编/ 译码系统。二、算法基本思想描述:根据给定的字符和其中每个字符的频度,构造哈夫馒树,并输出字符集中每个字符的哈夫曼编码.将给定。

2、的字符串根据其哈夫曼编码进行编码,并进行相应的译码.三、设计1.数据结构的设计(1)哈夫曼树的表示设计哈夫曼树的结构体(htnode),其中包含权重、左右孩子、父母和要编码的字符。用这 个结构体(htnode)定义个哈夫曼数组(hfmt)。迷宫定义如下:typedef structint weight;int lchild;int rchild;int pare nt;char key;ht no de;typedef htnode hfmtMAXLEN;(2)对原始字符进行编码初始化哈夫曼树(inithfmt )。从终端读入字符集大小n,以及n个字符和n个权值, 建立哈夫曼树。并显示出每个字。

3、符的编码。1. void in ithfmt(hfmt t)对结构体进行初始化2. void inputweight(hfmt t)/ 输入函数3. void selectmin(hfmt t,int i,int *p1,int *p2) 选中两个 权值最小的函数4. void creathfmt(hfmt t)/创建哈夫曼树的函数5. void phfmnode(hfmt t)/对字符进行初始编码(3) 对用户输入的字符进行编码void en codi ng(hfmt t)/对用户输入的电文进行编码char r1000;用来存储输入的字符串int i,j;printf(nn请输入需要编码的字。

4、符:);gets(r);printf(编码结果为:);for(j=0;rj!=0;j+)for(i=0;i#i nclude #include #defi ne MAXLEN 100 typedef struct int weight; int lchild; int rchild;int pare nt; char key;ht no de;typedef htnode hfmtMAXLEN;int n;void in ithfmt(hfmt t) int i;prin tf(n);对结构体进行初始化prin tf(- printf(*n); printf(n请输入 n=);scan f(%。

5、d,&n); getchar();for(i=0;itj.weight)min 1=tj.weight;*p1=j;for(j=0;jtj.weight & j!=(*p1)/注意 j!=(*p1)min 2=tj.weight;*p2=j;void creathfmt(hfmt t)创建哈夫曼树的函数int i,p1,p2;in ithfmt(t);in putweight(t);for(i=n;i*刊-曲*/对轟1 21 译码【町退出馬籬:石蔚F退岀翰翳鑿隘Z输入需要嘗码的宇符串= 111110100 是:dchaNWiMKXKlifHKHltflflOfKJfKJt 址出扁 勺咅艮 H 羊可 B|88f j艮 出| *t*t*H*-*H*M_BHlH*H*H*L*HlH* 译码 5】退出六、心得体会:(略。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要将哈编码转换成对应字符串,你需要进行以下步骤: 1. 定义哈编码表:哈编码表是一个数组,其中每个元素对应一个字符及其对应的哈编码。 2. 读取哈编码:从文件或其他数据源中读取哈编码。 3. 解码哈编码:将读取到的哈编码按位进行解码,根据哈编码表中的对应关系,将每个编码对应的字符拼接成字符串。 下面是一个示例的 C 语言代码: ```c #include <stdio.h> #include <string.h> #define MAX_CODE_LEN 50 // 哈编码表 struct HuffmanCode { char ch; char code[MAX_CODE_LEN]; }; // 将哈编码转换成字符串 void decode_huffman_code(char *code, struct HuffmanCode *huffman_codes, char *str) { int i = 0, j = 0; while (code[i] != '\0') { char tmp[MAX_CODE_LEN] = ""; while (code[i] != '0' && code[i] != '1') { i++; } while (code[i] == '0' || code[i] == '1') { str[j++] = code[i++]; str[j] = '\0'; // 在末尾添加结束符 } for (int k = 0; k < strlen(str); k++) { strcat(tmp, &str[k]); // 将字符串逐个字符拼接 for (int l = 0; l < 26; l++) { // 在哈编码表中查找对应字符 if (strcmp(tmp, huffman_codes[l].code) == 0) { str[j - strlen(str)] = huffman_codes[l].ch; break; } } } } } int main() { struct HuffmanCode huffman_codes[26] = { // 假设只有 26 个小写字母需要编码 {'a', "010"}, {'b', "011"}, {'c', "100"}, {'d', "101"}, {'e', "110"}, {'f', "1110"}, {'g', "11110"}, {'h', "111110"}, {'i', "1111110"}, {'j', "11111110"}, {'k', "111111110"}, {'l', "1111111110"}, {'m', "11111111110"}, {'n', "111111111110"}, {'o', "1111111111110"}, {'p', "11111111111110"}, {'q', "111111111111110"}, {'r', "1111111111111110"}, {'s', "11111111111111110"}, {'t', "111111111111111110"}, {'u', "1111111111111111110"}, {'v', "11111111111111111110"}, {'w', "111111111111111111110"}, {'x', "1111111111111111111110"}, {'y', "11111111111111111111110"}, {'z', "111111111111111111111110"} }; char code[] = "011110101101110111011111011111110111111111010101110111111111111000101111111111111111111111111110"; char str[MAX_CODE_LEN] = ""; decode_huffman_code(code, huffman_codes, str); printf("Decoded string: %s\n", str); return 0; } ``` 在这个示例代码中,我们定义了一个包含 26 个小写字母的哈编码表,并且读取了一个示例编码。在 `decode_huffman_code()` 函数中,我们对哈编码进行解码,并在哈编码表中查找对应的字符,将其拼接成字符串。最后,我们将解码后的字符串输出。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值