文档介绍:1数据结构课程设计哈夫曼树与哈夫曼编码学号:xxx姓名:xxx专业:xxx【1】任务详细:,统计各字符出现的频度,,翻译并输出与之对应的文体,若最后的代码子序列不能译为文本,则输出相关信息【2】任务要求:。【3】基本思想:在栈的结构体基础上增加哈夫曼树的几个指针,像这样:typedefstructnode{intdata;intweight;structnode*next,*lchild,*rchild,*parent;}node,*pnode;每一个结点新增了几个指针!借助新增的几个指针和原有的栈,通过切换遍历方式,选择性的使用指针来构建栈和哈夫曼树。当处理栈时,使用传统的next指针,当构建哈夫曼树时使用新增的几个指针。【4】基本函数(关键函数为蓝色注明)voidinit_stack(pstack);//初始化栈voidpush_stack(pstack,char);//压栈voidpop_stack(pstack);//出栈voidtraverse_stack(pstack);//普通遍历voidtraverse_plus(pstack);//去掉重复的字符voidorder_stack(pstack);//按照权值大小排序,准备构建哈夫曼树voidcreate_HTtree(pstack);//构建哈夫曼树voidget_HTtreecode(pstack);//获取哈夫曼编码voiddecode(pstack);//解密哈弗慢编码【5】关键函数解读inttraverse_plus(pstackps)用户输入用于构建哈夫曼树的原数据是一串乱码,构建哈夫曼树之前需要处理删除重复的并且排好序便于构建哈夫曼树首先建立两个指针,外指针循环用于统计一共有多少个不同的字符,内指针用于删除重复的字符并且得到每个字符出现的频度然后赋值给每一个结点的weight{pnodep1=ps->top;pnodep2=p1->next;intsum=0;//用于统计一共有多少个不同的字符,创建哈夫曼树的重要步骤;while(p1){while(p2){if(p1->data==p2->data){p1->weight=p1->weight+1;//出现一次,权值加一pnodep3=p2;//将重复出现的删除p1->next=p2->next;p2=p2->next;free(p3);}else{p2=p2->next;//字符不同仅指针后移}printf("%c出现了%d次\n",p1->data,p1->weight);}sum=sum+1;p1=p1->next;}printf("一共有%d个字符",sum);//这里得到了不同的字符的数量}voidorder_stack(pstackps)用于给结点按照从小到大排序方便建立哈夫曼树,方法用的是冒泡法,并且输出排序好的每个不同的字符的频度{pnodeq1=ps->top;for(inti=0;i<sum;i++){for(intj=0;j<sum-1;j++){if(q1->weight>q