码迷,mamicode.com
首页 > 其他好文 > 详细

堆与栈

时间:2020-01-20 15:09:20      阅读:91      评论:0      收藏:0      [点我收藏+]

标签:局部变量   不同   准备工作   方式   最小   优点   font   EAP   方向   

一、数据结构中的堆与栈

  在数据结构中,堆与栈为两种常见数据结构,数据结构共分为三大类:表、树、图,堆为树类数据结构,栈为表类数据结构。

堆:

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

栈:

  栈是一种具有后进先出性质的数据结构,也就是说后存放的先取,就像装数据的桶或箱子。在编程领域,常用来做递归操作的底层结构。

二、内存分配中的堆与栈

  内存中的栈区处于相对较高的地址以地址的增长方向为上的话,栈地址是向下增长的。栈中分配局部变量空间。堆区是向上增长的用于分配程序猿申请的内存空间。堆是向高地址扩展的数据结构,是不连续的内存区域。这是因为系统是用链表来存储的空暇内存地址的,自然是不连续的,而链表的遍历方向是由低地址向高地址。使用栈就象我们去饭馆里吃饭。仅仅管点菜(发出申请)、付钱、和吃(使用),吃饱了就走,不必理会切菜、洗菜等准备工作和洗碗、刷锅等扫尾工作,他的优点是快捷,可是自由度小。 使用堆就象是自己动手做喜欢吃的菜肴。比较麻烦。可是比较符合自己的口味,并且自由度大。

堆:

  堆区(heap) 一般由程序猿分配释放。若程序猿不释放,程序结束时可能由OS回收 ,与数据结构中的堆是两回事,分配方式倒是类似于链表。

栈:

  栈区(stack)由编译器自己主动分配释放 。存放函数的參数值,局部变量的值等,其操作方式类似于数据结构中的栈。

堆与栈

标签:局部变量   不同   准备工作   方式   最小   优点   font   EAP   方向   

原文地址:https://www.cnblogs.com/guanghe/p/12217667.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!