什么是堆?

VC编程中有下面一句话:
对话框对象是用new操作符在堆上创建的,而不是以变量的形式创建。

哪位大侠能解释一下什么是堆?什么又是栈呢?

堆通常是一个可以被看做一棵树的数组对象。堆总是满足下列性质:

1 堆中某个节点的值总是不大于或不小于其父节点的值;

2 堆总是一棵完全二叉树。

将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。常见的堆有二叉堆、斐波那契堆等。

扩展资料

堆的实现通过构造二叉堆(binary heap),实为二叉树的一种;由于其应用的普遍性,当不加限定时,均指该数据结构的这种实现。这种数据结构具有以下性质。任意节点小于(或大于)它的所有后裔,最小元(或最大元)在堆的根上(堆序性)。

堆总是一棵完全树。即除了最底层,其他层的节点都被元素填满,且最底层尽可能地从左到右填入。

堆栈的基本特点:先入后出,后入先出。除头尾节点之外。

温馨提示:内容为网友见解,仅供参考
第1个回答  2018-11-27

堆是计算机科学中的一种特别的树状数据结构,堆总是一棵完全二叉树,它总是满足下列性质:

堆中某个节点的值总是不大于或不小于其父节点的值;

堆总是一棵完全二叉树。

堆的特征就是:给定堆中任意节点P和C,若P是C的母节点,那么P的值会小于等于(或大于等于) C 的值”。若母节点的值恒小于等于子节点的值,此堆称为最小堆;反之,若母节点的值恒大于等于子节点的值,此堆称为最大堆。

栈又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;

扩展资料:

堆是在程序运行时,而不是在程序编译时,申请某个大小的内存空间。即动态分配内存,对其访问和对一般内存的访问没有区别。它也是在应用程序运行的时候请求操作系统分配给自己内存,一般是申请/给予的过程。

堆的定义如下:n个元素的序列{k1,k2,ki,…,kn}当且仅当满足下关系时,称之为堆。

(ki <= k2i,ki <= k2i+1)或者(ki >= k2i,ki >= k2i+1), (i = 1,2,3,4...n/2)

若将和此次序列对应的一维数组(即以一维数组作此序列的存储结构)看成是一个完全二叉树,则堆的含义表明,完全二叉树中所有非终端结点的值均不大于(或不小于)其左、右孩子结点的值。由此,若序列{k1,k2,…,kn}是堆,则堆顶元素(或完全二叉树的根)必为序列中n个元素的最小值(或最大值)。

栈是限定仅在表头进行插入和删除操作的线性表。要搞清楚这个概念,首先要明白”栈“原来的意思,如此才能把握本质。"栈“者,存储货物或供旅客住宿的地方,可引申为仓库、中转站,所以引入到计算机领域里,就是指数据暂时存储的地方,所以才有进栈、出栈的说法。

参考资料:百度百科-堆

参考资料:百度百科-栈

本回答被网友采纳
第2个回答  2018-11-24

堆通常是一个可以被看做一棵树的数组对象。堆总是满足下列性质:

1 堆中某个节点的值总是不大于或不小于其父节点的值;

2 堆总是一棵完全二叉树。

将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。常见的堆有二叉堆、斐波那契堆等。

②堆是在程序运行时,而不是在程序编译时,申请某个大小的内存空间。即动态分配内存,对其访问和对一般内存的访问没有区别。

③堆是应用程序在运行的时候请求操作系统分配给自己内存,一般是申请/给予的过程。

④堆是指程序运行时申请的动态内存,而栈只是指一种使用堆的方法(即先进后出)。

栈又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。

栈就是一个桶,后放进去的先拿出来,它下面本来有的东西要等它出来之后才能出来(先进后出);栈是操作系统在建立某个进程时或者线程(在支持多线程的操作系统中是线程)为这个线程建立的存储区域,该区域具有FIFO的特性,在编译的时候可以指定需要的Stack的大小。

将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。常见的堆有二叉堆、斐波那契堆等。

