4.6.4 堆和栈的区别是什么

在计算机领域,堆、栈是不容忽视的概念。但对于很多初学者来说,对堆、栈的理解又显得模糊。堆、栈是数据结构,是程序运行时用于存放数据的地方。这可能是很多初学者已有的认识,因为作者曾经就是这么想的,将堆、栈和汇编语言中的“堆栈”一词混为一谈。

首先要知道,对于堆、栈这种数据结构,尽管常用到“堆栈”一词,但实际上堆、栈是两种数据结构:堆和栈。堆和栈都是一种数据项按序排列的数据结构。

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

· 堆像一棵倒过来的树。堆是一种经过排序的树型数据结构,每个节点都有一个值。通常所说的堆的数据结构,是指二叉堆。堆的特点是根节点的值最小(或最大),且根节点的两个子树也是堆。由于堆的这个特性,它常用来实现优先队列,堆可随意存取。这就如同在图书馆的书架上取书,虽然书的摆放是有顺序的,但是想取任意一本时不必像栈一样,先取出前面所有的书,书架这种机制不同于箱子,可以直接取出想要的书。