数据结构课程设计报告网络版

发布 2022-10-05 21:14:28 阅读 2738

西安邮电大学。

题目哈夫曼编/译码器。

一、 课程设计目的。

熟悉数据结构的有关树的知识和c语言的文件基本操作。把数据结构所学学会运用。在实践中发现问题,解决问题。

二、 课程设计内容。

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

三、需求分析。

本程序可以实现要求的基本功能。

创建:通过文件和手工输入创建哈夫曼树。

编码:运用哈夫曼编码知识,将已经建立的哈夫曼树编码,获得各个字符的哈夫曼编码,并对正文进行编码,然后输出编码结果,并将其存入文本文档(.txt)中。

译码:利用已建立好的哈夫曼树将文件中的哈夫曼编码进行译码,并输出译码结果,再存入文本文档(.txt)中。

压缩,解压:利用位运算实现文件的压缩和解压。这两个功能在经过尝试后未能实现。编码,压缩功能已经实现,但是解压功能没有实现,因此,译码时的结果出现了错误。

四、概要设计。

void welcome();打印操作选择界面。

void huffmancoding(huffmantree &,char *,int *,int);/建立赫夫曼树的算法。

void huffmancoding(huffmantree &,char *,int *,int)

/从目前已建好的赫夫曼树中选择parent为0且weight最小的两个结点。

void init();输入n个字符及其对应的权值,根据权值建立哈夫曼树。

void coding();编码。

void decoding();译码。

int read_tree(huffmantree &)从文件中读入赫夫曼树。

void find(huffmantree &ht,char *code,char *text,int i,int m);

/译码时根据01字符串寻找相应叶子节点的递归算法。

void welcome()

void huffmancoding(huffmantree &,char *,int *,int)

void select(huffmantree ht,int j,int *s1,int *s2);

mainvoid init()

void coding()

void decoding()

int read_tree(huffmantree &)

void find(huffmantree &ht,char *code,char *text,int i,int m);

五、详细设计及运行结果。

菜单界面:创建并存入文件中:

编码并存储:

译码:主要函数:

void coding()

file *fp,*fw;

int i,f,c,start;

char *cd;

huffmancode hc;

if(n==0)

n=read_tree(ht);

free(cd);

if((fp=fopen(""r"))null)

printf("open file error!");

if((fw=fopen(""w"))null)

printf("open file error!");

char temp;

fscanf(fp,"%c",&temp); 从文件读入第一个字符。

while(!feof(fp))

fclose(fw);

fclose(fp);

printf("对文件编码成功,结果已存入中。");

void decoding()

file *fp,*fw;

int m,i;

char *code,*text,*p;

if(n==0)

n=read_tree(ht);/从文件中读入赫夫曼树,返回叶子结点数。

if((fp=fopen(""r"))null)

printf("open file error!");

if((fw=fopen(""w"))null)

printf("open file error!");

code=(char *)malloc(sizeof(char));

fscanf(fp,"%c",code从文件读入一个字符。

for(i=1;!feof(fp);i++)

code[i-1]='0';

到此文件中的字符已全部读入,存放在code数组中。

text=(char *)malloc(100*sizeof(char));

p=text;

m=2*n-1;

if(*code=='0')

find(ht,code,text,ht[m].lchild,m); 从根节点的左子树去找。

elsefind(ht,code,text,ht[m].rchild,m); 从根节点的右子树去找。

for(i=0;p[i]!=0';i++)把译码好的字符存入文件中。

fputc(p[i],fw);

fclose(fp);

fclose(fw);

printf("对文件译码成功,结果已存入文件。");

六、调试情况,设计技巧及体会。

在初步设计好程序后,程序可以实现基本的编码和译码的功能。看到时间稍微宽松后萌生了设计一个压缩和解压函数的程序。在查阅了相关书籍和网络资料后开始了哈夫曼压缩,解压部分的编写。

但是在实践后才发现并非像想象的那么简单!压缩要使用到位运算的相关知识,而我对这方面很是欠缺。查阅书籍对位运算有了简单的了解后便开始了压缩部分的编写。

编写过程中遇到很多问题,在查阅书籍无果后运用到了网络,在c语言论坛上求助网友,专业**提问,解决了很多问题。

当然,合作是必不可少的,再有问题部分还找了几个同学帮忙。他们给了很多意见与建议,调试时也给予了我很多帮助。

体会:不能闭门造车,学会合作。作为计算机专业的我们应该合理利用网络资源帮助自己解决问题。

七、参考文献。

数据结构(c语言)》耿国华版。

数据结构(c语言)》严蔚敏版。

数据结构课程设计案例详解》

计算机导论》

网络相关资源。

八、附录:源**。

#include <>

#include <>

#include <>

typedef struct

int weight;

char ch

int parent,lchild,rchild;

htnode,*huffmantree;

typedef char **huffmancode;

void welcome();

void huffmancoding(huffmantree &,char *,int *,int);

void select(huffmantree ht,int j,int *s1,int *s2);

数据结构课程设计报告 网络

华北科技学院。课程设计说明书。数据结构课程设计 专业网络工程。课程名称 数据结构课程设计班级 网络b11 1姓名学号 完整学号 设计题目。设计时间 2012 2 25 至 2012 3 8评语。评阅成绩 评阅教师。一 问题描述与需求分析。1 问题描述。2 功能需求分析。二 概要设计。1 总体设计思路...

数据结构课程设计报告 网络

华北科技学院。课程设计说明书。学号完整学号。班级 网络b17 1 姓名。设计题目。设计地点。设计时间 2018 9 3 至 2018 9 14成绩评定 1 工作量 a b c d e 2 难易度 a b c d e 3 答辩情况 a b c d e 4 报告规范度 a b c d e 5 学习态度 ...

数据结构课程设计报告

东莞理工学院城市学院。题目 二叉排序树 专业 计算机科学与技术 本 年级 2010级计算机科学与技术专业 1 班。个人姓名 何振江。指导教师 张娟老师 时间 2010至2011第二学期第18周 地点 实验楼615机房 东莞理工学院城市学院计算机与信息科学系制。2011年 6月。实习报告的内容。一 问...