堆(heap)
基本释义:累积在一起的东西;
物理特性:一颗完全二叉树
在计算机中的定义:一类特殊的数据结构的统称;
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个元素的最小值(或最大值)。
实例化如下:
n = 7,i = 2
当i = 2 时,满足
k2 <= k4 , k2 <= k5 或者 k2 >= k4 , k2 >= k5 (n= 1,2,3)
即为堆。
堆支持的操作
- build:建立一个空堆;
- insert:像堆中插入一个新元素;
- update:将新元素提升使其符合堆得性质;
- get:获取当前堆顶元素的值;
- delete:删除堆顶元素;
- heapify:使删除堆顶元素的堆再次成为堆。
栈(stack)
基本释义:储存货物或供旅客住宿的房屋
在计算机中的定义:栈又名堆栈(后进先出表Last In First Out,LIFO表),是一种仅允许在表头进行插入和删除操作的线性表。
栈顶:允许进行插入和删除的一端,即表头。
栈底:与栈顶相对的另一端,即表尾。
进栈(入栈、压栈):向一个栈插入新元素。它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素。
出栈(退栈):从一个栈删除元素。它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
空栈:不含任何元素的栈。
栈的作用:栈可以用来在函数调用的时候存储断点,做递归时要用到栈。
堆栈帧:保存了一个函数调用时所需的维护信息。堆栈帧一般包含以下信息:
- 函数的返回地址和参数
- 临时变量:包括函数的非静态局部变量以及自动生成的其他临时变量。