堆的定义如下:n个元素的序列{k1,k2,ki,…,kn}当且仅当满足下关系时,称之为堆。

(ki <= k2i,ki <= k2i+1)或者(ki >= k2i,ki >= k2i+1), (i = 1,2,3,4...n/2)

若将和此次序列对应的一维数组(即以一维数组作此序列的存储结构)看成是一个完全二叉树,则堆的含义表明,完全二叉树中所有非终端结点的值均不大于(或不小于)其左、右孩子结点的值。由此,若序列{k1,k2,…,kn}是堆,则堆顶元素(或完全二叉树的根)必为序列中n个元素的最小值(或最大值)。

扩展资料:

不必将值一个个地插入堆中,通过交换形成堆。假设根的左、右子树都已是堆,并且根的元素名为R。这种情况下,有两种可能:

(1) R的值小于或等于其两个子女,此时堆已完成;

(2) R的值大于其某一个或全部两个子女的值,此时R应与两个子女中值较小的一个交换,结果得到一个堆,除非R仍然大于其新子女的一个或全部的两个。这种情况下,我们只需简单地继续这种将R“拉下来”的过程,直至到达某一个层使它小于它的子女,或者它成了叶结点。

栈在程序的运行中有着举足轻重的作用。最重要的是栈保存了一个函数调用时所需要的维护信息,这常常称之为堆栈帧或者活动记录。堆栈帧一般包含如下几方面的信息:

1.函数的返回地址和参数

2. 临时变量:包括函数的非静态局部变量以及编译器自动生成的其他临时变量。

参考资料:百度百科——栈

参考资料:百度百科——堆

本回答被网友采纳
第3个回答  2018-11-20

1、堆是计算机科学中的一种特别的树状数据结构。

若是满足以下特性,即可称为堆:“给定堆中任意节点 P 和 C,若 P 是 C 的母节点,那么 P 的值会小于等于(或大于等于) C 的值”。若母节点的值恒小于等于子节点的值,此堆称为最小堆;反之,若母节点的值恒大于等于子节点的值,此堆称为最大堆。在堆中最顶端的那一个节点,称作根节点,根节点本身没有母节点。

2、栈是计算机科学中一种特殊的串列形式的抽象数据类型,其特殊之处在于只能允许在链表或数组的一端进行加入数据(英语:push)和输出数据(英语:pop)的运算。另外堆栈也可以用一维数组或链表的形式来完成。堆栈的另外一个相对的操作方式称为队列。

由于堆栈数据结构只允许在一端进行操作,因而按照后进先出的原理运作。

扩展资料:

堆的实现通过构造二叉堆(binary heap),实为二叉树的一种;由于其应用的普遍性,当不加限定时,均指该数据结构的这种实现。这种数据结构具有以下性质。任意节点小于(或大于)它的所有后裔,最小元(或最大元)在堆的根上(堆序性)。

堆总是一棵完全树。即除了最底层,其他层的节点都被元素填满,且最底层尽可能地从左到右填入。

堆栈的基本特点:先入后出,后入先出。除头尾节点之外,每个元素有一个前驱,一个后继。



本回答被网友采纳
第4个回答  2018-11-27

