Huffman Codes
来源:互联网 发布:建军大业知乎 编辑:程序博客网 时间:2024/06/04 00:40
//1 此算法有一个缺陷//2我原本打算用另一种结构,待我再研究研究//3C++标准库提供了一种更为方便的结构,但我不会用,在研究研究,搞清楚了再来粘贴//4先发表在这了#include<iostream>#include<fstream>#include<cstdlib>using namespace std;struct node{ node():frequence(0),ID(' '),left(NULL),right(NULL){} int frequence; char ID; node* left; node* right;};int cnt;node* array[26];int code[10];ifstream fin("C:\\data8.in");ofstream fout("C:\\data8.out");void Init(){ char ch; int freq; cnt=0; while(fin>>ch>>freq) { node* pnode=new node(); pnode->ID=ch; pnode->frequence=freq; array[cnt++]=pnode; }}void sort(){ for(int i=1;i<cnt;++i) { for(int j=i;j>0;--j) { if(array[j]->frequence>array[j-1]->frequence) { node* pnode=array[j]; array[j]=array[j-1]; array[j-1]=pnode; } } }}void Huffman(){ while(cnt>1) { sort(); node* pnode=new node(); node* xnode=array[cnt-1]; array[cnt-1]=NULL; node* ynode=array[cnt-2]; pnode->left=xnode; pnode->right=ynode; pnode->frequence=xnode->frequence+ynode->frequence; array[cnt-2]=pnode; --cnt; }}void print(node* node,int pos,char ID){ if(node->left==NULL) { fout<<node->ID<<":"; for(int i=0;i<pos;++i) { fout<<code[i]; } fout<<endl; return; } code[pos]=0; print(node->left,pos+1,node->ID); code[pos]=1; print(node->right,pos+1,node->ID);}void DeleteNode(node* pnode){ if(pnode->left!=NULL) { DeleteNode(pnode->left); DeleteNode(pnode->right); delete pnode; }}int main(){ Init(); Huffman(); print(array[0],0,array[0]->ID); DeleteNode(array[0]); return 0;}
0 0
- Huffman codes
- Huffman Codes
- Huffman Codes
- Huffman Codes
- Huffman Codes
- Huffman codes
- PTA Huffman Codes
- 5-9 Huffman Codes
- 04-3. Huffman Codes (30)
- 04-3. Huffman Codes (30)
- 05-树8. Huffman Codes
- 04-树6. Huffman Codes
- 05-树9 Huffman Codes
- 05-树9 Huffman Codes
- 05-树9 Huffman Codes
- 05-树9 Huffman Codes
- 05-树9 Huffman Codes
- 05-树9 Huffman Codes
- 1598 find the most comfortable road
- zigbee中profile,cluster的认识
- How to install Hadoop 2.2.0
- 使用PopoPWindow当做AlertDialog,控制Dialog的背景大小
- Think Python 学习笔记5:条件与递归
- Huffman Codes
- Swift入门教程12-可选链
- ubuntu eclipse 启动图标是个问号
- 将最小值放到数列最前边
- cin.get()
- 各种文件的十六进制文件头
- 关于VSOnDraw找不到 ,加载文字或者String
- ls -l 命令实现
- Java的Clone简要