哈弗曼大数据结构专题实验报告材料Word下载.docx
- 文档编号:3823591
- 上传时间:2023-05-02
- 格式:DOCX
- 页数:19
- 大小:272.94KB
哈弗曼大数据结构专题实验报告材料Word下载.docx
《哈弗曼大数据结构专题实验报告材料Word下载.docx》由会员分享,可在线阅读,更多相关《哈弗曼大数据结构专题实验报告材料Word下载.docx(19页珍藏版)》请在冰点文库上搜索。
}NODE;
NODE*creat(charb[])
{NODE*h,*p,*s,*death;
inti;
h=(NODE*)malloc(sizeof(NODE));
p=(NODE*)malloc(sizeof(NODE));
h->
next=p;
pre=NULL;
p->
pre=h;
next=NULL;
data=b[0];
p->
count=1.0;
for(i=1;
b[i]!
='
\0'
;
i++)
{s=(NODE*)malloc(sizeof(NODE));
s->
data=b[i];
s->
pre=p;
next=s;
p=s;
}
returnh;
voidfun(NODE*h,intamount)
{NODE*p,*q,*death;
for(p=h->
next;
p;
p=p->
next){
for(q=p->
q;
){
if(q->
data==p->
data){
(p->
count)++;
if(q->
next==NULL){
q->
pre->
next=NULL;
free(q);
break;
}
else{q->
next=q->
next->
pre=q->
pre;
death=q;
q=q->
free(death);
}
elseq=q->
(p->
rate)=1.0*(p->
count)/amount;
//printf("
%c:
\t%d\t%f\n"
p->
data,p->
count,p->
rate);
}puts("
构建链表完成\n"
);
voidoutlink(NODE*h,int*n)
{
%d"
amount);
NODE*p=(NODE*)malloc(sizeof(NODE));
NODE*s=(NODE*)malloc(sizeof(NODE));
inti;
charch;
doubler;
for(p=h->
next)
{
for(s=p->
s;
s=s->
{
if(s->
count>
count)
{
i=p->
count;
p->
count=s->
s->
count=i;
ch=p->
data;
data=s->
data=ch;
r=p->
rate;
rate=s->
rate=r;
}
p=h->
while(p){
(*n)++;
}puts("
排序完成\n"
typedefstruct{
NODEbody;
intlchild,rchild,parent;
structTreenode*next;
}HTNode,*Tree;
typedefchar**Huffmancode;
voidselect(Tree&
HT,intn,int&
s1,int&
s2){
inti,j;
for(i=1;
i<
=n;
if(!
HT[i].parent){s1=i;
break;
for(j=i+1;
j<
j++)
HT[j].parent){s2=j;
if((HT[s1].body.rate>
HT[i].body.rate)&
&
(!
HT[i].parent)&
(s2!
=i))
s1=i;
for(j=1;
if((HT[s2].body.rate>
HT[j].body.rate)&
HT[j].parent)&
(s1!
=j))
s2=j;
voidHuffmancoding(Tree&
HT,Huffmancode&
HC,intn,NODE*head,int*wei){
HTNode*p;
intm=2*n-1,i;
ints1,s2;
NODE*L=head->
HT=(Tree)malloc((m+1)*sizeof(HTNode));
for(p=HT+1,i=1;
i<
=n;
i++,p++){
body=*L;
L=L->
p->
lchild=0;
parent=0;
rchild=0;
}
for(;
=m;
p++,i++){
body.rate=0;
for(i=n+1;
i++){
select(HT,i-1,s1,s2);
HT[s1].parent=i;
HT[s2].parent=i;
HT[i].lchild=s1;
HT[i].rchild=s2;
HT[i].body.rate=HT[s1].body.rate+HT[s2].body.rate;
if(HT[i].parent==0){
*wei=i;
HC=(Huffmancode)malloc((n+1)*sizeof(char*));
char*temp=(char*)malloc(n*sizeof(char));
temp[n-1]='
for(i=0;
n;
i++){
intstart=n-1;
for(intf=HT[i].parent,h=i;
f;
h=f,f=HT[f].parent){
if(HT[f].lchild==h){
temp[--start]='
0'
else{
1'
//HC[i]=(char*)malloc((n-start)*sizeof(char));
strcpy(HT[i].body.haffmancode,&
temp[start]);
free(temp);
FILE*fw;
fw=fopen("
Statistic.txt"
"
wt"
fprintf(fw,"
\t%d\t%f\t%s\n"
HT[i].body.data,HT[i].body.count,HT[i].body.rate,HT[i].body.haffmancode);
puts("
哈夫曼编码完成,Statistic.txt文件生成完毕\n"
fclose(fw);
voidputdat(NODE*h,FILE*fp,FILE*ft,FILE*fw,Tree&
HT,int*wei,int*nc){
charqq[10000]={0};
intt[10000]={0};
inti=0,j=0,n=0,last=*nc;
rewind(fp);
charpp[10000]={0};
//strcpy(pp,"
\0"
NODE*L=h->
while(L){
i=0;
while(i<
last){
if(L->
data==HT[i].body.data)strcpy(L->
haffmancode,HT[i].body.haffmancode);
i++;
L=L->
charcp=fgetc(fp);
while(cp!
=EOF)
L=h->
while(cp!
=L->
data)
L=L->
strcat(pp,L->
haffmancode);
cp=fgetc(fp);
%s\n\n"
pp);
i=0;
while(pp[i]!
n=0;
while(n<
15&
pp[i]!
if(pp[i]=='
t[j]=t[j]|1;
if(n!
=14&
pp[i+1]!
){t[j]=t[j]<
<
1;
n++;
i++;
){t[j+1]=0;
last=n;
j++;
//for(;
t[n]!
=0;
n++);
//itoa(t[0],string,2);
printf("
string=%s\n"
string);
fwrite(&
t[0],sizeof(char),j-1,fw);
j=0;
while(t[j+1]!
n=14;
while(n>
=0){
doublea=pow(2,n);
if((t[j]&
(int)a)==(int)a){
qq[i]='
else{qq[i]='
n--;
n=last-1;
while(n>
=0){doublea=pow(2,n);
(int)a)==(int)a)
qq[i]='
elseqq[i]='
i++;
}qq[i]='
%s"
qq);
introot=*wei;
charc;
while(qq[i]!
)
{c=qq[i];
if(qq[i]=='
root=HT[root].lchild;
else{
root=HT[root].rchild;
if(HT[root].rchild==0&
HT[root].lchild==0){
fprintf(ft,"
%c"
HT[root].body.data);
root=*wei;
解码完成,Target.txt文件生成\n"
boolcompare(FILE*fp,FILE*ft)
rewind(fp);
charch1=fgetc(fp);
charch2=fgetc(ft);
while(ch1!
=EOF&
ch2!
if(ch1!
=ch2)
break;
ch1=fgetc(fp);
ch2=fgetc(ft);
returnch1==ch2&
ch1==EOF?
true:
false;
intmain()
{FILE*fp;
intt=0;
charb[10000];
if((fp=fopen("
source.txt"
rt"
))==NULL)
{printf("
\ncannotopenfile"
return0;
ch=fgetc(fp);
while(ch!
{ch=fgetc(fp);
b[cnt]=ch;
t++;
FILE*fw;
fw=fopen("
Encode.dat"
wb"
fw){
printf("
NOSPACE%s\n"
intamount=strlen(b);
intn=0,m=2*n-1,i;
NODE*head;
head=creat(b);
fun(head,amount);
outlink(head,&
n);
TreeHT;
char**HC;
floattemp;
intwei;
HC=(Huffmancode)malloc((n)*sizeof(char*));
Huffmancoding(HT,HC,n,head,&
wei);
FILE*ft;
ft=fopen("
Target.txt"
ft){
NOSPACEFORTarget.txt"
putdat(head,fp,ft,fw,HT,&
wei,&
fclose(ft);
fclose(fp);
FILE*ftnew;
ftnew=fopen("
TargetDoc.txt"
rt+"
boolresult=compare(fp,ftnew);
if(result==true)
puts("
目标文件与原文件一致\n"
else
目标文件与原文件不一致\n"
fclose(ftnew);
system("
pause"
return0;
六.实验总结:
从程序的编写来看,感觉这次自己真的学到了好多,特别是对程序的开发流程。
从最初的选定程序,到最终的程序运行成功,其中遇到了很多问题,解决了好多问题,让我感到如果是仅仅掌握课本上的知识是远远不能够很好的应用到实际的编程中去的。
在这个过程中还需要我们更多的去考虑到实际条件的种种限制和约束。
总之,经过本次专业课程设计,让我们对数据结构以及C语言掌握更加深入,让我掌握了开发应用软件的基本流程,运用所学编程技能的基本技巧,也让我初步了解了软件设计的基本方法,提高进行工程设计的基本技能及分析、解决实际问题的能力,为以后毕业设计和工程实践等打下良好的基础。
相信通过这次的课程设计,我对所学的《数据结构(C语言版)》和各种编程语言都有了一个全新的认识。
我也会积极吸取本次课程设计的经验,继续研究数据结构和所学的各种编程语言。
七.致词:
值此实验完成之际,首先要感指导教师峰、顿玉洁老师。
老师从一开始就非常耐心的对我们进行指导。
给我提供了大量建议,告诉我应该注意的细节问题,细心的给我指出错误。
他们对数据结构程序设计专题深刻的见解,使我受益匪浅。
峰、顿玉洁老师诲人不倦的工作作风,一丝不苟的工作态度,严肃认真的治学风格给我们留下深刻的影响,值得我们永远学习。
在此,谨向峰、顿玉洁老师致以崇高的敬意和衷心的感!
其次,要感小组其他组员,我们一起解决困难、同舟共济,让我感受到了合作的力量,也让我意识到每一员对小组成功的重要性,你们!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 哈弗曼大 数据结构 专题 实验 报告 材料