哈夫曼树的建立,请完成select函数的编写 void select(huffNode huffmanTree[ ], int k, int *s1, int *s2); //从huffmanTree数组的0到up-1中找出father为-1的且权重最小的结点赋给s1,s2,(为了保证答案唯一,请让s1的结点编号小于s2)保证每个结点的权重值小于10000。

哈夫曼树的建立,请完成select函数的编写 void select(huffNode huffmanTree[ ], int k, int *s1, int *s2); //从huffmanTree数组的0到up-1中找出father为-1的且权重最小的结点赋给s1,s2,(为了保证答案唯一,请让s1的结点编号小于s2)保证每个结点的权重值小于10000。


参考答案和解析
100

相关考题:

已知一个数列从0项开始的前3项为0,0,1,以后的各项都是其相邻的前3项之和。下列给定的程序中,函数proc 的功能是:计算并输出该数列前n项的和sum。n的值通过形参传人。例如,当n=20时,程序的输出结果应为42762.000000。 请修改程序中的错误,使它能得到正确结果。 注意:不要改动maiil函数,不得增行或删行,也不得更改程序的结构。 试题程序: includestdlib.h includeconio.h includestdio.h double proc(int n) { double sum,s0,s1,s2,s; int k; sum=1.0; if(n=2) sum=0.0; s0=0.0; s1=0.0; s2=1.0; //****found**** for(k=4;kn;k++) } { s=s0+s1+s2; sum+=S: s0=s1; s1=s2; //****found**** s2=s; return sum; } void main { int n; system("CLS"); printf("Input N="); scanf("%d",&n J; printf("%f\n",proc(n)); }

若已包括头文件且已有定义char sl [18],s2={"ABCDE")和int i,现要将字符串”ABCDE”赋给sl,下列语句错误的是( )。A.strcpy(s1,s2)B.strcpy(s1,"ABCDE");C.sl="ABCDE";D.for(i=0;i

下列程序的输出结果为( )。 S1=”1”:S2=”2”:SI=Val(S1)+Val(S2):S2=Val(”12”) If S1S2 Then P int S1-S2 Else Print S2-S1A.-9B.9C.-12D.0

若已包括头文件且已有定义char s1[18],s2={"ABCDE"}和int i,现要将字符串“ABCDE”赋给s 若已包括头文件<string.h>且已有定义char s1[18],s2={"ABCDE"}和int i,现要将字符串“ABCDE”赋给s1,下列语句错误的是( )。A.strcpy(s1,s2)B.strcpy(sl,"ABCDE");C.s1="ABCDE";D.for(i=0;i<6;i++) s1[i]=s2[i];

下面关于哈夫曼树的叙述中,正确的是(58)。A.哈夫曼树一定是完全二叉树B.哈夫曼树一定是平衡二叉树C.哈夫曼树中权值最小的两个结点互为兄弟结点D.哈夫曼树中左孩子结点小于父结点、右孩子结点大于父结点

若已包括头文件且已有定义char s1[18],s2={"ABCDE"}和int i,现要将字符串 "ABCDE"赋给 若已包括头文件<string.h>且已有定义char s1[18],s2={"ABCDE"}和int i,现要将字符串 "ABCDE"赋给s1,下列语句错误的是( )A.strcpy(s1,s2)B.strcpy(s1,"ABCDE");C.s1="ABCDE";D.for(i=0;i<6;i++) s1[i]=s2[i];

阅读以下函数fun(char *sl,char *s2){ int i=0;while(sl[i]==s2[i]s2[i]!='\0') i++;return(sl[i]=='\0's2[i]=='\0');}此函数的功能是A.将s2所指字符串赋给s1B.比较s1和s2所指字符串的大小,若s1比s2的大,函数值为1,否则函数值为0C.比较s1和s2所指字符串是否相等,若相等,函数值为1,否则函数值为0D.比较s1和s2所指字符串的长度,若s1比s2的长,函数值为1,否则函数值为0

阅读下列函数说明和C代码,将应填入(n)处的字句写在对应栏内。[说明]HufTman树又称最优二叉树,是一类带权路径长度最短的树,在编码中应用比较广泛。构造最优二叉树的Huffman算法如下:①根据给定的n各权值{W1,w2,…,wn)构成n棵二叉树的集合F={T1,T2,…,Tn},其中每棵树Ti中只有一个带权为wi的根节点,其左右子树均空。②在F中选取两棵根节点的权值较小的树作为左右子树,构造一棵新的二叉树,置新构造二叉树的根节点的权值为其左右予树根节点的权值之和。③从F中删除这两棵树,同时将新得到的二叉树加入到F中。重复②③,直到F中只剩一棵树为止。函数中使用的预定义符号如下:#define INT MAX 10000#define ENCODING LENGTH 1000typedef enum(none,left_child,right_child) Which;/*标记是左孩子还足右孩子*/typedef char Elemtype;typedef struct TNode{//Huffman树节点Elemtype letter;intweight; //权值int parent; //父节点Which sigh;char *code; //节点对应编码}HTNode,*HuffmanTree;int n;char coding[50];//储存代码[函数]void Select(HuffmanTree HT,int end,int *sl,int *s2)/*在0~END之间,找出最小和次小的两个节点序号,返吲S1、S2*/{int i;int min 1=INT_MAX;int min 2=INT_MAX;for(i=0;i<=end;i++){/*找最小的节点序号*/if(( (1) )&&(HT[i].weight<minl)){*s1=i;min 1=HT[i].weight;}}for(i=0;i<=end;i++){/*找次小节点的序号*/if((HT[i].parent==0)&&( (2) )&&(min 2>HT[i].weight)){*s2=i;min 2=HT[i].weight;}}}void HuffmanTreeCreat(HuffmanTree&HT)/*建立HUFFMAN树*/{int i;int m=2*n-1;int s1,s2;for(i=n;i<m;i++){Select( (3) );HT[s1].parent=i;HT[s2].parent=i;HT[s1].sigh=left child;HT[s2].sigh=right child;HT[i].weight=(4);}}void HuffmanTreeEncoding(char sen[],HuffmanTree HT){ /*将句子进行编码*/int i=0;int j;while(sen[i] !='\0'){for(j=0;j<n;j++){if(HT[j].letter==sen[i])(/*字母吻合则用代码取代*/strcat(coding, (5) );break;}}i++;if (Sen [1]==32) i++;}printf("\n%s",coding);}(1)

求主次对角线之和。 main {static int a[ ][3]={9,7,5,1,2,4,6,8}; int I,j,s1=0,s2=0; for(I=0;I3;I++) for(j=0;j3;j++) {if(__________) s1=s1+a[I][j]; if( __________ ) s2=s2+a[I][j]; } printf(“%d\n%d\n”,s1,s2); }

(1)以2,3,4,7,8,9作为叶结点的权,构造一棵哈夫曼树(要求每个结点的左子树根结点的权小于等于右子树根结点的权),给出相应权重值叶结点的哈夫曼编码。(2)一棵哈夫曼树有n个叶结点,它一共有多少个结点?简述理由。

阅读以下函数 fun(char *sl,char *s2) { int i:0; while(sl[i]==s2[i]s2[i]!='\0') i++; return(sl[i]=='\0's2[i]=='\0'); } 此函数的功能是A.将s2所指字符申赋给s1B.比较s1和s2所指字符串的大小,若s1比s2的大,函数值为1,否则函数值为0C.比较s1和s2所指字符串是否相等,若相等,函数值为1,否则函数值为oD.比较s1和s2所指字符串的长度,若s1比s2的长,函数值为1,否则函数值为o

有以下程序并includeincludefun(char * w,int n){char t,*s1,*s2; s1=w;s2= 有以下程序 并include<stdio.h> #include<string.h> fun(char * w,int n) { char t,*s1,*s2; s1=w; s2=w+n-1; while(s1<s2) { t=*s1++; * s1=*s2--; * s2=t; } } main() { char p[]="1234567"; fun(p,strlen(p)); puts(p); } 程序运行后的输出结果是( )A.1234567B.7654321C.1711717D.7177171

有如下程序: include using namespace std; int main(){ int a[6]={23, 15, 64, 33, 有如下程序:#include<iostream>using namespace std;int main(){int a[6]={23, 15, 64, 33, 40, 58};int s1, s2;s1, s2=a[0];for(int*p=a+1; p<a+6; p++) {if(s1>*p)s1=*p;if(s2<*p)s2=*p;}cout<<s1+s2<<end1;return 0;}运行时的输出结果是( )。A) 23B) 58C) 64D) 79A.B.C.D.

以下程序的输出结果是______。includeincludefun(char*w,int n){ char t,*s 以下程序的输出结果是______。 #include<stdio.h> #include<string.h> fun(char*w,int n) { char t,*s1,*s2; s1=w;s2=w+n-1; while(s1<s2) { t=*s1++; *s1=*s2-; *s2=t; } } main() { char*p; p="1234567"; fun(p,strlen(p)); puts(p); }A.1234567B.7654321C.1711717D.7177171

阅读以下程序: include void main() { static int a[][3]={9,7,5,3,1,2,4,6,8}; int 阅读以下程序:include<iostream.h>void main(){static int a[][3]={9,7,5,3,1,2,4,6,8};int i,j,s1=0,s2=0;for(i=0;i<3;i++)for(j=0;j<3;j++){if(i==j)s1=sl+a[i][j];if(i+j==2)s2=s2+a[i][j];}cout<<s1<<","<<s2<<endl;}则该程序的输出结果为【 】。

若已包括头文件和,运行下列程序段时输出结果是()。int i=0;char s1[10]="ABCD 若已包括头文件<stdio.h>和<string.h>,运行下列程序段时输出结果是( )。 int i=0; char s1[10]="ABCD",s2[10]="EFG"; strcat(s1,S2); while(s2[i++]!='\0') s2[i]=s1[i]; puts(s2);A.ABCB.ABCDEFC.EBCDEFGD.CBD

阅读以下函数: fun(char*s1, char*s2) { int i=0; while(s1[i]==s2[i] s2[i]!='\0') i++; return(s1[i]== s2{i)!=='\0'); } 此函数的功能是( )。A.将s2所指字符串赋给s1B.比较s1和s2所指字符串的大小,若s1比s2的大,函数值为1,否则函数值为0C.比较s1和s2所指字符串是否相等,若相等,函数值为1,否则函数值为0D.比较s1和s2所指字符串的长度,若s1比s2的长,函数值为1,否则函数值为0

有如下程序: include using namespace std; class Sac{ int n; public: Sac():n(4){co 有如下程序:include<iostream>using namespace std;class Sac{int n;public:Sac():n(4){cout<<n;}Sac(int k):n(k){cout<<n;}~Sac(){cont<<n+n;}};int main(){Sac s1,*s2;s2=new Sac(3);delete s2;return 0;}运行时的输出结果是______。

若已包括头文件string.h且已有定义char sl [18],s2={"ABCDE")和int i,现要将字符串”ABCDE”赋给sl,下列语句错误的是( )。A.strcpy(s1,s2)B.strcpy(s1,"ABCDE");C.sl="ABCDE";D.for(i=0;i6;i++)sl[i]=s2[i]

以下程序中函数scmp的功能是返回形参指针s1和s2所指字符串中较小字符串的首地址。 #include<string> char*scmp(char*s1,char*s2) { if(strcmp(s1,s2)<0) return(s1); else retrun(s2); } main() { int i;char string[20],str[3][20]; for(i=0;i<3;i+A.abcdB.abbaC.abcD.abca

阅读以下函数 fun(char *s1,char *s2) { int i=0; while(s1[i]==s2[i]s2[i]!='\0')i++; return(s1[i]=='\0's2[i]=='\0'); } 此函数的功能是A.将s2所指字符串赋给s1B.比较s1和s2所指字符串的大小,若s1比s2的大,函数值为1,否则函数值为0C.比较s1和s2所指字符串是否相等,若相等,函数值为1,否则函数值为0D.比较s1和s2所指字符串的长度,若s1比s2的长,函数值为1,否则函数值为0

有以下程序:include using namespacestd;class sample{private:int n:public:sample 有以下程序: #include <iostream> using namespace std; class sample { private: int n: public: sample () {} sample(int m) { n=m; } sample add(sample s1, sample s2) this->n=s1.n+s2.n; return (*this); } void disp () { cout <<"n="<<n<<end1; } }; int main() sample s1(1)0,s2(5),s3; s3.add(s1,s2); s3.disp(); return 0; } 程序运行后,输出的结果是A.n=10B.n=5C.n=20D.n=15

有以下程序:include using namespace std;int main ( ){ char s1[10],s2[10]; char*p 有以下程序: #include <iostream> using namespace std; int main ( ) { char s1[10],s2[10]; char *p=s1,*q=s2; cin>>s1>>s2; while (*p ! =' \0 ' ) p++; while (*q!='\0') *p++=*q++; *p='\0'; cout<<s1<<end1; return 0; }A.abcd0ghijB.abcd0ghij0C.abcdD.abcdghij

以下程序的输出结果为( )。main( ){ char s1[40]="country",s2[20]="side";int i=0,j=0;while(s1[i]!='\0') i++;while(s2[j]!='\0') s1[i++]=s2[j++];s1[i]=0;printf("%s\n",s1);}A sideB countryC sidetryD countryside

● 下面关于哈夫曼树的叙述中,正确的是 (58) 。(58)A. 哈夫曼树一定是完全二叉树B. 哈夫曼树一定是平衡二叉树C. 哈夫曼树中权值最小的两个结点互为兄弟结点D. 哈夫曼树中左孩子结点小于父结点、右孩子结点大于父结点

阅读以下说明和C代码,填写代码中的空(1)~(6),将解答写入答题纸的对应栏内。【说明】下面的C代码在输入的100个英文单词中找出最小单词和最大单词。约定每个单词是仅由英文字母构成的字符串,且都不超过20个字符。单词的大小按照字典序定义。例如,单词“entry”大于“enter”、“art”小于“ article”、“an”等于“An”。 【C代码】#include #define NUMBER 100int isValid(const char *s1); //若字符串s1仅包含英文字母则返回1,否则返回0char toLower(char ch); //将大写字母转换为小写字母int usr_strcmp(char *s1, char *s2); //比较字符串s1和s2,相等时返回0, //s1大则返回正整数,s1小则返回负整数void usr_strcpy(char *s1,const char *s2); //字符串s2拷贝给s1 int main(){ char word[32]; char maxWord[32]="", minWord[32] =""; int numWord=0; while(num Word0) / /调用usr_strcmp比较单词 usr_strcpy(max Word, word); / /用max Word记下最大单词 else if( (3) ='a' && *s='A' && *s='A' && ch

下面关于哈夫曼树的说法,不正确的是()A、对应于一组权值构造出的哈夫曼树一般不是唯一的B、哈夫曼树具有最小带权路径长度C、哈夫曼树中没有度为1的结点D、哈夫曼树中除了度为1的结点外,还有度为2的结点和叶结点

单选题设有以下定义:char s1[]=0123;char s2[]={'0','1','2','3'};则以下叙述正确的是(  )。A数组s1的长度小于s2的长度B数组s1和s2的长度相同C数组s1的长度大于s2的长度D数组s1和s2完全等价