資源簡介
利用哈夫曼編碼進行通信可以大大提高信道利用率,縮短信息傳輸時間,降低傳輸成本。但是,這要求在發送端通過一個編碼系統對待傳數據預先編碼,在接收端將傳來的數據進行譯碼,請設計這樣的一個簡單編/譯碼系統。
代碼片段和文件信息
#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語言完整代碼
- 下一篇:簡單的路由程序
評論
共有 條評論