堆和栈的区别
内存:
栈区(stack)- 编译器自动分配和释放 ,速度快,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
堆区(heap)- 由程序员分配释放,若程序员不释放,程序结束时可能由OS回收(速度比较慢,而且容易产生内存碎片)注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。
数据结构:
栈-先进后出
堆是一种经过排序的树形数据结构,通常指二叉堆。堆的特点是根结点的值最小(或最大),且根结点的两个子树也是一个堆。由于堆的这个特性,常用来实现优先队列,堆的存取是随意的。
栈
栈是一个元素集合,支持两个基本操作:push用于将元素压入栈,pop用于删除栈顶元素。
后进先出的数据结构(Last In First Out, LIFO)
时间复杂度
索引:O(n)
查找:O(n)
插入:O(1)
删除:O(1)
堆
堆是一种基于树的满足某些特性的数据结构:整个堆中的所有父子节点的键值都满足相同的排序条件。堆分为最大堆和最小堆。在最大堆中,父节点的键值永远大于等于所有子节点的键值,根节点的键值是最大的。最小堆中,父节点的键值永远小于等于所有