堆栈这个概念存在于数据结构中,也存在于jvm虚拟机中,在这两个环境中是截然不同的意思。 在数据结构中,堆栈是:堆 和栈两种数据结构,堆是完全二叉树,堆中各元素是有序的。在这个二叉树中所有的双亲节点和孩子...
分类:
其他好文 时间:
2015-09-17 17:49:14
阅读次数:
250
二叉树的基本概念
关于二叉树有一点需要注意:二叉树并不是树的一种特殊形式,二叉树时有序树。
二叉树又有几种特殊的形式:最优二叉树(哈弗曼树)、二叉排序树(二叉查找树)、二叉堆。
哈弗曼树的特点就是带权路径长度最小,因此还叫最优二叉树。另外,哈弗曼树是完全二叉树。
二叉排序树它或者是一棵空树;或者是具有下列性质的二叉树:
1,若左子树不空,则左子树上所有结点的...
分类:
其他好文 时间:
2015-08-20 19:04:30
阅读次数:
130
15. 蛤蟆的数据结构进阶十五排序实现之堆排序
本篇名言:“谁要是游戏人生 ,
他就一事无成 ; 谁不能主宰自己 ,
永远是一个奴隶。--
歌德”
继续来看下堆排序。
欢迎转载,转载请标明出处:
1. 堆排序
堆排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。可以利用数组的特点快速定位指定索...
分类:
编程语言 时间:
2015-08-17 23:42:25
阅读次数:
210
源代码如下
#include
#include
typedef struct Item *node;
struct Item{
int data;
char c;
};
static Item *pq;
static int N ;
void swap(Item &a,Item &b){struct Item t = a;a = b;b = t;}
//自底向上堆化 完全二叉树 ...
分类:
其他好文 时间:
2015-08-17 19:42:34
阅读次数:
93
堆是形如下图的二叉树
堆的最重要的性质,就是儿子的值一定不小于父亲的值。树的节点从上到下,从左到右的顺序紧凑排列。
【插入数据】push
首先在堆的末尾插入数据,然后不断向上提升直到没有大小颠倒
【删除数据】pop
从堆中删除最小的数据
先将堆中最后一个节点的值复制到根节点上,并且删除最后一个节点。然后不断向下交换,直到没有大小颠倒;
在...
分类:
编程语言 时间:
2015-08-05 10:44:48
阅读次数:
143
在上一篇数据结构的博文《数据结构(三):非线性逻辑结构-二叉树》中已经对二叉树的概念、遍历等基本的概念和操作进行了介绍。本篇博文主要介绍几个特殊的二叉树,堆、哈夫曼树、二叉搜索树、平衡二叉搜索树、线索二叉树,它们在解决实际问题中有着非常重要的应用。本文主要从概念和一些基本操作上进行分类和总结。
一、概念总揽
(1) 堆
堆(heap order)是一种特殊的表,如果将它看做是一颗完全二叉树的...
分类:
其他好文 时间:
2015-08-05 01:06:22
阅读次数:
208
堆的定义如下:
n个元素的序列{k0,k1,...,ki,…,k(n-1)}当且仅当满足下关系时,称之为堆。
" ki=k2i,ki>=k2i+1.(i=1,2,…,[n/2])"
若将和此次序列对应的一维数组(即以一维数组作此序列的存储结构)看成是一个完全二叉树,
则完全二叉树中每一个节点的值的都大于或等于任意一个字节的值(如果有的话),称之为大顶堆。
则完全二叉树...
分类:
编程语言 时间:
2015-07-30 09:32:27
阅读次数:
152
堆其实是一个完全二叉树堆分为大顶堆和小顶堆(index从0开始哦)大顶堆:key[i]>=key[2i+1]&&key[i]>=key[2i+2],大堆顶的关键字肯定是所有关键字中最大的小顶堆:key[i]<=key[2i+1]&&key[i]<=key[2i+2],小顶堆的堆顶的关键字是所有关键字...
分类:
编程语言 时间:
2015-07-28 12:52:22
阅读次数:
118
堆的定义堆是一个完全二叉树或者近似的完全二叉树堆的性质
父结点的键值总是大于或等于(小于或等于)任何一个子节点的键值。
每个结点的左子树和右子树都是一个二叉堆(都是最大堆或最小堆)。堆的存储一般都用数组来表示堆,i结点的父结点下标就为(i – 1) / 2。它的左右子结点下标分别为2 * i + 1和2 * i + 2
堆的特点插入元素和弹出堆顶元素的时间复杂度lg(n)
判断序列是不是堆根据性质判...
分类:
其他好文 时间:
2015-07-13 22:28:39
阅读次数:
130
主要内容:1、什么是堆?2、如何建堆3、堆排序4、参考代码一、什么是堆?“堆”是个很有趣的数据结构,是个完全二叉树。“堆”的特性:每个节点的键值一定总是大于(或小于)它的父节点(大于:称为“最大堆”,小于:称为“最小堆”),或者说每个节点总是大于或小于它的子节点。对于最大堆而言,根节点为最大值;对于...
分类:
编程语言 时间:
2015-07-01 13:40:31
阅读次数:
161