最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++實現(xiàn)哈夫曼編碼

 更新時間:2020年04月28日 08:56:11   作者:南小唄  
這篇文章主要為大家詳細介紹了C++實現(xiàn)哈夫曼編碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了C++實現(xiàn)哈夫曼編碼的具體代碼,供大家參考,具體內容如下

#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;

int Max = 300;

class tree{
 public:
 char s;
 int num;
 tree *left;
 tree *right;
 tree(){
  s= '!';
  num = 0;
  left = 0;
  right = 0;
 }
 tree(char a,int n,tree* p1,tree* p2){
  s = a;
  num = n;
  left = p1;
  right = p2;
 }
};

vector<tree *> open;

/*********************************
**中序遍歷輸出各節(jié)點及其哈夫曼編碼
*********************************/ 
void inorder(tree *t,string s){
 if(t != 0){
 inorder(t->left,s+'0');
 if(t->s != '!')
  cout<<t->s<<":"<<s<<endl;
 inorder(t->right,s+'1');
 }
}


int main(){
 int a[Max];
 for(int i = 0;i < Max;i++)
 a[i] = 0;  //初始化數組 
 string s;
 cout<<"請輸入字符串:";
 cin>>s;
 
 vector<char> v;
 vector<char>::iterator vit;
 for(int i = 0;i < s.length();i ++){
 a[s[i]]++;  //確定每個字符出現(xiàn)的次數(頻率) 
 vit = find(v.begin(),v.end(),s[i]);
 if(vit == v.end()) //相同的字符只保留一個 
  v.push_back(s[i]);
 }
 for(int i = 0;i < v.size();i ++){
 tree *n = new tree();
 n->s = v[i];
 n->num = a[v[i]];
 open.push_back(n); //存入open表中 
 }
 
 /************************
 **
 **構造哈夫曼樹 
 **
 *************************/ 
 tree *root;
 while(open.size() != 1){
 tree *min1,*min2; //min1,min2是當前open表中num值最小的節(jié)點 
 int sit1,sit2;
 min1 = open.front();
 sit1 = 0;
 for(int i = 0;i < open.size();i++){
  if(open[i]->num < min1->num){
  min1 = open[i];
  sit1 = i;
  }
 }
 open.erase(open.begin()+sit1);
 
 min2 = open.front();
 sit2 = 0;
 for(int i = 0;i < open.size();i++){
  if(open[i]->num < min2->num){
  min2 = open[i];
  sit2 = i;
  }
 }
 open.erase(open.begin()+sit2);
 
 tree *t = new tree('!',min1->num + min2->num,min1,min2); //構造新節(jié)點,左右指針指min1和min2 
 open.push_back(t); //存入open表中 
 root = t;
 }
 
 cout<<"它的哈夫曼編碼為:"<<endl;
 string s1 = "";
 inorder(root,s1);
 
 return 0;
}```

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • C語言實現(xiàn)小貓釣魚算法

    C語言實現(xiàn)小貓釣魚算法

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)小貓釣魚算法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • C++實現(xiàn)簡單通訊錄

    C++實現(xiàn)簡單通訊錄

    這篇文章主要為大家詳細介紹了C++實現(xiàn)簡單通訊錄,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • 快來領取!你想要的C++/C語言優(yōu)秀書籍

    快來領取!你想要的C++/C語言優(yōu)秀書籍

    如何選擇合適的C++/C語言書籍,是不是已經眼花繚亂,不知道該選擇哪本好了呢?今天我來為大家分享兩本不可錯過的優(yōu)秀書籍
    2017-09-09
  • C語言實現(xiàn)手寫Map(數組+鏈表+紅黑樹)的示例代碼

    C語言實現(xiàn)手寫Map(數組+鏈表+紅黑樹)的示例代碼

    這篇文章主要為大家詳細介紹了如何利用C語言實現(xiàn)手寫Map(數組+鏈表+紅黑樹),文中的示例代碼講解詳細,對我們學習有一定借鑒價值,需要的可以參考一下
    2022-09-09
  • 快速入門的一些C\C++書籍

    快速入門的一些C\C++書籍

    這篇文章為大家精心推薦了一些快速入門的一些C\C++書籍,希望大家可以喜歡,對這門語言可以產生興趣,需要的朋友可以參考下
    2015-12-12
  • C語言實現(xiàn)opencv提取直線、輪廓及ROI實例詳解

    C語言實現(xiàn)opencv提取直線、輪廓及ROI實例詳解

    這篇文章主要介紹了C語言實現(xiàn)opencv提取直線、輪廓及ROI實例詳解,具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01
  • 基于C語言實現(xiàn)簡單掃雷游戲

    基于C語言實現(xiàn)簡單掃雷游戲

    這篇文章主要為大家詳細介紹了基于C語言實現(xiàn)簡單掃雷游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • 詳解C++中OpenSSL動態(tài)鏈接庫的使用

    詳解C++中OpenSSL動態(tài)鏈接庫的使用

    這篇文章主要介紹了OpenSSL動態(tài)鏈接庫的使用,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-11-11
  • 基于C++自制屠夫躲貓貓小游戲

    基于C++自制屠夫躲貓貓小游戲

    這篇文章主要為大家詳細介紹了如何基于C++自制屠夫躲貓貓小游戲,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-01-01
  • C++簡單集合類的實現(xiàn)方法

    C++簡單集合類的實現(xiàn)方法

    如何使用C++實現(xiàn)一個簡單的集合類,這篇文章主要介紹了C++簡單集合類的實現(xiàn)方法,感興趣的小伙伴們可以參考一下
    2016-07-07

最新評論

自治县| 高安市| 新绛县| 旬阳县| 常德市| 上饶县| 沁源县| 疏附县| 桑植县| 拜城县| 泉州市| 囊谦县| 青河县| 拜城县| 长子县| 宁津县| 永仁县| 台安县| 保康县| 荔波县| 高清| 上栗县| 海原县| 托克托县| 岐山县| 富蕴县| 新田县| 霞浦县| 通化市| 门头沟区| 青海省| 台南县| 永宁县| 团风县| 长丰县| 凉城县| 济宁市| 松溪县| 彭阳县| 嘉义县| 报价|