【list】 可用于哈夫曼树的一种建树 选数 的链表方法 替代堆

#include<stdio.h>
#include<stdlib.h>
#include<iostream>
using namespace std;
int a[]={1,2,3,4,5,6,7,8,9};
struct node
{
node(int xx):x(xx),next(NULL){}
int x; 
 node *next;
};
void fun()
{
 
}
int main()
{
node *head=new node(0);
node *p=head;
for(int i=0;i<9;i++)
{
node *add=new node(a[i]);
p->next=add;
p=add;
}

 node *q=head;
while(q)
{
cout<<q->x<<" ";
q=q->next;
}
cout<<endl;
  
 p=head->next;
q=p->next;
while(p->next!=NULL)
{

node *add=new node(p->x+q->x);
node  *qq=q; 
 while(add->x > qq->x && qq->next!=NULL)
     {
      qq=qq->next;
     }
  add->next=qq->next;
  qq->next=add;
  cout<<add->x<<endl;
p=q->next;
q=p->next;
}

 q=head;
while(q)
{
cout<<q->x<<" ";
q=q->next;
}
cout<<endl;
  
return 0;
}

[[email protected] 20160731]$ g++ 0.cc
[[email protected] 20160731]$ ./a.out
0 1 2 3 4 5 6 7 8 9                                       //链表的准备
3                                                         //新添加的结点
6
9
12
15
18
27
45 
0 1 2 3 3 4 5 6 6 7 8 9 9 12 15 18 27 45                  //最后的情况
[[email protected] 20160731]$
时间: 2024-11-10 14:08:56

【list】 可用于哈夫曼树的一种建树 选数 的链表方法 替代堆的相关文章

赫夫曼树的构建、编码、译码解析

当你開始看这篇博文的时候.我相信你对树及二叉树的基本概念已有所了解.我在这里就不再赘述. 我们主要对赫 夫曼树的特点.构建.编码.译码做一个具体的介绍,并附有代码,全部函数代码都通过了測试.我不保证全部代码是最优的(毕竟是我一个人苦思冥想出来的,我相信在大家的集思广益之下还有优化的空间),但我保证全部代码是正确的. 一.赫夫曼树的特点 赫夫曼树又称作最优二叉树,是一类带权路径长度最短的树. 首先给出路径和路径长度的概念.从树中一个节点到 还有一个节点之间的分支构成这两个节点之间的路径.路径上的分

哈夫曼树学习笔记

既然我们要学习赫夫曼树,那么我们首先就要知道什么叫赫夫曼树. 那么什么叫赫夫曼树呢? 一.什么叫赫夫曼树? 书上说:“赫夫曼(Huffman)树又称最优树,是一类带权路径长度最短的树,但是我们仅学习最优二叉树.” 看到这个还是不明白什么意思,因此在学习之前我们要结合这个图了解几个基本概念. 路    径:由一结点到另一结点间的分支所构成.如:a->b a->b->e 路径长度:路径上的分支数目,如:a→e的路径长度=2  a->c的路径长度=1 树的路径长度:从树根到每一结点的路径

哈夫曼树(Huffman)

在数据结构书中,讲解树内容的时候,都会介绍哈夫曼树(Huffman)和哈夫曼编码(哈夫曼树的一种应用).关于哈夫曼树的定义,在这里就不讨论了,接下来贴出LZ实现哈夫曼树的一种方案. 构建哈夫曼树: 1.首先将所有的节点构成独立的二叉树,这些二叉树构成的一个森林,将这些二叉树构建成一个最小堆: 2.选择最小堆中两个最小树,构建成一颗新的树,将新树插入到最小堆中,删除被选出的两颗最小树: 3.如果最小堆节点数大于1,重复2. 4.最小堆中最后一个节点,这棵树就是哈夫曼树. 本文中二叉树的实现类似二叉

poj 3253 哈夫曼树

