猿问

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

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

翻阅古今
浏览 171回答 2
2回答

郎朗坤

堆是计算机科学中的一种特别的树状数据结构,堆总是一棵完全二叉树,它总是满足下列性质:堆中某个节点的值总是不大于或不小于其父节点的值;堆总是一棵完全二叉树。堆的特征就是:给定堆中任意节点P和C,若P是C的母节点,那么P的值会小于等于(或大于等于) C 的值”。若母节点的值恒小于等于子节点的值,此堆称为最小堆;反之,若母节点的值恒大于等于子节点的值,此堆称为最大堆。栈又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;扩展资料:堆是在程序运行时,而不是在程序编译时,申请某个大小的内存空间。即动态分配内存,对其访问和对一般内存的访问没有区别。它也是在应用程序运行的时候请求操作系统分配给自己内存,一般是申请/给予的过程。堆的定义如下:n个元素的序列{k1,k2,ki,…,kn}当且仅当满足下关系时,称之为堆。(ki&nbsp;<= k2i,ki&nbsp;<= k2i+1)或者(ki&nbsp;>= k2i,ki&nbsp;>= k2i+1), (i = 1,2,3,4...n/2)若将和此次序列对应的一维数组(即以一维数组作此序列的存储结构)看成是一个完全二叉树,则堆的含义表明,完全二叉树中所有非终端结点的值均不大于(或不小于)其左、右孩子结点的值。由此,若序列{k1,k2,…,kn}是堆,则堆顶元素(或完全二叉树的根)必为序列中n个元素的最小值(或最大值)。栈是限定仅在表头进行插入和删除操作的线性表。要搞清楚这个概念,首先要明白”栈“原来的意思,如此才能把握本质。"栈“者,存储货物或供旅客住宿的地方,可引申为仓库、中转站,所以引入到计算机领域里,就是指数据暂时存储的地方,所以才有进栈、出栈的说法。

慕标琳琳

1、堆是计算机科学中的一种特别的树状数据结构。若是满足以下特性,即可称为堆:“给定堆中任意节点 P 和 C,若 P 是 C 的母节点,那么 P 的值会小于等于(或大于等于) C 的值”。若母节点的值恒小于等于子节点的值,此堆称为最小堆;反之,若母节点的值恒大于等于子节点的值,此堆称为最大堆。在堆中最顶端的那一个节点,称作根节点,根节点本身没有母节点。2、栈是计算机科学中一种特殊的串列形式的抽象数据类型,其特殊之处在于只能允许在链表或数组的一端进行加入数据(英语:push)和输出数据(英语:pop)的运算。另外堆栈也可以用一维数组或链表的形式来完成。堆栈的另外一个相对的操作方式称为队列。由于堆栈数据结构只允许在一端进行操作,因而按照后进先出的原理运作。扩展资料:堆的实现通过构造二叉堆(binary heap),实为二叉树的一种;由于其应用的普遍性,当不加限定时,均指该数据结构的这种实现。这种数据结构具有以下性质。任意节点小于(或大于)它的所有后裔,最小元(或最大元)在堆的根上(堆序性)。堆总是一棵完全树。即除了最底层,其他层的节点都被元素填满,且最底层尽可能地从左到右填入。堆栈的基本特点:先入后出,后入先出。除头尾节点之外,每个元素有一个前驱,一个后继。
随时随地看视频慕课网APP
我要回答