重要提示:请勿将账号共享给其他人使用,违者账号将被封禁!
查看《购买须知》>>>
首页 > 计算机类考试> 软考(中级)> 软件设计师
网友您好,请在下方输入框内输入要搜索的题目:
搜题
拍照、语音搜题,请扫码下载APP
扫一扫 下载APP
题目内容 (请给出正确答案)
[主观题]

阅读以下预备知识、函数说明和C代码,将应填入(n)处的字句写在对应栏内。 [预备知识] ①对给定的字符

阅读以下预备知识、函数说明和C代码,将应填入(n)处的字句写在对应栏内。

[预备知识]

①对给定的字符集合及相应的权值,采用哈夫曼算法构造最优二叉树,并用结构数组存储最优二叉树。例如,给定字符集合{a,b,c,d}及其权值2、7、4、5,可构造如图3所示的最优二叉树和相应的结构数组Ht(数组元素Ht[0]不用)(见表5)。

阅读以下预备知识、函数说明和C代码,将应填入(n)处的字句写在对应栏内。 [预备知识] ①对给定的字

结构数组HT的类型定义如下:

define MAXLEAFNUM 20

struct node {

char ch; / * 当前结点表示的字符,对于非叶子结点,此域不用*/

int weight; / * 当前结点的权值*/

int parent; / * 当前结点的父结点的下标,为0时表示无父结点*/

int Ichild, rchild

/ *当前结点的左、右孩子结点的下标,为0时表示无对应的孩子结点* /

} Ht[2 * MAXLEAFNUM];

②用'0'或'1'标识最优二叉树中分支的规则是:从一个结点进入其左(右)孩子结点,就用'0'('1')标识该分支(示例如图3所示)。

③若用上述规则标识最优二叉树的每条分支后,从根结点开始到叶子结点为止,按经过分支的次序,将相应标识依次排列,可得到由'0'、'1'组成的一个序列,称此序列为该叶子结点的前缀编码。如图3所示的叶子结点a、b、c、d的前缀编码分别是110、0、111、10。

【函数5.1说明】

函数void LeafCode (int root, int n)的功能是:采用非递归方法,遍历最优二叉树的全部叶子结点,为所有的叶子结点构造前缀编码。其中形参root为最优二叉树的根结点下标;形参 n为叶子结点个数。

在构造过程中,将Ht[p]. weight域用作被遍历结点的遍历状态标志。

【函数5.1】

char * * Hc;

void LeafCode (int root, int n)

{/*为最优二叉树中的n个叶子结点构造前缀编码,root是树的根结点下标* /

int i,p = root,cdlen =0;char code[20];

Hc=(char* * )malloc(.(n +]) *sizeof(char* )); /* 申请字符指针数组* /

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

Ht[ i]. weight =0;/* 遍历最优二叉树时用作被遍历结点的状态标志*/

while(p) {/*以非递归方法遍历最优二叉树,求树中每个叶子结点的编码*/

if(Ht[p], weight ==0) { /*向左*/

Ht[ p]. weight =1

if (Ht[p],lchild !=0) { p=Ht[P].lchild; code[cdlen++] ='0';]

else if (Ht[p]. rchild ==0) {/* 若是叶子结点,则保存其前缀编码*/

Hc[p] = (char * ) malloc((cdlen + 1 ) * sizeof (char) );

(1); strcpy(He[ p] ,code);

}

}

else if (Ht[ pi, weight == 1) { /*向右*/

Ht[p]. weight =2;

if(Ht[p].rchild !=0) {p=Ht[p].rchild; code[cdlen++] ='1';}

}

else{/* Ht[p]. weight ==2,回退*/

Ht[p]. weight =0;

p=(2);(3); /*退回父结点*/

}

}/* while结束* /

}

【函数5.2说明】

函数void Decode(char*buff, int root)的功能是:将前缀编码序列翻译成叶子结点的字符序列并输出。其中形参root为最优二叉树的根结点下标;形参buff指向前缀编码序列。

【函数5.2】

void Decode(char * buff, int root)

Iint pre =root,p;

while (* buff! = '\0') {

p = root;

while (p!=0){/*存在下标为p的结点*/

pre=p;

if((4))p=Ht[p].lchild; /*进入左子树*/

else p = Ht[p]. rchild; / *进入右子树*./

buff ++; / * 指向前缀编码序列的下一个字符* /

}

(5);

printf("%c", Ht [ pre]. ch);

}

}

答案
查看答案
更多“阅读以下预备知识、函数说明和C代码,将应填入(n)处的字句写在对应栏内。 [预备知识] ①对给定的字符”相关的问题

第1题

