堆与栈

一、数据结构中的堆与栈

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

堆:

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

栈:

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

二、内存分配中的堆与栈

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

堆:

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

栈:

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

posted @   光何  阅读(300)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
历史上的今天:
2018-01-20 Oracle创建新用户并将某一用户的表导进来

点击右上角即可分享
微信分享提示