开发者社区> 问答> 正文

什么是堆?什么是栈?它们之间有什么区别和联系?

什么是堆?什么是栈?它们之间有什么区别和联系?

展开
收起
请回答1024 2020-04-02 13:30:58 2553 0
2 条回答
写回答
取消 提交回答
  • 有点尴尬唉 你要寻找的东西已经被吃掉啦!

    堆和栈的区别:

      一、堆栈空间分配区别:

      1、栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈;

      2、堆(操作系统): 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表。

      二、堆栈缓存方式区别:

      1、栈使用的是一级缓存, 他们通常都是被调用时处于存储空间中,调用完毕立即释放;

      2、堆是存放在二级缓存中,生命周期由虚拟机的垃圾回收算法来决定(并不是一旦成为孤儿对象就能被回收)。所以调用这些对象的速度要相对来得低一些。

      三、堆栈数据结构区别:

      堆(数据结构):堆可以被看成是一棵树,如:堆排序;

      栈(数据结构):一种先进后出的数据结构。

      

      堆支持以下的基本:

      1.build:建立一个空堆;

      2.insert:向堆中插入一个新元素;

      3.update:将新元素提升使其符合堆的性质;

      4.get:获取当前堆顶元素的值;

      5.delete:删除堆顶元素;

      6.heapify:使删除堆顶元素的堆再次成为堆。

      某些堆实现还支持其他的一些操作,如斐波那契堆支持检查一个堆中是否存在某个元素。

      栈的基本算法

      1.进栈(PUSH)算法

      ①若TOP≥n时,则给出溢出信息,作出错处理(进栈前首先检查栈是否已满,满则溢出;不满则作②);

      ②置TOP=TOP+1(栈指针加1,指向进栈地址);

      ③S(TOP)=X,结束(X为新进栈的元素);

      2.退栈(POP)算法

      ①若TOP≤0,则给出下溢信息,作出错处理(退栈前先检查是否已为空栈, 空则下溢;不空则作②);

      ②X=S(TOP),(退栈后的元素赋给X):

      ③TOP=TOP-1,结束(栈指针减1,指向栈顶)。

    2020-04-04 13:11:32
    赞同 展开评论 打赏
  • 堆和栈的概念存在于数据结构中和操作系统内存中。

    在数据结构中,栈中数据的存取方式为先进后出。而堆是一个优先队列,是按优先级来进行排序的,优先级可以按照大小来规定。完全 二叉树是堆的一种实现方式。

    在操作系统中,内存被分为栈区和堆区。

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

    堆区内存一般由程序员分配释放,若程序员不释放,程序结束时可能由垃圾回收机制回收。

    2020-04-02 13:32:15
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
如何使用Tair增强数据结构构建丰富在线实时场景 立即下载
Apache Flink 流式应用中状态的数据结构定义升级 立即下载
低代码开发师(初级)实战教程 立即下载