ht的parent值怎么写

1.哈夫曼编码器

#include "stdio.h"#include "stdlib.h"#include "string.h" typedef struct{ char ch; unsigned int weight; unsigned int parent, lchild, rchild; } HTNode;//哈夫曼树类型定义(用一维数组表示) typedef HTNode HuffmanTree[100]; //假设树最多100个结点//存放哈夫曼编码的变量类型定义(用两维字符数组) typedef char HuffmanCode[100][100];//假设最多100个字符,每个字符编码最多100位 void select(HuffmanTree HT, unsigned int n, unsigned int *s1,unsigned int *s2) { unsigned int flag=1000;/*设一个权值最大值*/ unsigned int i,minweight; minweight=flag; for(i=1;i<=n;i++) {/*查找parent为0,权值最小的结点,把序号记入s1中*/ if(HT[i].parent==0 && HT[i].weight

HT[i].weight=w[i-1]; HT[i].lchild=0; HT[i].rchild=0; HT[i].parent=0; } //初始化非叶结点 for(i=n+1; i<=m;++i) { HT[i].weight=0; HT[i].lchild=0; HT[i].rchild=0; HT[i].parent=0; } for(i=n+1;i<=m;++i){ /*建哈夫曼树*/ /*在HT[1..i-1]中选择parent为0且weight最小的两个结点,其序号为s1和s2*/ select(HT, i-1, &s1,&s2); HT[s1].parent=i; HT[s2].parent=i; HT[i].lchild=s1; HT[i].rchild=s2; HT[i].weight=HT[s1].weight+HT[s2].weight; }/*//////////////////////////////////////////////////////////////*//*从叶子到根求每个字符的哈夫曼编码*/ for(i=1;i<=n;++i)//对每个叶结点 { j=1;//计数,也作下标 parent=HT[i].parent;//求其父结点 child=i;//记下孩子结点 while(parent!=0)//不是树根 { if(HT[parent].lchild==child)//是父结点的左孩子? code[j]='0'; //编码为0 else //是右孩子 code[j]='1'; //编码为1 j++; child=parent;//新孩子 parent=HT[parent].parent;//新的父结点 } for(k=0;k

2.哈夫曼树HT存储结构的初态和末态怎么写

定义哈夫曼树与编码的存储结构与数据类型

typedef struct

{

char data;//节点值

int weight; //权重

int parent; //双亲节点

int lchild; //左孩子节点

int rchild; //右孩子节点

} HTNode;

typedef struct

{

char cd[N]; //存放哈夫曼码

int start;

} HCode;

void CreateHT(HTNode ht[],int n) //创建哈夫曼树

void CreateHCode(HTNode ht[],HCode hcd[],int n) //根据哈夫曼树计算每个元素的哈夫曼编码

void DispHCode(HTNode ht[],HCode hcd[],int n) //输出每个元素的哈夫曼编码

3.哈夫曼编码的C语言源代码

原发布者:丁丁的23号

/*先根据位权构造一颗哈夫曼树,测试数据0.050.10.150.20.250.25,再从叶子结点到根结点编码。程序结果保存在out.dat中。*/#include#include#include#defineN6typedefstruct{doubleweight;intparent,lchild,rchild;}HuffmanTree;voidSelect(HuffmanTree*HT,inti,int*s1,int*s2){intn,T=0,T1;for(n=1;n<i;n++)if((HT[n].weight<=HT[T].weight)&&HT[n].parent==0)T=n;*s1=T;T1=T;T=0;for(n=1;n<i;n++){if(n==T1)continue;if((HT[n].weight<=HT[T].weight)&&HT[n].parent==0)T=n;}*s2=T;}voidHuffmanCoding(HuffmanTree*HT,char**HC,double*w,intn){intm,i,start;ints1,s2,f,c;char*cd;HuffmanTree*p;if(n<=1)return;m=2*n-1;HT[0].weight=10000;w++;for(p=HT+1,i=1;iweight=*w;p->lchild=0;p->rchild=0;p->parent=0;}for(;iweight=0;p->lchild=0;p->rchild=0;p->parent=0;}for(i=n+1;i<=m;++i){Select(HT,i,&s1,&s2);HT[s1].parent=i;HT[s2].parent=i;

4.写出构造完整的哈夫曼树的编码

void HuffmanCoding(HuffmanCode HC[], int w[], int n) // w存放n个字符的权值(均>0),构造哈夫曼树HT, 并求出n个字符的哈夫曼编码HC

