文档介绍:数据结构(C++实现)
实训报告
题 目:哈弗曼编码与译码
专 业: 信息管理
班 级:
学 生: 吴昊羽中
学 号: 1251220117
指导老师: 黄建灯
目录
一、 实训要求 3
二、 课题分析和设计 3
xe"
F青输入保存文章编码的文件名:
Iwe r k If gdf kg£ ikio 席按任意键继续. • •
I搜狗拼音输入法半:
四、总结
为期两个星期的课程设计终于完美落下帷幕,回想起前前后后还是有苦有甜。当拿到课 题是感觉还行!结果前几天做程序的代码时一点都不会做,课本也看不懂课程进度可以说是 原地踏步!只能怪自己吧!老师讲的有时能听懂有时就听不懂,到头来今天的局面,当时以 为自己完成不了任务。过程中甜的是有老师和同学的帮忙,总算圆满完成任务。通过本次实 训让我重新学习了算法和数据结构这门课程,也懂得了用代码来建立哈弗曼树,编码译码双 向功能!
上机实验,将理论的知识与实际结合起来。增强了自己的动手能力,觉的任何知识都不 是轻而易举的学懂,必须花点心思去学,必须要付出努力。以后上课就不能像以前那样,要 好好学习这样不辜负老师对我们的心意。最后衷心感谢帮助我完成程序设计的老师和同学表 示感谢!
五、附录
全部代码:
#ifndef HUFFMANFUNCTION_H
#define HUFFMANFUNCTION_H
#include <cstdlib>
#include<iostream>
#include<fstream>
#include<>
#define maxi 150
#define max2 50
#define max3 256
using namespace std;
class Htnote {
public:
char name; 〃字符名
double weight; //权重
int Ichild; //左孩子
intrchild;// 右孩子
int parent; 〃父亲
Htnote() (
weight = 0;
Ichild = -1;
parent = -1;
rchild = -1;
}
};
class Name (
public:
int num;//字符出现的次数
char pname; 〃字符名
double Iweight; //权值
Name() (
num = 0;
Iweight = 0;
}
};
class GetName (
public:
char namef[max2];
intn;//字符的种类
int sum; 〃字符的总数
Name letter[maxl]; //存储字符信息的类的数组
GetName() (
sum = 0;
n = 0;
}
void GetWeight()//得到字符的权值
for (int i = 0; i < n; i++) (
letter[i].lweight = (double) letter[i].num / sum; //出现的次数除总数得到权值 }
}
int ReadLetter() (
ifstream input;
cout« ”请输入文件名:'* « endl;
cin » namef;
(namef); 〃打开文件
if (()) (
cout « ”该文件不存在! ” vv endl;
return 0;
)
char ch;
ch = ();
letter[0].pname = ch;
letter[0].num++;
sum++;
while (!()) {〃读取文件中的所有字符
int tag = 0;
ch = ();
for (int i = 0; i v n + 1; i++) (
if (letter[i].pname == ch) (
letter[i].num++;
sum++;
tag= 1;
}
}
if (tag == 0) (
n++;
letter[n].pname = ch;
letter [n].num++;
sum++;
sum—;
();
GetWeight(); 〃得到字符权值
class CodeNode//编码类
{
public:
char ch;//存储字符
char bits [maxi]; 〃存储编码
};
class Function (
public:
GetName L;