明天起到星期四,是四天的数据结构的课程设计周,就又有记录的日志了。前提说好,一切以不上网参考不复制不利用其他现成代码为主,一定要自己动手,实在不行的地方记录下来,然后再参考。
先给出课程设计的题目:
题目设定:哈夫曼编/译码器
问题描述:
利用哈夫曼编码进行信息通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本。但是,这要求在发送端通过一个编码系统对待传数据预先编码,在接收端将传来的数据进行译码(复原)。试为这样的信息收发站写一个哈夫曼的编/译码器。
设计要求:
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的二进制数组中,之后,使用图像分析算法将图像显示到屏幕上,要将数组中的值转换为像素。
然后休息半天思考后,我还是就按我现在的实际水平先来写吧
文本文件的内容暂且全是字符串(包括空格)
明天起课设就开始了,究竟我是抱着哪种心态做课设呢?一开头是说不要帮助,然而呢~结果我会怎么做呢
未来四天看吧