数据结构课程设计-12月27日

明天起到星期四,是四天的数据结构的课程设计周,就又有记录的日志了。前提说好,一切以不上网参考不复制不利用其他现成代码为主,一定要自己动手,实在不行的地方记录下来,然后再参考。

先给出课程设计的题目:

题目设定:哈夫曼编/译码器                        

问题描述:

 利用哈夫曼编码进行信息通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本。但是,这要求在发送端通过一个编码系统对待传数据预先编码,在接收端将传来的数据进行译码(复原)。试为这样的信息收发站写一个哈夫曼的编/译码器。

设计要求:

1.建立哈夫曼树:读入文件(*.souce),统计文件中字符出现的频度,并以这些字符的频度作为权值,建立哈夫曼树。
2.编码:利用已建立好的哈夫曼树,获得各个字符的哈夫曼编码,并对正文进行编码,然后输出编码结果,并存入文件(*.code)中。
3.译码:利用已建立好的哈夫曼树将文件(*.code)中的代码进行译码,并输出译码结果,存入文件(*.decode)中。
4.利用位操作,实现文件的压缩与解压。(选作)

提交内容:

前期的设计方案(第18周周一提交)
   内容包括:所选的题目、使用的数据结构、主要功能模块的介绍等。
实验报告书面版(第19周周三交)
程序源代码及实验报告电子版(第19周周三交)


以上就是课程设计的基本内容。所以今天晚上要完成的就是——前期的设计方案。

.概要设计

  1)功能的模块图

void read();
void write();
void print();
int countChar(char x);
void CrtHuffmanTree(HuffmanTree ht,int w[ ],int n);
void CrtHuffmanCode(HuffmanTree ht,HuffmanCode hc,int n);
void Change();
void Translate();


  2)各个模块详细的功能描述


a)文本文件内容的读取  void read();

b)文本文件内容的写入 void write();

c)文本文件内容的输出 void print();

d)统计内容中各字符出现的次数当作权值 int countChar(char x);

e)建立哈夫曼树 void CrtHuffmanTree(HuffmanTree ht,int w[ ],int n);

f)利用哈夫曼树编码算法获得各个字符的哈夫曼编码 void CrtHuffmanCode(HuffmanTree ht,HuffmanCode hc,int n);

g)用各个字符的哈夫曼编码对正文进行编码,并输出,并存入.code文件 void Change();

h)利用Translate()对文件中代码进行译码,并输出,并存入.decode文件 void Translate();

 

对未知的文件内容,统计次数需要使用遍历统计。//此处是和班长讨论后,我提出问题,班长给出最终答案。


那一开始就是的问题,文件内容可能是未知的,比如会是图片,歌曲等等,这怎么读取?按二进制读取是还是???//这里是不知道的地方,百度问问:c语言读取图片原理:通过文件流的方式读入到Byte的二进制数组中,之后,使用图像分析算法将图像显示到屏幕上,要将数组中的值转换为像素。


然后休息半天思考后,我还是就按我现在的实际水平先来写吧

文本文件的内容暂且全是字符串(包括空格)


明天起课设就开始了,究竟我是抱着哪种心态做课设呢?一开头是说不要帮助,然而呢~结果我会怎么做呢

未来四天看吧


描述 输入一串字符串,根据给定的字符字符出现的频率建立相应哈夫曼树,构造哈夫曼编码表,在此基础上可以对待压缩文件进行压缩(即编码),同时可以对压缩后的二进制编码文件进行解压(即译码)。 输入 多组数据,每组数据一行,为一个字符串(只考虑26个小写字母即可)。当输入字符串为“0”时,输入结束。 输出 每组数据输出2n+3行(n为输入串字符类别的个数)。第一行为统计出来的字符出现频率(只输出存在的字符,格式为:字符:频度),每两组字符之间用一个空格分隔,字符按照ASCII码从小到大的顺序排列。第二行至第2n行为哈夫曼树存储结构的终态(形如教材139页表5.2(b),一行当的数据用空格分隔)。第2n+1行为每个字符的哈夫曼编码(只输出存在的字符,格式为:字符:编码),每两组字符之间用一个空格分隔,字符按照ASCII码从小到大的顺序排列。第2n+2行为编码后的字符串,第2n+3行为解码后的字符串(与输入的字符串相同)。 样例输入1 aaaaaaabbbbbccdddd aabccc 0 样例输出1 a:7 b:5 c:2 d:4 1 7 7 0 0 2 5 6 0 0 3 2 5 0 0 4 4 5 0 0 5 6 6 3 4 6 11 7 2 5 7 18 0 1 6 a:0 b:10 c:110 d:111 00000001010101010110110111111111111 aaaaaaabbbbbccdddd a:2 b:1 c:3 1 2 4 0 0 2 1 4 0 0 3 3 5 0 0 4 3 5 2 1 5 6 0 3 4 a:11 b:10 c:0 111110000 aabccc使用c语言写出完整的代码并加上注释,分析时间复杂度和空间复杂读
05-17
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值