• 大小: 4KB
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2021-06-06
  • 语言: C/C++
  • 标签: 哈夫曼树  

资源简介

利用哈夫曼编码进行通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本。但是,这要求在发送端通过一个编码系统对待传数据预先编码,在接收端将传来的数据进行译码,请设计这样的一个简单编/译码系统。

资源截图

代码片段和文件信息

#include 
#include 
#include 
#include 
#define MAX_NUM 2000
using namespace std;
int ijn;
int w[27];
char str[200];
char ch;
typedef struct{
      char s;
      int num;
}Node;
Node node[27];  //用结构数组存放输入的字符及其权值
typedef struct {
    unsigned int weight;
    unsigned int parentlchildrchild;
}HTNode*HuffmanTree;  // 动态分配数组储存哈夫曼树
typedef char * * HuffmanCode;
 HuffmanTree HT;
 HuffmanCode HC;
 void Select(HuffmanTree HTint endint &s1int &s2)
 //在HT[1..end]中选择parent为0且weight最小的两个结点s1和s2end为总长度
 { int min1=MAX_NUM;
   int min2;
   for(i=1;i   { if((HT[i].parent==0) && (HT[i].weight     { s1=i;
       min1=HT[i].weight;
     }
   }
   min2=MAX_NUM;
   for(j=1;j   { if((HT[j].parent==0) && (s1!=j) && (HT[j].weight     { s2=j;
       min2=HT[j].weight;
     }
   }
 }
 fstream outfile1(“hufmtree.txt“ios::out);
 fstream outfile2(“TreePrint.txt“ios::out);
 void printtree(int mHuffmanTree &HTint i)
 {
 if(HT[m].lchild!=0||HT[m].rchild!=0)
 {
 for(int p=0;p  cout<<“ “outfile1<<“ “outfile2<<“ “;
 cout<  outfile1<  outfile2<  printtree(HT[m].lchildHTi+3);
 printtree(HT[m].rchildHTi+3);
 }
 if(HT[m].lchild==0 && HT[m].rchild==0){
 for(int p=0;p  cout<  outfile1<  outfile2<  }
 }   //递归算法,以凹入形式输出树
void HuffmanCoding( HuffmanTree &HTHuffmanCode &HCint *wint n)
//构造哈夫曼树HT,并求出n个字符的哈夫曼编码HC.
{if(n<1) return;
 int m=2*n-1;
 int s1s2;
 HT=(HuffmanTree)malloc((m+1)* sizeof(HTNode)); //0号单元未用
 HuffmanTree p;
 for(p=HT+1i=1;i<=n;++i++p++w)
 { p->weight=*w;
p->parent=0;
p->lchild=0;
p->rchild=0;
 }
 for(;i<=m;++i++p)
 {     p->weight=0;
p->parent=0;
p->lchild=0;
p->rchild=0;
 }
 for(i=n+1;i<=m;++i){  //建哈夫曼树
     Select(HTis1s2);
     HT[s1].parent=i;
     HT[s

评论

共有 条评论