怎么基于C++实现的哈夫曼编码解码操作-创新互联
这篇文章将为大家详细讲解有关怎么基于C++实现的哈夫曼编码解码操作,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
站在用户的角度思考问题,与客户深入沟通,找到澄城网站设计与澄城网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:成都做网站、成都网站制作、企业官网、英文网站、手机端网站、网站推广、域名与空间、虚拟空间、企业邮箱。业务覆盖澄城地区。具体如下:
哈夫曼编码是一个通过哈夫曼树进行的一种编码,一般情况下,以字符:‘0'与‘1'表示。编码的实现过程很简单,只要实现哈夫曼树,通过遍历哈夫曼树,这里我们从每一个叶子结点开始向上遍历,如果该结点为父节点的左孩子,则在字符串后面追加“0”,如果为其右孩子,则在字符串后追加“1”。结束条件为没有父节点。然后将字符串倒过来存入结点中。
C++实现代码如下:
#include#include using namespace std; struct Node { double weight; string ch; string code; int lchild, rchild, parent; }; void Select(Node huffTree[], int *a, int *b, int n)//找权值最小的两个a和b { int i; double weight = 0; //找最小的数 for (i = 0; i = 0; l--) { cout << s[l]; huffTree[i].code += s[l]; //保存编码 } cout << endl; } } string Huff_Decode(Node huffTree[], int n,string s) { cout << "解码后为:"; string temp = "",str="";//保存解码后的字符串 for (int i = 0; i < s.size(); i++) { temp = temp + s[i]; for (int j = 0; j < n; j++) { if (temp == huffTree[j].code) { str=str+ huffTree[j].ch; temp = ""; break; } else if (i == s.size()-1&&j==n-1&&temp!="")//全部遍历后没有 { str= "解码错误!"; } } } return str; } int main() { //编码过程 const int n=5; Node huffTree[2 * n]; string str[] = { "A", "B", "C", "D", "E"}; int w[] = { 30, 30, 5, 20, 15 }; Huff_Tree(huffTree, w, str, n); Huff_Code(huffTree, n); //解码过程 string s; cout << "输入编码:"; cin >> s; cout << Huff_Decode(huffTree, n, s)<< endl;; system("pause"); return 0; }
运行结果如下:
关于“怎么基于C++实现的哈夫曼编码解码操作”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
另外有需要云服务器可以了解下创新互联建站www.cdcxhl.com,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
名称栏目:怎么基于C++实现的哈夫曼编码解码操作-创新互联
转载来源:http://scgulin.cn/article/gjodj.html