{

int i, j;

char *cd;

int start;

if (n<=1) return;

m = 2 * n - 1;

HT = (HuffmanTree)malloc((m+1) * sizeof(HTNode)); // 0号单元未用

for (i=1; i<=n; i++) //初始化

{

HT[i].weight=w[i-1];

HT[i].parent=0;

HT[i].lchild=0;

HT[i].rchild=0;

HT[i].ch=0;

}

for (i=n+1; i<=m; i++) //初始化

{

HT[i].weight=0;

HT[i].parent=0;

HT[i].lchild=0;

HT[i].rchild=0;

HT[i].ch=0;

}

for (j=1,i=n+1; i<=m; i++,j++) // 建哈夫曼树

{

Select(i-1);

HT[s1].parent = i;

HT[s2].parent = i;

HT[i].lchild = s1;

HT[i].rchild = s2;

HT[i].weight = HT[s1].weight + HT[s2].weight;

HT[i].ch=j;

}

cd=(char *)malloc(n*sizeof(char));

cd[n-1]='\0';

for(i=1;i<=n;++i)

{

start=n-1;

HT[i].ch=i;

for(unsigned int c=i,f=HT[i].parent;f!=0;c=f,f=HT[f].parent)

if(HT[f].lchild==c)

cd[--start]='0';

else

cd[--start]='1';

HC[i]=(char *)malloc((n-start)*sizeof(char));

strcpy(HC[i],&cd[start]);

}

free(cd);

}

5.如何用C语言建立一棵N层的完全二叉树,要求除根结点,其余的结束

存储结构

typedef struct {

int weight;

int parent, lchild, rchild;

} HTNode ,*HuffmanTree; // 动态分配数组存储huffman树

算法设计

void createHuffmantree(){

ht=(HuffmanTree)malloc(m+1)*sizeof(HTNode);// 动态分配数组存储huffman树,0号单元未用

// m:huffman 树中的结点数(m=2*n-1)

for (i=1;i<=m;++i)

ht[i].parent= ht[i]->lch= ht[i]->rch=0;

for (i=1;i<=n;++i)

ht[i].weight=w[i]; //初始化,w[i]:n个叶子的权值

for (i=n+1;i<=m,++i) { //建哈夫曼树

select(i-1),s1,s2); //在ht[k](1<=k<=i-1)中选择两个双亲域为零而权值取最小的结点 :s1和s2

ht[s1].parent= ht[s2].parent=i;

ht[i].lch=s1;

ht[i].rch=s2;

ht[i].weight=ht[s1].weight + ht[s2].weight ;

};

}

6.C语言编写huffman编码(信息论基础教程里的上级作业)

#includestdio.h> #includestdlib.h> #includestring.h> #includemalloc.h> #define N 20 #define M 2*N-1 #define Min 1000 /*最小值*/ typedef struct { char ch; /*权值对应的字符*/ int weight; /*权值*/ int parent; /*双亲位置*/ int Lchild; /*左孩子位置*/ int Rchild; /*右孩子位置*/ }HTNode,Huffmantree[M+1]; char hc[N+1][N+1]; void OutputHuffmancode(Huffmantree ht, int n); void CrtHuffmancode(Huffmantree ht, int n); void OutputHuffmantree(Huffmantree ht,int n); void select(Huffmantree ht,int a,int *s1,int *s2) { int i; int c1=Min; int c2; for(i=1;i=a;i++) { if (ht.parent==0&&ht.weightc1) { *s1=i; c1=ht.weight; } } c2=Min; for(i=1;i=a;i++) { if (ht.parent==0&&(*s1!=i)&&c2>ht.weight) { *s2=i; c2=ht.weight; } } } void CrtHuffmantree(Huffmantree ht,int w[],char elem[],int n) { int i; int m; int s1,s2; m=2*n-1; ht=(HTNode *)malloc((m)*sizeof(HTNode)); for(i=1;i=n;i++) { ht.ch=elem[i-1]; ht.weight=w[i-1]; ht.parent=0; ht.Lchild=0; ht.Rchild=0; } for(i=n+1;i=m;i++) { ht.ch='\0'; ht.weight=0; ht.parent=0; ht.Lchild=0; ht.Rchild=0; } /*初始化完毕*/ for(i=n+1;i=m;i++) { select( ht,i-1,&s1,&s2); /*返回最小值和次小值的位置*/ ht.weight=ht[s1].weight+ht[s2].weight; ht[s1].parent=i; ht[s2].parent=i; ht.Lchild=s1; ht.Rchild=s2;/*建立树完毕*/ } OutputHuffmantree( ht,m); printf("now begin crthuffman code\n"); CrtHuffmancode( ht, n); printf("crthuffman code end\n"); OutputHuffmancode(ht, n); } void OutputHuffmantree(Huffmantree ht,int n) { int i; printf("\nnumber---weight---parent---Lchild---Rchild---huffman char\n \n"); for(i=1;i=n;i++) printf("%d\t%d\t%d\t%d\t%d\t%c\n",i,ht.weight,ht.parent,ht.Lchild,ht.Rchild,ht.ch); } void CrtHuffmancode(Huffmantree ht, int n) /*建立编码*/ { int i,c,p; int start; char *cd; cd=(char *) malloc((n+1)*sizeof(char)); memset(cd,'\0',sizeof(cd)); for(i=1;i=n;i++) { start=n; cd[start]='\0'; c=i; p=ht.parent; while(p!=0) { start--; if(ht[p].Lchild==c) cd[start]='0'; else cd[start]='1'; c=p; p=ht[p].parent; } //cd[start] = '\0'; printf("cd is %s\n start is %d\n", cd+start, start); sprintf(hc, "%s", cd+start); /*将已存在的编码复制到code中*/ } free(cd); } void OutputHuffmancode(Huffmantree ht,int n) { int i; printf("\nweight_char---weight---huffmancode\n \n"); for(i=1;i=n;i++) printf(" %c\t%4d\t%s\n",ht.ch,ht.weight,hc); } int main() { int n = 6;/*记录了权值个数*/ Huffmantree hfm; int w[] = {45,13,12,16,9,5}; char elem[] = {'a','b','c','d','e','f'}; CrtHuffmantree( hfm, w,elem, n); return 0; }。

