赞
踩
编译环境:VC++ 6.0编程要求简述:
[问题描述]
利用哈夫曼编码进行信息通讯可以大大提高信道利用率,缩短信息传输时间,降低传输成本。但是,这要求在发送端通过一个编码系统对待传数据预先编码;在接收端将传来的数据进行译码(复原)。对于双工信道
(即可以双向传输信息的信道),每端都需要一个完整的编/译码系统。试为这样的信息收发站写一个哈夫曼码的编译码系统。
[基本要求]
一个完整的系统应具有以下功能:
(l)I:初始化
(Initialization)。从终端读入字符集大小n,及n个字符和m个权值,建立哈夫曼树,并将它存于文件hfmtree中。
(2)C:编码
(Coding)。利用已建好的哈夫曼树(如不在内存,则从文件hfmtree中读入),对文件tobetrans中的正文进行编码,然后将结果存入文件codefile中。
(3)D:编码
(Decoding)。利用已建好的哈夫曼树将文件codefile中的代码进行译码,结果存入文件textfile中。
(4)P:印代码文件
(Print)。将文件codefile以紧凑格式显示在终端上,每行50个代码。同时将此字符形式的编码文件写入文件codeprint中。
(5)T:印哈夫曼树 (Tree
printing)。将已在内存中的哈夫曼树以直观的方式
(树或凹入表形式)显示在终端上,同时将此字符形式的哈夫曼树写入文件treeprint中。
程序源代码:
文件一:my.h(自定义头文件)
//调用有文件以及定义常数值
#include "stdio.h"
#include "string.h"
#define MAXLEN 100
#define MAXLEN_1 1000
//自定义类型声明
typedef struct
{
int weight;
char data;
int lchild,rchild,parent;
}HFMTnode;
typedef HFMTnode HFMT[MAXLEN];
typedef
struct
{
char code[MAXLEN];
char data;
}HFMCnode;
typedef HFMCnode HFMC[MAXLEN];
typedef
struct
{
char data[MAXLEN];
int top;
}seqstack;
//文件全局变量外部声明
extern int n;
//所有子函数声明
void InitializeTree(HFMT T);
void InputTree(HFMT T);
void Selectleast(HFMT T,int *p1,int *p2);
void CreateHFMT(HFMT T);
void push(char x);
void hfmc(HFMT T,int i);
void CreateHFMC(HFMT T,HFMC C);
void Initialization(HFMT T,HFMC C);
void Codeing(HFMC C);
void Decodeing(HFMC C);
void Showcodefile();
void Showhfmt(HFMT T);
int TreeDepth(HFMT T,int i);
void print(HFMT T,int i,int a);
文件二:Initialization.c(初始化)
#include
"my.h"
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。