东北大学秦皇岛分校计算机与通信工程学院计算机科学与技术
p=tree[i].parent; while (p != 0) { buf.start--; if (tree[p].lchild==c) buf.bits[buf.start]='0'; elsebuf.bits[buf.start]='1'; c=p; p=tree[p].parent; } code[i]=buf; } }
void writecodehuffman(hufcode code[], huftree tree[]) {
inti, j, k, n=0; char c[100];
cout<< \请输入字符串:\ gets(c); cout< cout<< \则字符串的哈夫曼编码为:\ for (i=0; i void transcodehuffman(hufcode code[], huftree tree[], char s[]) 曼译码 { inti; char *q=NULL; i=hufnum-1; q=s; while (*q!='\\0') //哈弗曼编码 // 哈夫 东北大学秦皇岛分校计算机与通信工程学院计算机科学与技术 { if (*q=='0') i=tree[i].lchild; if (*q=='1') i=tree[i].rchild; if ((tree[i].lchild==0)&&(tree[i].rchild==0)) { cout<< code[i].ch; i = hufnum - 1; } q++; } cout< void printtreehuffman(huftree tree[]) // 输出哈夫曼树 { inti; cout<< \根据字符的使用概率所建立的哈夫曼数为:\ cout<< \字符序号字符名称字符频率双亲位置左孩子右孩子\ for (i = 1; i void printcodehuffman(hufcode code[]) //输出每个字符的哈夫曼编码 { inti, j; cout<< \根据哈夫曼树对字符所建立的哈夫曼编码为:\ cout<< \字符序号字符名称字符编码\ for (i =1; i<= leafnum; i++) { cout<< \ \ \ \ for(j=code[i].start;j void main() 东北大学秦皇岛分校计算机与通信工程学院计算机科学与技术 { } creattreehuffman(tree); printtreehuffman(tree); creatcodehuffman(code, tree); printcodehuffman(code); writecodehuffman(code, tree); char *filename = \ofstreamofs(filename); ofs< ifstream ifs(filename); if (!ifs) { cout<< \ exit(0); } char buffer[1000]; ifs>> buffer; cout< cout<< \文件中的代码如下:\cout<< buffer < cout<< \文件中代码译码为:\transcodehuffman(code, tree, buffer);