abbccc$b
b:2
本题目为第一步,读入待编码字符串,建造一个森林,请补全下列代码。#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
typedef char elemtype;
//带权值的二叉树
typedef struct BiTNode{
elemtype data;
int weight; //权重
struct BiTNode *lchild, *rchild; /*左右孩子指针*/
}BiTNode,*BiTree;
//用单链表表示森林
typedef struct linkNode{
BiTree tree;
struct linkNode *next;
}LinkNode, *Forest;
//创建森林
int createForest(Forest forest){
//待补全,读入字符串,以'$'为结束符,根据每个字符出现频率为权值,构造森林。并返回森林中树的个数
}
int main()
{Forest forest = malloc(sizeof(linkNode));
//森林的单链表包含一个头结点,头结点符号'$'
forest->tree = malloc(sizeof(BiTNode));
forest->tree->data = '$';
forest->next = NULL;createForest(forest);
char ch1;
scanf("%c", &ch1);
linkNode * p = forest->next;
while (p != NULL)
{
if (p->tree->data == ch1)
{
printf("%c:%d\n", p->tree->data, p->tree->weight);
}
p = p->next;
}
}
输入
abbccc$b
输出
b:2
样例输入 Copy
hello world$l
样例输出 Copy
l:3
提示
只需要补全并提交以下代码:
//创建森林
int createForest(Forest forest){
//待补全,读入字符串,以'$'为结束符,根据每个字符出现频率为权值,构造森林。
}
cpp
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
typedef char elemtype;
//带权值的二叉树
typedef struct BiTNode {
elemtype data;
int weight; //权重
struct BiTNode* lchild, * rchild; /*左右孩子指针*/
}BiTNode, * BiTree;
//用单链表表示森林
typedef struct linkNode {
BiTree tree;
struct linkNode* next;
}LinkNode, * Forest;
//创建森林
int createForest(Forest forest)
{
//待补全,读入字符串,以'$'为结束符,根据每个字符出现频率为权值,构造森林。并返回森林中树的个数
int count = 0; // 森林中树的个数
BiTree tree;
LinkNode* p = forest;
char ch;
char list[128] = {0};
scanf("%c", &ch);
while (ch != '$') {
scanf("%c", &ch);
list[ch] += 1;
}
for (int i = 0; i < 128; i++) {
if (!list[i])
continue;
tree = (BiTNode*)malloc(sizeof(BiTNode));
tree->data = i;
tree->weight = list[i];
tree->lchild = NULL;
tree->rchild = NULL;
LinkNode* newNode = (LinkNode*)malloc(sizeof(LinkNode));
newNode->tree = tree;
newNode->next = NULL;
p->next = newNode;
p = p->next;
count++;
}
return count;
}
int main()
{
Forest forest = (linkNode*)malloc(sizeof(linkNode));
//森林的单链表包含一个头结点,头结点符号'$'
forest->tree = (BiTNode*)malloc(sizeof(BiTNode));
forest->tree->data = '$';
forest->next = NULL;
createForest(forest);
char ch1;
scanf("%c", &ch1);
linkNode* p = forest->next;
while (p != NULL)
{
if (p->tree->data == ch1)
{
printf("%c:%d\n", p->tree->data, p->tree->weight);
}
p = p->next;
}
}