C语言中的栈和堆是什么?
C语言中的堆和栈都是数据项按顺序排列的数据结构。
栈就像数据的桶或盒子。
先说大家熟悉的栈,栈是一种具有LIFO性质的数据结构,也就是说先取后存,先存后取。
就好像我们要把放在盒子底部的东西(之前放进去的物体)拿出来。我们必须先把压在上面的物体(后来放进去的物体)移走。
像倒挂的树一样堆积
堆不一样。Heap是一种排序的树形数据结构,每个节点都有一个值。
通常堆的数据结构是指二进制堆。堆的特点是根节点的值最小(或者最大),根节点的两个子树也是一个堆。
由于堆的这种特性,经常被用来实现优先级队列,堆的访问是任意的,就像从图书馆的书架上取书一样。
虽然书是按顺序排列的,但是我们想拿任何一本的时候,都不必把面前的书像一摞一样全部拿出来。书架的机制和盒子不一样,我们可以直接把想要的书拿出来。
扩展数据:
关于堆和栈的区别的比喻
用栈就像去饭店吃饭一样。我们只是点餐(申请),付钱吃饭(使用),吃饱了就走。切菜洗菜之类的准备工作,洗碗洗锅之类的收尾工作,我们都不用管。它的优点是速度快,但自由度小。
用heaps就像自己做自己喜欢的菜,比较麻烦,但是更符合自己的口味,自由度大。
百度百科-栈