首页 > 代码库 > 赫夫曼树编码的表示与实现--自己写数据结构
赫夫曼树编码的表示与实现--自己写数据结构
头文件huffman.h
#ifndef _HUFFMAN_H_#define _HUFFMAN_H_#define MAX_WEIGHT 10000typedef struct _HTNode{ int weight; int parent,lchild,rchild; char data;}HTNode,*pHTNode;typedef char** huffmancode;void select_min_weight(HTNode* btree,int mn,int* s1,int* s2);//void read_huffman_code(huffmancode code,HTNode** tree,int n);void creat_huffman_tree(huffmancode code,HTNode** tree,char* pdata,int* pweight,int n);#endif
相关数据结构huffman.c
/***************************时间:2014.12.17作者:XIAO_PING_PING编译环境:DEV-C++ 4.9.9.2 内容:赫夫曼树编码的表示与实现 功能: 学习写数据结构 ****************************/#include <string.h>#include <stdlib.h>#include "huffman.h" void select_min_weight(HTNode* btree,int mn,int* s1,int* s2){ int mweight1,mweight2,i; mweight1 = MAX_WEIGHT; for(i = 0;i < mn;i++) { if(((btree+i)->weight < mweight1)&&(0 == (btree+i)->parent)) { *s1 = i; mweight1 = (btree+i)->weight; // *s1 = (btree+i)->weight; // nmin = i; } } mweight2 = MAX_WEIGHT; for(i = 0;i < mn;i++) { if(((btree+i)->weight < mweight2)&&(0 == (btree+i)->parent)&&(*s1 != i)) { *s2 = i; mweight2 = (btree+i)->weight; } }}/*void read_huffman_code(huffmancode code,HTNode** tree,int n){ int i; char *chs; int start; int c,f; code = (huffmancode)malloc(n * sizeof(char *)); chs = (char *)malloc(n * sizeof(char *)); chs[n-1] = '\0'; for(i = 0;i < n;i++) { start = n - 1; for(c = i,f = *tree[i].parent;f != 0;c = f,f = *tree[f].parent) { if(*tree[f].lchild == c) { chs[--start] = '0'; } else { chs[--start] = '1'; } } code[i] = (char *)malloc((n - start)*sizeof(char)); strcpy(code[i],&chs[start]); printf("%c: %s",*tree[i].data,code[i]); } free(cd);}*/void creat_huffman_tree(huffmancode code,HTNode** tree,char* pdata,int* pweight,int n){ int i,m; int *order1,*order2; pHTNode p; order1 = (int *)malloc(sizeof(int)); order2 = (int *)malloc(sizeof(int)); m = n*2 - 1; *tree = (HTNode *)malloc(m * sizeof(HTNode)); p = *tree; for(i = 0;i < n;i++,p++) { p->weight = *(pweight+i); p->parent = 0; p->lchild = 0; p->rchild = 0; p->data = http://www.mamicode.com/*(pdata+i); >
测试文件test.c如下#include <string.h>#include <stdlib.h>#include "huffman.h"int main(){ int N,i; //char nCR = 0; int* weights; char* datas; pHTNode phash; huffmancode pcode; printf("n = "); scanf("%d",&N); datas = (char *)malloc((N + 2) * sizeof(char)); weights = (int *)malloc(N * sizeof(int)); printf("请输入编码字符:"); for(i = 0;i < (N+2);i++) { scanf("%c",datas+i); //'#结束' //scanf("%c",&nCR); //while('\n' == nCR); //nCR = 0; } printf("请输入对应权值:\n"); for(i = 0;i < N;i++) { scanf("%d",weights+i); } creat_huffman_tree(pcode,&phash,datas,weights,N); getch(); return 0; }
运行结果如下:赫夫曼树编码的表示与实现--自己写数据结构
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。