91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++實現哈夫曼編碼的方法

發布時間:2020-07-29 14:54:31 來源:億速云 閱讀:199 作者:小豬 欄目:編程語言

這篇文章主要講解了C++實現哈夫曼編碼的方法,內容清晰明了,對此有興趣的小伙伴可以學習一下,相信大家閱讀完之后會有幫助。

#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;

/*********************************
**中序遍歷輸出各節點及其哈夫曼編碼
*********************************/ 
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]]++;  //確定每個字符出現的次數(頻率) 
 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值最小的節點 
 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); //構造新節點,左右指針指min1和min2 
 open.push_back(t); //存入open表中 
 root = t;
 }
 
 cout<<"它的哈夫曼編碼為:"<<endl;
 string s1 = "";
 inorder(root,s1);
 
 return 0;
}```

看完上述內容,是不是對C++實現哈夫曼編碼的方法有進一步的了解,如果還想學習更多內容,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

长子县| 乐都县| 兴城市| 博兴县| 大悟县| 奈曼旗| 叙永县| 海丰县| 商都县| 湘潭市| 娄烦县| 西林县| 当雄县| 鄂托克前旗| 明光市| 文山县| 壶关县| 内黄县| 惠东县| 宁远县| 雅安市| 米易县| 西宁市| 新龙县| 江安县| 巫山县| 信阳市| 连云港市| 盖州市| 襄樊市| 商河县| 章丘市| 平潭县| 龙井市| 东台市| 临沭县| 清徐县| 邢台县| 昭觉县| 拜泉县| 惠水县|