河北工业大学-数据结构实验报告-基于哈夫曼编码的通信系统的设计与实现

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于哈夫曼编码的通信系统的设计与实现

一、实验目的

(1)掌握二叉树的存储结构及其相关操作。

(2)掌握构造哈夫曼树的基本思想,及其编码/译码过程。

二、实验内容

利用哈夫曼编码进行通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本。但是,这要求在发送端通过一个编码系统对待传输数据预先编码,在接收端将传来的数据进行译码。对于双工信道,每端都需要一个完整的编/译码系统。试为这样的信息收发站设计一个基于哈夫曼编码的通信系统。

一个完整的系统应具有以下功能

1)初始化处理:建立通信系统

(1)建立有100句中文的信息集合,每个句子称为一条信息。(2)输入编码参数:

①从终端输入编码字符集大小n,字符编码长度m(设n为4,m为8);

②从终端输入编码字符(设为A,B,C,D);

(3)生成每条信息的字符编码,构造字符编码集合;

(4)计算每个字符编码集合中出现的概率;

(5)根据字符概率构造哈夫曼树,求出每个字符的二进制编码。

2)发送端信息编码

(1)用户从信息集合中选择一条信息,找到该信息对应的字符

编码;

(2)根据该信息的字符编码,哈夫曼树求出的每个字符的二进制编码,构造出该信息的二进制编码,记录二进制比编码。

3)接受端信息译码

(1)根据得到的信息的二进制编码,利用哈夫曼树求出每个字符的二进制编码还原出信息的字符编码;

(2)根据信息的字符编码,找到对应的信息。

三、源程序代码

#include

#include

#include

char *codechar;

int ncodechar,lcodechar;

int *arraychar[100];

char *temp;

float *proba;

char pass[50];

int passl;

struct node

{

float pro;

int num;

struct node* p;

struct node* lc;

struct node* rc;

char *res;

int length;

}*hc;

char message[100][20]={

{"人之初"}, {"性本善"}, {"性相近"}, {"习相远"}, {"苟不教"}, {"性乃迁"},

{"教之道"}, {"贵以专"}, {"昔孟母"}, {"择邻处"}, {"子不学"}, {"断机杼"},

{"窦燕山"}, {"有义方"}, {"教五子"}, {"名俱扬"}, {"养不教"}, {"父之过"},

{"教不严"}, {"师之惰"}, {"子不学"}, {"非所宜"}, {"幼不学"}, {"老何为"},

{"玉不琢"}, {"不成器"}, {"人不学"}, {"不知义"}, {"为人子"}, {"方少时"},

{"亲师友"}, {"习礼仪"}, {"香九龄"}, {"能温席"}, {"孝于亲"}, {"所当执"},

{"融四岁"}, {"能让梨"}, {"弟于长"}, {"宜先知"}, {"首孝弟"}, {"次见闻"},

{"知某数"}, {"识某文"}, {"一而十"}, {"十而百"}, {"百而千"}, {"千而万"},

{"三才者"}, {"天地人"}, {"三光者"}, {"日月星"}, {"三纲者"}, {"君臣义"},

{"父子亲"}, {"夫妇顺"}, {"曰春夏"}, {"曰秋冬"}, {"此四时"}, {"运不穷"},

{"曰南北"}, {"曰西东"}, {"此四方"}, {"应乎中"}, {"曰水火"}, {"木金土"},

{"此五行"}, {"本乎数"}, {"曰仁义"}, {"礼智信"}, {"此五常"}, {"不容紊"},

{"稻粱菽"}, {"麦黍稷"}, {"此六谷"}, {"人所食"}, {"马牛羊"}, {"鸡犬豕"},

{"此六畜"}, {"人所饲"}, {"曰喜怒"}, {"曰哀惧"}, {"爱恶欲"}, {"七情具"},

{"匏土革"}, {"木石金"}, {"丝与竹"}, {"乃八音"}, {"高曾祖"}, {"父而身"},

{"身而子"}, {"子而孙"}, {"自子孙"}, {"至玄曾"}, {"乃九族"}, {"人之伦"},

{"父子恩"}, {"夫妇从"}, {"兄则友"}, {"弟则恭"}} ;

int zifushengcheng();

int probability();

int huffman();

int Exchange(struct node *a,struct node *b);

int Exchangenum(int *a,int *b);

int Exchangepoint(struct node **a,struct node ** b);

int produce(struct node *a,int *b);

int sent();

int receive();

int main()

{

int i;

char t;

printf("初始化通讯系统:\n请输入编码字符集大小n,字符编码长度m(以n m格式来输入):\n");

scanf("%d %d",&ncodechar,&lcodechar);

codechar=(char *)malloc(sizeof(char)*ncodechar);

proba=(float *)malloc(sizeof(float)*ncodechar);

for(i=0;i

{

proba[i]=0;

}

for(i=0;i<100;i++)

{

arraychar[i]=(int *)malloc(sizeof(int )*lcodechar);

}

hc=(struct node*)malloc(sizeof(struct node)*(ncodechar*2-1));

temp=(char *)malloc(sizeof(char)*(ncodechar));

printf("请输入编码字符(以A B C D的格式来输入):\n");

for(i=0;i

{

scanf("%c",&t);

if(t=='\n'||t==' ')

相关文档
最新文档