数据结构课程设计代码.doc
上传人:sy****28 上传时间:2024-09-10 格式:DOC 页数:4 大小:34KB 金币:12 举报 版权申诉
预览加载中,请您耐心等待几秒...

数据结构课程设计代码.doc

数据结构课程设计代码.doc

预览

在线预览结束,喜欢就下载吧,查找使用更方便

12 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

#include<iostream.h>#include<stdio.h>#include<malloc.h>#defineMAX25typedefstruct{chardata;intweight;intparent;intlchild;intrchild;}HTNode;typedefstruct{charcd[MAX];intstart;}HuffmanCode;intmain(){HTNodeht[2*MAX];HuffmanCodehcd[MAX],d;inti,k,f,l,r,n,c,s1,s2;cout<<"\t哈夫曼编码与译码系统\n";cout<<"\n请输入哈夫曼码元素个数:";cin>>n;cout<<"请输入各个元素的结点值与权值:\n";for(i=1;i<=n;i++){cout<<"第"<<i<<"个元素-->\n\t结点值:";cin>>&ht[i].data;cout<<"\t权值:";cin>>ht[i].weight;}for(i=1;i<=2*n-1;i++)ht[i].parent=ht[i].lchild=ht[i].rchild=0;for(i=n+1;i<=2*n-1;i++){s1=s2=32767;l=r=0;for(k=1;k<=i-1;k++)if(ht[k].parent==0)if(ht[k].weight<s1){s2=s1;r=l;s1=ht[k].weight;l=k;}elseif(ht[k].weight<s2){s2=ht[k].weight;r=k;}ht[l].parent=i;ht[r].parent=i;//得到新结点,删除l.r,将l,r的双亲域由0改为iht[i].weight=ht[l].weight+ht[r].weight;//i的权值等于左右孩子之和ht[i].lchild=l;ht[i].rchild=r;//l,r为i的左右孩子}for(i=1;i<=n;i++){d.start=n+1;//start开始时指向最后,即编码结束符位置c=i;f=ht[i].parent;//f指向结点c的双亲结点while(f!=0)//从叶子结点开始向上回溯,知道根结点{if(ht[f].lchild==c)d.cd[--d.start]='0';//结点c是f的左孩子,则生成代码0elsed.cd[--d.start]='1';//结点c是f的左孩子,则生成代码1c=f;f=ht[f].parent;//继续向上回溯}hcd[i]=d;//为第i个字符编码分配空间}cout<<"输出哈夫曼编码:\n";for(i=1;i<=n;i++){cout<<ht[i].data<<":";for(k=hcd[i].start;k<=n;k++)cout<<hcd[i].cd[k];cout<<"\n";}l:cout<<"\n请选择编码/译码/退出系统:(B/Y/E):";charhfm;cin>>hfm;if(hfm=='e')return0;else{switch(hfm){case'b':{intq;charbs;cout<<"\n哈夫曼编码\n";cout<<"请输入字符代码:"<<endl;for(q=0;bs!=10;q++){bs=getchar();for(i=1;i<=n;i++){if(bs==ht[i].data)for(k=hcd[i].start;k<=n;k++)cout<<hcd[i].cd[k];}}cout<<endl;}break;case'y':{chare;intt,u;t=2*n-1;cout<<"\n哈夫曼译码\n";cout<<"\n请输入哈夫曼码:"<<endl;for(u=0;e!=10;u++){if(ht[t].lchild!=