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){
//待补全,读入字符串,以‘$'为结束符,根据每个字符出现频率为权值,构造森林。
}
#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;}}