● 若用n个权值构造一棵最优二叉树 (哈夫曼树), 则该二叉树的结点总数为 (59) 。

点击查看答案

第2题

关于哈夫曼树、最优二叉树、哈夫曼算法,有以下说法:①最优二叉树的形态不唯一,但是其WPL值是唯一确
关于哈夫曼树、最优二叉树、哈夫曼算法,有以下说法:

①最优二叉树的形态不唯一,但是其WPL值是唯一确定的。

②哈夫曼树一定是最优二叉树,但最优二叉树不一定由哈夫曼算法来构造。

则______。

A.①正确②错误

B.①错误②正确

C.都对

D.都错

点击查看答案

第3题

下列关于数据结构的叙述中,正确的是______。

A.数组是同类型值的集合

B.递归算法的程序结构比迭代算法的程序结构更为精练

C.树是一种线性结构

D.用一维数组存储二叉树,总是以先序遍历的顺序存储各结点

点击查看答案

第4题

对N(≥2)个权值均不相同的字符构造哈夫曼树,则树中任一非叶结点的权值一定不小于下一层任一结点的权值。()
点击查看答案

第5题

二叉树的动态二叉链表结构中的每个结点有三个字段:dam,lchild,rchild。其中指针lchild和rchild的
类型为bike。静态二叉链表是用数组作为存储空间,每个数组元素存储二叉树的一个结点,也有三个字段:data,lchild,rchild。所不同的是,lchild和rdhild为integer型,分别用于存储左右孩子的下标,如果没有左右孩子,则相应的值为0。例如,下面左图所示的二又树的静态二叉链表如右图所示。

编写算法由二叉树的动态二叉链表构造出相应的静态二又链表a[1..

点击查看答案

第6题

一棵二叉树如下图所示,若采用顺序存储结构,即用一维数组元素存储该二叉树中的结点(根结点的下标
一棵二叉树如下图所示,若采用顺序存储结构,即用一维数组元素存储该二叉树中的结点(根结点的下标为1,若某结点的下标为i,则其左孩子位于下标2i处、右孩子位于下标2i+1处),则该数组的大小至少为(37);若采用二叉链表存储该二叉树(各个结点包括结点的数据、左孩子指针、右孩子指针),则该链表中空指针的数目为(38)。

A.6

B.10

C.12

D.15

点击查看答案

第7题

给定权值(7,18,3,32,5,26,12,8)构造相应的哈夫曼树。

给定权值(7,18,3,32,5,26,12,8)构造相应的哈夫曼树。

点击查看答案

第8题

设有如下定义:char *aa[2]={"abcd","ABCD"};则以下说法中正确的是()。A.aa数组成元素的值分别是
设有如下定义:char *aa[2]={"abcd","ABCD"};则以下说法中正确的是()。

A.aa数组成元素的值分别是"abcd"和ABCD"

B.aa是指针变量,它指向含有两个数组元素的字符型一维数组

C.aa数组的两个元素分别存放的是含有4个字符的一维字符数组的首地址

D.aa数组的两个元素中各自存放了字符’a’和’A’的地址

点击查看答案

第9题

以下关于哈夫曼树的叙述,正确的是(60)。A.哈夫曼树一定是满二叉树,其每层结点数都达到最大值
以下关于哈夫曼树的叙述,正确的是(60)。

A.哈夫曼树一定是满二叉树,其每层结点数都达到最大值

B.哈夫曼树一定是平衡二叉树,其每个结点左右子树的高度差为-1、0或1

C.哈夫曼树中左孩子结点的权值小于父节点、右孩子节点的权值大于父节点

D.哈夫曼树中叶子节点的权值越小则距离树根越远、叶子结点的权值越大则距离树根越近

点击查看答案
下载APP
关注公众号
TOP
重置密码
账号:
旧密码:
新密码:
确认密码:
确认修改
购买搜题卡查看答案 购买前请仔细阅读《购买须知》
请选择支付方式
  • 微信支付
  • 支付宝支付
点击支付即表示同意并接受了《服务协议》《购买须知》
立即支付 系统将自动为您注册账号
已付款,但不能查看答案,请点这里登录即可>>>
请使用微信扫码支付(元)

订单号:

遇到问题请联系在线客服

请不要关闭本页面,支付完成后请点击【支付完成】按钮
遇到问题请联系在线客服
恭喜您,购买搜题卡成功 系统为您生成的账号密码如下:
重要提示:请勿将账号共享给其他人使用,违者账号将被封禁。
发送账号到微信 保存账号查看答案
怕账号密码记不住?建议关注微信公众号绑定微信,开通微信扫码登录功能
请用微信扫码测试
优题宝