医疗软件技术基础实验报告-二叉树的应用-哈夫曼编码的实现.docxVIP

  • 3
  • 0
  • 约4.06千字
  • 约 6页
  • 2023-09-16 发布于浙江
  • 举报

医疗软件技术基础实验报告-二叉树的应用-哈夫曼编码的实现.docx

医疗软件技术基础 实验二 专业名称: 生物医学工程 实验学时: 2 学 号: 姓 名: 实验题目:二叉树的应用-哈夫曼编码的实现 实验环境: vs2008   实验目的: 1.掌握二叉树的定义; 2.掌握哈夫曼树和哈夫曼编码算法的实现。 实验内容: 实现一个哈夫曼编码系统,系统包括以下功能: (1) 字符信息统计:读取待编码的源文件SourceFile.txt,统计出现的字符及其频率。 (2) 建立哈夫曼树:根据统计结果建立哈夫曼树。 (3) 建立哈夫曼码表:利用得到的哈夫曼树,将各字符对应的编码表保存在文件Code.txt中。 (4) 对源文件进行编码:根据哈夫曼码表,将SourceFile.txt中的字符转换成相应的编码文件ResultFile.txt。 实验流程图 输出字符编码 输出字符编码 结束 输入一串要压缩的字符串 统计个字符串的频率 建立哈夫曼树 开始 实验要求: (1) 程序要具在一定的健壮性,即当输入数据非法时,程序也能适当地做出反应。 (2) 程序要添加适当的注释,程序的书写要采用缩进格式。 实验代码: #include stdio.h #includestdlib.h #includestring.h #includemap #include fstream #includeiostream #define MAXN 50 using namespace std; typedef char **HuffmanCode; typedef struct{ char zimu; int weight; int parent, lchild, rchild; }HTNode,*HuffmanTree; HuffmanTree HT;//树,声明 HuffmanCode HC;//节点,声明 int m,s1,s2,start,c,f; char *cd; int z[30];//统计权 int h[30]; //int weight[MAXN] ;//权重 char u[30]; char u_1[30]; void Select(HuffmanTree HT,int n,int s1,int s2)//Select函数,s1,s2其实没有必要 { int min1 =0x3f3f3f3f; int min2 =0x3f3f3f3f;//这里不管,这样写是为了开始必然进入循环 for(int i=1;i=n;i++)//选中最小的权的两个,返回给s1,s2 { if(HT[i].parent) continue;//不是根节点 if(HT[i].weight min1) { min1 = HT[i].weight; s1 = i; continue; } if(HT[i].weight min2 HT[i].weight = min1) { min2 = HT[i].weight; s2 = i; } } } void CreatHuffmanTree(HuffmanTree HT ,int n ) //n统计字符数 { if ( n = 1 ) return; int m = 2 * n ;//字符数的两倍 HT = new HTNode[m+1] ;//指向大小 for (int a = 1 ; a = m ; a ++ ) { HT[a].parent = HT[a].lchild = HT[a].rchild = HT[a].weight = 0; } for (int j = 1 ; j = n ; j ++ ) { HT[j].weight = h[j]; //权值传递???? HT[j].zimu = u[j]; } int s1 ,s2 ; for (int i = n + 1 ; i = m ; i ++ ) //次数与上面的相同,父亲节点的

文档评论(0)

1亿VIP精品文档

相关文档