背景 :开始自己想了一个贪心思路,结果是错的.其实这个题是哈夫曼树的思想,贪心只是哈夫曼树的证明和构造思想. 哈夫曼树:一种带权最短二叉树(也就是所有叶子节点的权重乘以深度的和最小),在实际中是用来做最高效信息编码的.信息的频率就是权重,一个频率很低的数,它的编码就应该长,树的深度就应该大.实际信息编码会根据信息字符的频率来构建一个哈夫曼树,已达到最高效. 本题和哈夫曼树是一个很好的契合,解决本题的贪心思想也是构建哈夫曼树的方法,以最小的两个元素为最后砍开的段,然后把这两个元素加起来,就可以构成

详细了解哈夫曼树和背包问题

写在前面 最近在疯狂复习数据结构和算法,虽然看完了一部完整的视频.但是转眼看看自己手中的<剑指Offer>里面还是不是很清楚...而且最近也突然觉得自己知识和别人比起来就是一个渣渣.各种被人家吊打... 这两个算法一个(哈夫曼树)是看最近视频动手实践的,一个(背包问题)是前段时间一个面试里面的题目,当时不知道这是一个系类的问题,昨天和大神聊完天之后才明白.所以乘着短暂的热情还在就记录下来先从哈夫曼树开始!! 1.哈夫曼树(实现基本的编码解码) 简单定义: 给定n个权值作为n个叶子结点,构造一棵

数据结构:哈夫曼树和哈夫曼编码

哈夫曼树 哈夫曼树是一种最优二叉树,其定义是:给定n个权值作为n个叶子节点,构造一棵二叉树,若树的带权路径长度达到最小,这样的树就达到最优二叉树,也就是哈夫曼树,示例图如下: 基本概念 深入学习哈夫曼树前,先了解一下基本概念,并以上面的哈夫曼树图为例 路径:树中一个结点到另一个结点之间的分支序列构成两个结点间的路径. 路径长度:路径中分支的数目,从根结点到第L层结点的路径长度为L-1.例如100和80的路径长度为1,50和30的路径长度为2. 结点的权:树中结点的数值,例如100,50那些. 结

数据--第38课 - 霍夫曼树

第38课 - 霍夫曼树 1. 最初的解决方案 对于文本“BADCADFEED”的传输而言,因为重复出现的只有“ABCDEF”这六个字符,因此可以用下面的方式编码: A B C D E F 000 001 010 011 100 101 接收方可以根据每3个bit进行一次字符解码的方式还原文本信息. 2. 存在的问题 这样的编码需要30个bit才能表示10个字符.容易出错. 3. 改进 避免每个字符都占用相同的bit位. A B C D E F 01 1001 101 00 11 1000 25个

赫夫曼树编码

在一般的数据结构的书中,树的那章后面,著者一般都会介绍一下哈夫曼(HUFFMAN) 树和哈夫曼编码.哈夫曼编码是哈夫曼树的一个应用.哈夫曼编码应用广泛,如 JPEG中就应用了哈夫曼编码. 首先介绍什么是哈夫曼树.哈夫曼树又称最优二叉树, 是一种带权路径长度最短的二叉树.所谓树的带权路径长度,就是树中所有的叶结点 的权值乘上其到根结点的 路径长度(若根结点为0层,叶结点到根结点的路径长度 为叶结点的层数).树的带权路径长度记为WPL= (W1*L1+W2*L2+W3*L3+...+Wn*Ln) ,

数据结构(三):非线性逻辑结构-特殊的二叉树结构:堆、哈夫曼树、二叉搜索树、平衡二叉搜索树、红黑树、线索二叉树

在上一篇数据结构的博文<数据结构(三):非线性逻辑结构-二叉树>中已经对二叉树的概念.遍历等基本的概念和操作进行了介绍.本篇博文主要介绍几个特殊的二叉树,堆.哈夫曼树.二叉搜索树.平衡二叉搜索树.红黑树.线索二叉树,它们在解决实际问题中有着非常重要的应用.本文主要从概念和一些基本操作上进行分类和总结. 一.概念总揽 (1) 堆 堆(heap order)是一种特殊的表,如果将它看做是一颗完全二叉树的层次序列,那么它具有如下的性质:每个节点的值都不大于其孩子的值,或每个节点的值都不小于其孩子的值