C语言实现哈夫曼编码
程序功能:提供一段字符串,输出哈夫曼编码压缩后的总比特数(仅计算小写字母和空格)
#include<stdio.h>
#include<malloc.h>
//定义二叉树结构
typedef struct Node
{
int data;
struct Node * LChild;
struct Node * RChild;
}BiTNode, *BiTree;
//定义栈结构,此处的栈用来储存二叉树节点
typedef struct{
BiTree elem[30];
int top;
}stack;
//操作栈的方法
void initStack(stack *s)
{
s->top=-1;
}
void Push(stack *s,BiTree a)
{
s->top++;
s->elem[s->top]=a;
}
BiTree Pop(stack *s)
{
s->top--;
return s->elem[s->top+1];
}
//把数变成节点并入栈,便于后续操作
stack forest(int *arr,int length)//入栈跟数组顺序是反的
{
stack s;
initStack(&s);
for(int i=0;i<=length-1;i++)
{
//写sizeof(*BiTNode))或者sizeof(BiTree)会卡死,猜想申请的内存不够,*BiTNode比BiTNode小
//C语言这种访问底层内存的程序太不好把握了
BiTree tree=(BiTree)malloc(sizeof(BiTNode));
tree->data=arr[i];
tree->LChild=tree->RChild=NULL;
Push(&s,tree);
}
return s;
}
void sortStack(stack *s)//让栈中顶部元素小底部元素大
{
BiTree temp;
for(int i=0;i<=s->top-1;i++)
{
for(int j=0;j<=s->top-1;j++)
{
if(s->elem[j]->data<s->elem[j+1]->data)
{
temp=s->elem[j];
s->