求节点的哈夫曼的带权路径长度
【问题描述】
已知输入一串正整数,正整数之间用空格键分开,请建立一个哈夫曼树,以输入的数字为叶节点,求这棵哈夫曼树的带权路径长度。
【输入形式】
首先输入正整数的个数,然后接下来为接下来的正整数,正整数个数不超过10个
【输出形式】
输出相应的权值
【样例输入】
5 4 5 6 7 8
【样例输出】
69
#include <stdio.h>
#include <stdlib.h>/***@ziyif*/typedef int QElemType;
typedef struct Qnode{QElemType data;struct Qnode *next;
}QNode,*QueuePtr;typedef struct{QueuePtr front;//队头指针QueuePtr rear;//队尾指针
}LinkQueue;void InitQueue(LinkQueue *Q);
void EnQueue(LinkQueue *Q,QElemType e);
QElemType DeQueue(LinkQueue *Q);
int GetLength(LinkQueue *Q);int main()
{LinkQueue Q;InitQueue(&Q);int N;scanf("%d",&N);int a[N];int length;int i,j,k;int temp;for(i=0;i<N;i++){scanf("%d",&a[i]);}//sortfor(i=0;i<N-1;i++){k=i;for(j=i+1;j<N;j++){if(a[j]<a[k]){k=j;}}if(k!=i){temp=a[k];a[k]=a[i];a[i]=temp;}}//push Queuefor(i=0;i<N;i++){EnQueue(&Q,a[i]);}length=GetLength(&Q);int sum=0;int num=0;while(length>1){int a,b;a=DeQueue(&Q);//printf("a=%d\n",a);length=GetLength(&Q);//printf("%d\n",length);b=DeQueue(&Q);//printf("b=%d\n",b);length=GetLength(&Q);//printf("%d\n",length);num=a+b;sum+=num;//printf("sum=%d\n",sum);//printf("num=%d\n",num);EnQueue(&Q,num);length=GetLength(&Q);}printf("%d",sum);return 0;
}void InitQueue(LinkQueue *Q){Q->front=Q->rear=(QueuePtr)malloc(sizeof(QNode));if(!Q->front){printf("OVERFLOW");exit(0);}Q->front->next=NULL;
}void EnQueue(LinkQueue *Q,QElemType e){QNode *p=(QueuePtr)malloc(sizeof(QNode));if(!p){printf("OVERFLOW");exit(0);}p->data=e;p->next=NULL;Q->rear->next=p;Q->rear=p;}QElemType DeQueue(LinkQueue *Q){if(Q->front==Q->rear){printf("ERROR");exit(0);}QElemType e;QNode *p=Q->front->next;e=p->data;Q->front->next=p->next;if(Q->rear==p){Q->rear=Q->front;}free(p);return e;
}int GetLength(LinkQueue *Q){int length=0;QNode *p;p=Q->front;while(p->next){p=p->next;length++;}return length;
}
求节点的哈夫曼的带权路径长度相关推荐
- 哈夫曼树带权路径长度c语言,【哈夫曼树】求结点的哈夫曼的带权路径长度
本文用C++采用顺序存储实现求哈夫曼树(即最小生成树)的带权路径长度 努力 下面来了解一下哈夫曼树的构造以及如何求带权路径长度: 哈夫曼树为带权路径长度最小的树 哈夫曼树 哈夫曼树的顺序存储 [问题描 ...
- 带权路径长度wpl值_哈夫曼树带权路径长度怎么计算
哈夫曼树的带权路径长度是什么? 1.树的路径长度 树的路径长度是从树根到树中每一结点的路径长度之和.在结点数目相同的二叉树中,完全二叉树的路径长度最短. 2.树的带权路径长度(Weighted Pat ...
- 哈夫曼树带权路径长度
一. 长什么样? 左边是普通树,右边是哈夫曼树 图a: WPL=5*2+7*2+2*2+13*2=54 图b: WPL=5*3+2*3+7*2+13*1=48 可见,图b的带权路径长度较小,我们可以证 ...
- 哈夫曼树带权路径长度求解(C语言实现)
题目描述: 哈夫曼树,第一行输入一个数n,表示叶结点的个数. 需要用这些叶结点生成哈夫曼树,根据哈夫曼树的概念,这些结点有权值,即weight,题目需要输出哈夫曼树的带权路径长度(WPL). 输入格式 ...
- 【数据结构-N】哈夫曼树带权路径计算
那个闪闪发光的人 会在某一天的雨后,不经意地出现在你的迷茫路口. 目录: 哈夫曼树的构建 带权路径长度计算 >>构建 哈夫曼树,又称最优二叉树,是一类带权路径长度最短的树. 构建哈夫曼树的 ...
- 给定结点权值,求哈夫曼树的带权路径长度和
1.哈夫曼树概念 一棵树中,从任意一个结点到达另一个结点的通路叫做路径,该路径包含的边的个数称为路径长度,每个结点带有的表示某种意义的值成为权值.从根结点到叶子结点的路径长度乘以叶子节点权值,得到的值 ...
- 创建哈夫曼树并求带权路径长度
创建哈夫曼树并求带权路径长度 [问题描述]根据给定的权重,构造哈夫曼树,输出其带权路径长度. [输入形式]输入权重,空格作为分隔,回车结束,权重个数小于10. [输出形式]哈夫曼树的带权路径长度. [ ...
- 构建哈夫曼树及求它的带权路径长度
给定N个权值作为N个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree).要构成哈夫曼树,值比较大的叶子节点高度越低越好. ( ...
- 每天一道数据结构练习题(给定权值求出哈夫曼树的带权路径长度)
名词解释: 带权路径长度也就是树的带权路径长度,树的路径长度是从树根到树中每一结点的路径长度之和.在结点数目相同的二叉树中,完全二叉树的路径长度最短. 结点的权:在一些应用中,赋予树中结点的一个有某种 ...
最新文章
- python中get和set使用_Python对象属性的set和get方法
- 【无标题】ubuntu20.04 开机引导后黑屏 光标闪现 无法进入图形桌面的解决方案_Denis.Zzzzzzzz?的博客-CSDN博客_ubuntu20黑屏光标闪烁
- 沈向洋出任董事长李笛任CEO,「微软」小冰变身「中国」小冰
- sql 判断记录是否存在_判断数据库是否存在该条记录,count(0) or limit
- 数据结构Java06【赫夫曼树、概述、原理分析、代码实现(数据压缩、创建编码表、解码、压缩文件、解压文件)】
- es算法matlab编程,matlab练习程序(演化策略ES)
- 从真实项目中抠出来的设计模式——第二篇:过滤器模式
- GAN 优化 Yelp 形象图片广告
- 迭代器,生成器,三元表达式,列表解析式
- 如何减小Exe, DLL 的大小
- Win10系统升级,1804->21H2
- 国内那些靠谱些的招聘网站
- 凌晨3点--- 给我一支烟
- Spring AOP编程官方文档解读之操作Advised对象
- python 数据库框架peewee_python peewee模块使用
- 乐山计算机学校有几个,乐山计算机学校全国排名是多少,好不好?
- java开发报错怎么处理_Java开发中常见报错及解决办法
- ECIF OCRM ACRM关系
- Docker镜像压缩与优化
- Android手机QQ的UI自动化实践,死磕原理
热门文章
- 专场论坛 + MogDB 获奖丨云和恩墨亮相鲲鹏开发者峰会2022,共论数字化转型和数据库替代升级...
- oracle listagg支持,PostgreSQL行列转换(兼容oracle listagg)
- web测试基础知识(一)web基础
- #ifdef与#endif的作用及用法
- clientHeight和offsetHeight
- G. Count the Trains(思维set + 二分)
- 夜神模拟器(安卓9版本)中脱壳
- Django实现迷你淘宝(四) --- 基于Bootstrap的商品页面设计与美化
- 环境变量Path和classpath的作用是什么?
- PowerMILL Robot 2019机器人模块软件