1、堆(英语:heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树的数组对象。堆总是满足下列性质:堆中某个节点的值总是不大于或不小于其父节点的值;堆总是一棵完全二叉树。

2、栈是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。

向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。

扩展资料:

堆和栈都是一种数据项按序排列的数据结构。

栈是一种具有后进先出性质的数据结构,也就是说后存放的先取,先存放的后取。这就如同我们要取出放在箱子里面底下的东西(放入的比较早的物体),我们首先要移开压在它上面的物体(放入的比较晚的物体)。

而堆就不同了,堆是一种经过排序的树形数据结构,每个结点都有一个值。通常我们所说的堆的数据结构,是指二叉堆。堆的特点是根结点的值最小(或最大),且根结点的两个子树也是一个堆。由于堆的这个特性,常用来实现优先队列

堆的存取是随意,这就如同我们在图书馆的书架上取书,虽然书的摆放是有顺序的,但是我们想取任意一本时不必像栈一样,先取出前面所有的书,书架这种机制不同于箱子,我们可以直接取出我们想要的书。

参考资料:

百度百科-堆

百度百科-栈

本回答被网友采纳

堆是什么意思?
堆积: "堆" 可以表示物体或事物积聚在一起形成的高而松散的结构。例如,"一堆书" 意味着很多书堆在一起。计算机领域: 在计算机科学中,"堆" 通常指的是动态内存分配的一种数据结构。程序在运行时可以通过堆来分配和释放内存,以满足变化的内存需求。大量或大批: "一堆" 也可以用来表示很多、大量...

堆的意思是什么
堆的意思是指堆积起来的事物或物品形成的堆状结构。堆这个词汇在汉语中有着广泛的应用,根据不同的语境,它可以指代不同的事物。以下是关于堆的详细解释:1. 堆作为一种物质形态,通常描述的是许多物品或者事物堆积在一起形成的整体。例如,一堆土、一堆煤等,这些都是由许多小的颗粒或者物体组成的一...

堆字什么意思
堆字的意思是累积在一起的东西。其相关内容如下:1、堆字在汉语中有多种含义和用法。最基本的意思是累积在一起的东西,如“土堆”、“瓦砾堆”、“柴火堆”等。此外,"堆"也可以用作量词,用于计算堆积物或成群的人,例如:“一堆土”、“两堆人”。2、除此之外,"堆"还有其他一些特殊的意义...

堆是什么
堆是一种数据结构。详细解释:1. 基本定义:堆是一种特殊的树形数据结构,它通常用于实现优先队列。在堆中,每个节点都具有一定的优先级,并且每个节点都大于或等于或小于或等于其子节点。这种特性使得堆在需要频繁查找最大或最小元素、插入和删除操作中表现出高效的性能。2. 特性与操作:堆具有动态性,...

数据结构中,什么是堆?
堆(Heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵完全二叉树的数组对象。将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。常见的堆有二叉堆、斐波那契堆等。堆是非线性数据结构,相当于一维数组,有两个直接后继。堆满足下列性质:1、堆中某个...

堆是什么意思
详细解释〈名〉(象形。从土,隹(zhuī)声。本义:土堆) 土墩,沙墩或水中聚集的礁石 逾陇堆兮渡漠。——《楚辞·疾世》激堆埼。——司马相如《上林赋》呼水中沙堆为墠。——《尔雅·释水》注 又如:堆阜(小丘);堆埼(曲折的岸边)——多用于地名;如:滟滪堆(在四川长江中);双堆集(在安徽)常为...

什么叫堆?小根堆的定义是什么?大根堆的定义又是什么?
堆是一种特殊的完全二叉树,其特点在于非终端节点的值总是不大于(或不小于)其子节点的值。堆主要分为两种形式:最大堆(大根堆)和最小堆。最大堆的定义是根节点拥有其所有子节点中最大的值,而最小堆则是根节点具有其所有子节点中最小的值。最大-最小堆结合了两者的特点,它是一种特殊的...

什么叫堆?小根堆的定义是什么?大根堆的定义又是什么?
堆是一种数据结构,它是一棵完全二叉树。小根堆是指每个节点的值都小于或等于其子节点的值。大根堆则是每个节点的值都大于或等于其子节点的值。以下是详细的解释:堆的概念:堆是一种特殊的完全二叉树,它可以用于实现优先队列等数据结构。在堆中,每个节点都与一个优先级相关联,节点的位置决定了其...

堆通常指的是什么意思
堆是一种数据结构,通常用于实现优先队列。堆的特点是:每个节点都比其子节点的键(关键值)大(或小),且堆是一棵完全二叉树。在堆中,根节点总是具有最大(或最小)的键值。堆有两种类型:最大堆和最小堆。在最大堆中,根节点的键值最大,子节点的键值小于等于父节点的键值。在最小堆中,根...

什么是堆?什么是栈啊?
堆(英语:heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树的数组对象。栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把...

相似回答