资源简介
利用哈夫曼编码进行通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本。但是,这要求在发送端通过一个编码系统对待传数据预先编码,在接收端将传来的数据进行译码,请设计这样的一个简单编/译码系统。
代码片段和文件信息
#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
- 上一篇:数据结构 走迷宫大作业 c语言完整代码
- 下一篇:简单的路由程序
评论
共有 条评论