亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

基于C++實現的哈夫曼編碼解碼操作示例

2020-05-23 13:35:16
字體:
來源:轉載
供稿:網友

本文實例講述了基于C++實現的哈夫曼編碼解碼操作。分享給大家供大家參考,具體如下:

哈夫曼編碼是一個通過哈夫曼樹進行的一種編碼,一般情況下,以字符:‘0'與‘1'表示。編碼的實現過程很簡單,只要實現哈夫曼樹,通過遍歷哈夫曼樹,這里我們從每一個葉子結點開始向上遍歷,如果該結點為父節點的左孩子,則在字符串后面追加“0”,如果為其右孩子,則在字符串后追加“1”。結束條件為沒有父節點。然后將字符串倒過來存入結點中。

C++實現代碼如下:

#include<iostream>#include<string>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 <n; i++)  {    if (huffTree[i].parent != -1)   //判斷節點是否已經選過      continue;    else    {      if (weight == 0)      {        weight = huffTree[i].weight;        *a = i;      }      else      {        if (huffTree[i].weight < weight)        {          weight = huffTree[i].weight;          *a = i;        }      }    }  }  weight = 0; //找第二小的數  for (i = 0; i < n; i++)  {    if (huffTree[i].parent != -1 || (i == *a))//排除已選過的數      continue;    else    {      if (weight == 0)      {        weight = huffTree[i].weight;        *b = i;      }      else      {        if (huffTree[i].weight < weight)        {          weight = huffTree[i].weight;          *b = i;        }      }    }  }  int temp;  if (huffTree[*a].lchild < huffTree[*b].lchild) //小的數放左邊  {    temp = *a;    *a = *b;    *b = temp;  }}void Huff_Tree(Node huffTree[], int w[], string ch[], int n){  for (int i = 0; i < 2 * n - 1; i++) //初始過程  {    huffTree[i].parent = -1;    huffTree[i].lchild = -1;    huffTree[i].rchild = -1;    huffTree[i].code = "";  }  for (int i = 0; i < n; i++)  {    huffTree[i].weight = w[i];    huffTree[i].ch = ch[i];  }  for (int k = n; k < 2 * n - 1; k++)  {    int i1 = 0;    int i2 = 0;    Select(huffTree, &i1, &i2, k); //將i1,i2節點合成節點k    huffTree[i1].parent = k;    huffTree[i2].parent = k;    huffTree[k].weight = huffTree[i1].weight + huffTree[i2].weight;    huffTree[k].lchild = i1;    huffTree[k].rchild = i2;  }}void Huff_Code(Node huffTree[], int n){  int i, j, k;  string s = "";  for (i = 0; i < n; i++)  {    s = "";    j = i;    while (huffTree[j].parent != -1) //從葉子往上找到根節點    {      k = huffTree[j].parent;      if (j == huffTree[k].lchild) //如果是根的左孩子,則記為0      {        s = s + "0";      }      else      {        s = s + "1";      }      j = huffTree[j].parent;    }    cout << "字符 " << huffTree[i].ch << " 的編碼:";    for (int l = s.size() - 1; l >= 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++,哈夫曼,編碼,解碼