ht的parent值怎么写

转载请注明出处育才学习网 » ht的parent值怎么写

知识

作文安身立命怎么写

阅读(233)

本文主要为您介绍作文安身立命怎么写,内容包括军人如何安身立命作文,高中作文:为天地立心,为生民立命800字,写一篇作文为了地立心,为生民立命,为往圣继绝学,为万世开太平.。欣赏军人那种为人民服务,为他人着想,像小草一样,像梅花一样,只默默无闻

知识

组织部个人表现怎么写

阅读(350)

本文主要为您介绍组织部个人表现怎么写,内容包括组织部个人简历怎么写,学生会组织部个人简历怎么写,加入组织部的自我鉴定,怎么写。我本人是学生会组织部的,个人简历就写你自己的一些事迹呗 。尽量表现一下, 这个还不是很重要, 仅仅是填张表,

知识

束手待毙的拼音怎么写

阅读(287)

本文主要为您介绍束手待毙的拼音怎么写,内容包括束手待毙是什么意思,束手待毙的近义词是什么标准答案,用束手待毙造句。待是等待的意思。 【成语】: 束手待毙 【拼音】: shù shǒu dài bì 【解释】:待:等待, 毙:死。捆起手来等死。比喻遇到

知识

三只小猪用英语怎么写

阅读(221)

本文主要为您介绍三只小猪用英语怎么写,内容包括三只小猪用英语怎么写,三只小猪的故事用英语怎么说,三只小猪的英文怎么写。Tale of the Three Little PigsFairy-Tale(童话) of the Three Little Pigs

知识

请领导批示文件怎么写

阅读(653)

本文主要为您介绍请领导批示文件怎么写,内容包括请领导批复文件怎么说,是否得当,请领导批示该怎么说,请领导批复文件怎么说。要领导顺利批文有二种说法:如这文件是你的叫你完成的文件,首先领导您好,XX时候您叫我做的文件已经完成,请您查看,如有

知识

拉字用拐字怎么写

阅读(198)

本文主要为您介绍拉字用拐字怎么写,内容包括洞洞拐用汉字怎么写&#39;,拉字的笔画怎么打,谁知道"丁"字和"拐"字的繁体写法。拉 lā 〈动〉 拉 lǎ 〈量〉 (1) (形声。字从手,从立,立亦声。“立”指“站立”。“手”指“用手”。“手”与“立”联合起

知识

高位截瘫大病历怎么写

阅读(281)

本文主要为您介绍高位截瘫大病历怎么写,内容包括一份完整的大病历怎么书写啊,高位截瘫的病例,病历本上既往史怎么写。目前不少学者对神经根性颈椎病多倾向于手术治疗。但术后症状不能获得完全缓解者已屡见不鲜 ,尤其是病史较长 ,对脊髓压迫刺

知识

宝宝爱音乐怎么写

阅读(181)

本文主要为您介绍宝宝爱音乐怎么写,内容包括宝宝爱听什么音乐,如何让宝宝爱上音乐,我家宝宝爱听音乐。到了两岁,不仅能注意倾听音乐,也能感受简单的音乐作品。如: 中外儿童艺术歌曲:《我爱我的小动物》、《哈巴狗》、《蚂蚁搬豆》、《小猫眯

知识

丑小鸭童话故事怎么写

阅读(233)

本文主要为您介绍丑小鸭童话故事怎么写,内容包括丑小鸭这个童话故事是谁写的,求一篇安徒生写的童话故事《丑小鸭》,童话故事30字丑小鸭。一枚天鹅蛋在鸭窠里被母鸭孵出后,因为长相与众不同而被大家当成丑小鸭。因此,自从蛋壳里爬出后来便到处

