第一范文网 - 专业文章范例文档资料分享平台

北邮数据结构实验3哈夫曼编码

来源:用户分享 时间:2025/5/22 8:43:20 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

4. 重复以上步骤,直到所有待编码串中的字符都编码完毕 5. 输出编码后的字符串 时间复杂度O(n)

(7).解码函数(void Huffman::Decode()) 算法伪代码:

1. 得到指向哈夫曼树的根结点的指针和指向待解码串中的第1个字符的指针 2. 逐个读取待解码串中的字符,若为0,则指向哈夫曼树当前结点的指针指向

当前结点的左孩子,若为1,则指向当前结点的右孩子

3. 指向待解码串的指针指向解码串中的下一个字符,直到指向哈夫曼树结点

的指针的孩子结点为空

4. 如果哈夫曼树只有一个叶子结点,直接将待解码串中的编码转换为对应的

字符

5. 如果指向哈夫曼树结点的指针的孩子结点已经为空,则将叶子结点下标对

应的字符追加到解码串中。 6. 输出解码串

时间复杂度O(n)

3. 程序运行结果

1.主函数流程图

5

6

main.cpp

#include\void main() {

Huffman H;

do {

cout<<\请选择功能(输入编译字符串2输出编码表3输出字符串编码及压缩比4解码5退出)int i;

char str1[100]={'\\0'}; string d; int count=0;

\

7

int n; cin>>n; char ch='a'; cin.get(ch); switch(n) { case 1:

{

cout<<\请输入\ cin.getline(str1,100);

}

cout<<\请选择(继续运行 0 退出)\

break; break;

cout<<\请输入正确序号\break; case 5: default:

}

int m=0; while(str1[m++])

count++;

break;

case 2:

{ } break; { } break; { }

cout<<\请输入解码数据\char s[200]={'\\0'}; char d[100]={'\\0'}; cin.getline(s,200,'\\n'); H.Decode(s,d);

cout<<\解码数据为:\H.Encode(str1,&d);

H.differ(str1,count);

H.CreateCodeTable(H.str2,H.dif);

case 3:

case 4:

8

搜索更多关于: 北邮数据结构实验3哈夫曼编码 的文档
北邮数据结构实验3哈夫曼编码.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c0f2cu2leqd23x6i11q32_2.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top