希望本文所述對大家C++程序設計有所幫助。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美电影在线免费观看网站| 久久精品视频免费播放| 国产日韩av高清| 97在线视频免费观看| 国产精品美女久久久久av超清| 91精品综合久久久久久五月天| 欧美中在线观看| 亚洲日本中文字幕免费在线不卡| 亚洲美女在线看| 91在线视频一区| 国产精品亚洲综合天堂夜夜| 欧美日韩国产中文精品字幕自在自线| 欧美激情国产日韩精品一区18| 欧美一区亚洲一区| 欧美亚洲一级片| 亚州精品天堂中文字幕| 91在线观看免费高清完整版在线观看| 国产精品久久久久久中文字| 国产精品女人网站| 久久精品99久久久香蕉| 久久精品国产精品| 国产精品视频白浆免费视频| 国产日韩欧美在线观看| 亚洲精品欧美日韩| 国产一区二区三区三区在线观看| 久热精品视频在线免费观看| 国产精品露脸av在线| 久久91亚洲精品中文字幕| 日本中文字幕久久看| 91免费的视频在线播放| 1769国内精品视频在线播放| 精品久久久国产| 91成人在线视频| 亚洲成人精品视频在线观看| 亚洲国产精品va在线看黑人动漫| 91爱视频在线| 97免费在线视频| 久久久久久一区二区三区| 久久五月天色综合| 国产精品久久视频| 亚洲网在线观看| 色悠久久久久综合先锋影音下载| 欧美亚洲另类激情另类| 国产精品视频久久久久| 国内久久久精品| 日韩亚洲综合在线| 欧美成人合集magnet| 久久久精品免费视频| 欧美成人在线免费视频| 韩国一区二区电影| 欧美激情中文字幕在线| 亚洲成年人在线播放| 国产91精品久久久久| 久久男人资源视频| 成人国内精品久久久久一区| 国产噜噜噜噜噜久久久久久久久| 欧美电影电视剧在线观看| 热久久视久久精品18亚洲精品| 日本久久久a级免费| 91久久久久久久一区二区| 欧美日韩成人网| 国产精品扒开腿爽爽爽视频| 97精品国产97久久久久久| 欧美丝袜一区二区| 懂色av影视一区二区三区| 亚洲人成五月天| 国产小视频国产精品| 日韩午夜在线视频| 伊人伊成久久人综合网小说| 久久亚洲精品小早川怜子66| 亚洲大胆美女视频| 91午夜理伦私人影院| 久久久久久久久国产| 亚洲专区在线视频| 91亚洲va在线va天堂va国| 日韩欧美精品中文字幕| 欧美一级淫片播放口| 亚洲福利视频网站| 亚洲成人黄色在线观看| 欧美疯狂xxxx大交乱88av| 影音先锋欧美精品| 色综合天天综合网国产成人网| 国产精品尤物福利片在线观看| 久久久久久噜噜噜久久久精品| 欧美成人在线免费视频| 日韩欧美在线视频日韩欧美在线视频| 777精品视频| 日韩欧美在线网址| 久久九九全国免费精品观看| 日韩高清免费观看| 精品福利在线视频| 欧美专区在线视频| 精品视频—区二区三区免费| 日韩欧美aaa| 国产精品男人爽免费视频1| 亚洲一区二区三区久久| 国产69久久精品成人看| 亚洲精品视频在线观看视频| 欧洲精品毛片网站| 国产91精品青草社区| 欧美华人在线视频| 亚洲在线视频观看| 最近2019年中文视频免费在线观看| 日韩精品视频三区| 亚洲精品xxxx| 久久久久久69| 欧洲日韩成人av| 黄色一区二区在线观看| 日韩美女av在线免费观看| 欧美另类交人妖| 亚洲视频欧美视频| 中文字幕精品久久久久| 国产精品亚洲综合天堂夜夜| 亚洲精品综合精品自拍| 色中色综合影院手机版在线观看| 国产精品久久久av久久久| 91日本视频在线| 96精品久久久久中文字幕| 日韩av在线影视| 国产+成+人+亚洲欧洲| 国产成人精品一区二区| 日韩电影中文 亚洲精品乱码| 亚洲精品国产综合区久久久久久久| 欧美性一区二区三区| 亚洲精品一区二区三区婷婷月| 精品福利免费观看| 欧美重口另类videos人妖| 国产97在线|日韩| 96pao国产成视频永久免费| 欧美激情2020午夜免费观看| 色综合天天综合网国产成人网| 欧美日韩国产中文字幕| 亚洲精选在线观看| 欧美日韩国产精品一区| 亚洲最大激情中文字幕| 国产精品视频久久| 国产欧美日韩91| 国产视频精品一区二区三区| 亚洲人午夜精品| 91精品久久久久| 欧美成人sm免费视频| 国产精品久久久久aaaa九色| 亚洲人成网站色ww在线| 97视频在线观看免费| 在线亚洲男人天堂| 91av在线免费观看| 久久精品国产免费观看| 8050国产精品久久久久久| 亚洲国产成人在线播放| 亚洲人精品午夜在线观看| 三级精品视频久久久久| 国产免费观看久久黄| 国产精品福利在线观看| 2019av中文字幕| 黑人极品videos精品欧美裸| 91精品国产综合久久香蕉的用户体验| 欧美在线免费看| 国产精品欧美亚洲777777| 欧美成年人网站| 九九精品在线观看| 国产亚洲美女精品久久久| 亚洲欧美精品中文字幕在线| 国内精品模特av私拍在线观看| 欧美在线一区二区三区四|