知识

大班毕业手册怎么写

阅读(210)

本文主要为您介绍大班毕业手册怎么写,内容包括幼儿园大班成长手册怎么写,我的孩子大班毕业了,老师让在幼儿成长记录手册上写家长留言,怎样,幼儿园大班快乐成长手册怎么填写。现在升入大班了,你也变成中班的哥哥了,可更要好好表现吆。在老师的

知识

读书所得怎么写

阅读(188)

本文主要为您介绍读书所得怎么写,内容包括读书收获怎么写,读书的收获怎么写,读书收获怎么写。读书通往心灵的阶梯理想的书籍是智慧的钥匙.智慧的钥匙可以开启心灵之窗.――题记书,仅一个字包含了千百年来所有智者的智慧.写书,是用来表达

知识

论文复议申请书怎么写

阅读(549)

本文主要为您介绍论文复议申请书怎么写,内容包括论文复议申请表中复议申请理由怎么写,论文答辩复核申请书怎么写,复议申请怎么写。项目是不可能复议得到的。 这个就好比足球一样,即使误判了,也不可能更改的。forrestgump(站内联系TA)兄弟几乎没

知识

人脉方面优势怎么写

阅读(224)

本文主要为您介绍人脉方面优势怎么写,内容包括优势特长怎么写,人脉营销有何优势,论人脉的重要性。优势就是别人不会的,高出别人的东西,因此应根据你自己的优势,比如性格随和、交际能力强、管理能力好,逻辑思维强、只是渊博,专业技能好,人脉

知识

摔跤的跤字怎么样写

阅读(187)

本文主要为您介绍摔跤的跤字怎么样写,内容包括摔倒的摔字怎么写,摔跤的摔字怎么写,摔跤的摔字怎么写呀。摔跤的摔字这样写

知识

html5url怎么写

阅读(237)

本文主要为您介绍html5url怎么写,内容包括html5input的属性type="url"格式必须为http://*****而www.****不,如何用HTML5的FileReader生成DataUrl,html5标准页面怎么写。新建文本文档命名为:DataUrlBuiler.htm,一定要修改扩展名打开文件:DataUrlBu

知识

html跳转页面到php代码怎么写

阅读(197)

本文主要为您介绍html跳转页面到php代码怎么写,内容包括html网页跳转到php网页后php网页为什么全是php代码,HTML代码PHP登陆后页面跳转,html或者php随机跳转页面怎么写。回答你第一个问题:其实文件名称不要改成html还是php但是,这浏览器中确

知识

html绘制五角星怎么写

阅读(281)

本文主要为您介绍html绘制五角星怎么写,内容包括如何用html5写特殊符号五角星,html怎么显示五角星,如何用html5写特殊符号五角星。首先贴出HTML5页面的代码:<!DOCTYPE html><html><head><meta charset="UTF-8" /><t

知识

html提交按钮怎么写

阅读(284)

本文主要为您介绍html提交按钮怎么写,内容包括html中提交按钮和重置按钮代码,要怎么输入,HTML怎么实现文本框里加入一个提交按钮,html中提交按钮和重置按钮代码,要怎么输入还有留言的留言框求高。需要准备的材料分别有:电脑、浏览器、html编

知识

html5声明怎么写

阅读(205)

本文主要为您介绍html5声明怎么写,内容包括HTML5的文档声明方式,如何声明创建一个标准HTML5页面,下面哪个选项是html5的声明方式。<!DOCTYPE&gt; 声明必须位于 HTML5 文档中的第一行,也就是位于 <html&gt; 标签之前。该标签告知浏览器文档所使

知识

dht21程序怎么写

阅读(199)

本文主要为您介绍dht21程序怎么写,内容包括DHT11能使用DHT21写的程序吗,DHT11能使用DHT21写的程序吗,急求DHT21/AM2301用51单片机驱动的程序。//****************************************************************//

知识

htmla标签怎么写

阅读(198)

本文主要为您介绍htmla标签怎么写,内容包括html的a标签是什么,HTML一个页面有多个a标签,怎么写才能让a标签显示不同的样式搜,HTMLa标签要怎么使用。HTML 元素 (或锚元素) 可以创建一个到其他网页、文件、同一页面内的位置、电子邮件地址或任

知识

html输入框怎么写

阅读(288)

本文主要为您介绍html输入框怎么写,内容包括HTML如图样式的输入框怎么写,html文本框代码怎么写,HTML登录输入框怎么写求大神帮助。1.单行文本框:<input type="text" style="height:20px;width:100px;" />2.多行文本

[/e:loop]