第一范文网 - 专业文章范例文档资料分享平台

大数据结构课设报告材料+哈夫曼编译器+C语言+源码

来源:用户分享 时间:2025/5/25 2:17:44 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

标准

八、附录:源程序清单

#include #include #include #define MAXLEN 100 typedef struct { int weight; int lchild; int rchild; int parent; char key; }htnode;

typedef htnode hfmt[MAXLEN]; int n;

void inithfmt(hfmt t)//对结构体进行初始化 {

int i;

printf(\

printf(\--------------\\n\

printf(\输入区***************************************\\n\ printf(\请输入字符集大小n=\ scanf(\ getchar();

for(i=0;i<2*n-1;i++)//对结构体进行初始化 {

t[i].weight=0; t[i].lchild=-1; t[i].rchild=-1; t[i].parent=-1; }

printf(\}

void inputweight(hfmt t)//输入函数 {

int w;//w表示权值 int i;

char k;//k表示获取的字符

文案

标准

for(i=0;i

printf(\请输入第%d个字符:\ scanf(\ getchar(); t[i].key=k;

printf(\请输入第%d个字符的权值:\ scanf(\ getchar(); t[i].weight=w; printf(\ } }

void selectmin(hfmt t,int i,int *p1,int *p2)//选中两个权值最小的函数 {

long min1=999999; long min2=999999; int j;

for(j=0;j<=i;j++)//选择最小权值字符的下标返回 if(t[j].parent==-1)

if(min1>t[j].weight) {

min1=t[j].weight; *p1=j; }

for(j=0;j<=i;j++)//选择次小权值字符的下标还回 if(t[j].parent==-1)

if(min2>t[j].weight && j!=(*p1))//注意 j!=(*p1)) {

min2=t[j].weight; *p2=j; } }

void creathfmt(hfmt t)//创建哈夫曼树的函数 {

int i,p1,p2; inithfmt(t); inputweight(t);

for(i=n;i<2*n-1;i++) {

selectmin(t,i-1,&p1,&p2); t[p1].parent=i;

文案

标准

t[p2].parent=i; t[i].lchild=p1; t[i].rchild=p2;

t[i].weight=t[p1].weight+t[p2].weight; } }

void printhfmt(hfmt t)//打印哈夫曼树 {

FILE *f1;

char str[10000]; char *s; int i;

if((f1=fopen(\哈夫曼树.txt\ {

printf(\-----\\n\ s =

\\

fprintf(f1,\

printf(\哈夫曼树关系结构****************************\\n\

s = \哈夫曼树关系结构****************************\\n\ fprintf(f1,\

printf(\权重\\t父母\\t左孩子\\t右孩子\\t字符\\t\ s = \权重\\t父母\\t左孩子\\t右孩子\\t字符\\t\ fprintf(f1,\ for(i=0;i<2*n-1;i++) {

printf(\

printf(\[i].rchild,t[i].key);

fprintf(f1,\hild,t[i].rchild,t[i].key); }

printf(\-------\\n\ s =

文案

标准

\\\n\

fprintf(f1,\ fclose(f1);

printf(\已将哈夫曼树存入文件,文件名为:哈夫曼树\\n\\n\ } }

char ch; FILE *f2;

void hfmtpath(hfmt t,int i,int j)//编码的重要哈夫曼树路径递归算法 {

int a,b; a=i;

b=j=t[i].parent; if(t[j].parent!=-1) {

i=j;

hfmtpath(t,i,j); }

if(t[b].lchild==a) {

printf(\ fputc('0',f2); } else {

printf(\ fputc('1',f2); } }

void phfmnode(hfmt t)//对字符进行初始编码 {

int i,j,a;

printf(\-------\\n\

printf(\哈夫曼编码******************************\

printf(\字符\\t权值\\t编码结果\ for(i=0;i

文案

大数据结构课设报告材料+哈夫曼编译器+C语言+源码.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c8cizt5ltu99da6a52gje3fmdy9ul8q00gje_5.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top