【数据结构/操作系统 堆和栈】区别及应用场景、底层原理图解

堆和栈

比较有趣的是,计算机网络、操作系统中都会对堆栈有不同方面比较详细的描述,而使用的地方通常对这些底层的细节表现得没有那么明显。
但如果你能了解堆栈在计算机网络和操作系统中的表现形式,在你写代码时就会有不一样的认识(这里的代码以C++为例)。

数据结构中的堆和栈

堆(Heap)和栈(Stack)是两种不同的数据结构,它们在计算机科学中有不同的用途和实现方式。

堆(Heap)

堆通常被实现为二叉树结构(最常见的是二叉堆),但它并不等同于一般的二叉树。堆是一种特殊的完全二叉树,其中每个节点的值都大于或等于(最大堆)或小于或等于(最小堆)其子节点的值。堆主要用于实现优先队列,其中每次移除的元素都是当前集合中最大(或最小)的元素。

堆的操作主要包括:
  1. 插入(Insert):向堆中添加一个新元素,并保持堆的性质。
  2. 删除(Delete):移除并返回堆中的最大(或最小)元素,然后重新调整堆以保持其性质。
  3. 堆化(Heapify):将一个数组转换为堆,或重新调整堆以维持其性质。

堆通常用于实现内存管理、图算法(如Dijkstra算法中的优先队列)、堆排序等。

栈(Stack)

栈是一种遵循后进先出(LIFO)原则的有序集合。它只允许在栈顶进行添加(push)或删除(pop)元素的操作。栈的实现可以是基于数组的,也可以是基于链表的。

栈的操作主要包括:
  1. push:将一个元素添加到栈顶。
  2. pop:移除栈顶的元素,并返回该元素。
  3. peek/top:返回栈顶的元素,但不从栈中移除它。
  4. isEmpty:检查栈是否为空。
  5. size:返回栈中元素的数量。

栈在多种编程场景中都有广泛的应用,如函数调用、表达式求值、语法分析、浏览器历史记录等。

总结

堆和栈是两种不同的数据结构,它们在计算机科学中扮演着不同的角色。堆主要用于实现优先队列和其他需要快速访问最大(或最小)元素的场景,而栈则主要用于需要后进先出访问顺序的场景。

操作系统中的堆和栈

这里直接以两位大佬的公开资料为例:图来自小林,表来自阿秀;

先看表:

原谅我偷个懒,不画表了
来自阿秀

再看图:(看完再两个一起看看

来自小林
来自小林

总结

  1. 管理方式:主要是和代码相关的,教你怎么在代码中涉及堆和栈;
  2. 内存管理:可以结合数据结构来看,会涉及到一些工作中的问题的处理以及面试问题;
  3. 空间大小:操作系统底层;
  4. 碎片问题:操作系统底层,这个很复杂的,操作系统中涉及内存的所有内容都离不开碎片管理这个问题,对于碎片管理,一般都是采用的重分配机制处理,这里就不展开了;
  5. 生长方向:结合图片看,很清晰;
  6. 分配方式:小林对底层有详细展开,就是我拿的第二张图片的后面部分,很多很细,推荐去看;
  7. 分配效率:结合图片看;

多理解吧~
底层涉及真的很多~
开发过程中其实就涉及数据结构那块;
面试交流会涉及操作系统;
至于操作系统底层,欢迎去学习!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/867692.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Nordic 52832作为HID 键盘连接配对电视/投影后控制没反应问题的分析和解决

问题现象:我们的一款HID键盘硬件一直都工作的很好,连接配对后使用起来和原装键盘效果差不多,但是后面陆续有用户反馈家里的电视等蓝牙设备配对连接我们的键盘后,虽然显示已连接,但实际上控制不了。设备涉及到了好些品牌…

Sentinel-1 Level 1数据处理的详细算法定义(一)

《Sentinel-1 Level 1数据处理的详细算法定义》文档定义和描述了Sentinel-1实现的Level 1处理算法和方程,以便生成Level 1产品。这些算法适用于Sentinel-1的Stripmap、Interferometric Wide-swath (IW)、Extra-wide-swath (EW)和Wave模式。 今天介绍的内容如下&…

Ubuntu下安装配置和调优WordPress技术指南

今天我要给你们带来一篇关于在阿贝云免费服务器上部署和调优WordPress的技术指南。先说一下,今天的实验都是在阿贝云免费服务器上进行的,我得赞一下这个免费云服务器。它配置还不错,1核CPU、1G内存、10G硬盘、5M带宽,免费的居然这…

【工具推荐】FOFA

文章目录 FOFA介绍FOFA语法 FOFA介绍 FOFA官网:https://fofa.info/ FOFA(Fingerprinting Organizations with Advanced Tools)是一款网络空间测绘的搜索引擎,它专注于帮助用户收集和分析互联网上的设备和服务信息。FOFA的主要特…

linux软链接和硬链接的区别

1 创建软链接和硬链接 如下图所示,一开始有两个文件soft和hard。使用 ln -s soft soft1创建软链接,soft1是soft的软链接;使用ln hard hard1创建硬链接,hard1是hard的硬链接。可以看到软链接的文件类型和其它3个文件的文件类型是不…

【JVM系列】Full GC(完全垃圾回收)的原因及分析

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

集合排序 题目

题目 JAVA44 集合排序描述输入描述:输出描述: 示例:分析:代码: JAVA44 集合排序 描述 有三个客户对象,将三个客户对象存入集合中,并将其按照消费总额从高到低排序 输入描述: 三个整数&#xff0…

使用Python实现CartPole游戏

在深度强化学习内容的介绍中,提出了CartPole游戏进行深度强化学习,现在提供一种用Python简单实现Cart Pole游戏的方法。 1. 游戏介绍 CartPole 游戏是一个经典的强化学习问题,其中有一个小车(cart)和一个杆&#xff…

用网络编程完成windows和linux跨平台之间的通信(服务器)

服务器代码逻辑: 服务器功能 创建 Socket: 服务器首先创建一个 Socket 对象,用于进行网络通信。通常使用 socket() 函数创建。 绑定(Bind): 服务器将 Socket 绑定到一个特定的 IP 地址和端口号上。这是通过…

昇思25天学习打卡营第19天 | RNN实现情感分类

RNN实现情感分类 概述 情感分类是自然语言处理中的经典任务,是典型的分类问题。本节使用MindSpore实现一个基于RNN网络的情感分类模型,实现如下的效果: 输入: This film is terrible 正确标签: Negative 预测标签: Negative输入: This fil…

PyTorch实现InceptionResNetV2:预训练模型适应多类别任务代码解析

系列文章目录 9种经典图片分类卷积模型系列合集(推荐程度依次递减): Se_resnet50Resnet50Xceptioninceptionresnetv2resnextbninceptionshufflenetv2polynetvggm Imagenet的预训练inceptionresnetv2是1000个类别,根据笔者添加了…

Go 中的类型推断

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

【三级等保】等保整体建设方案(Word原件)

建设要点目录: 1、系统定级与安全域 2、实施方案设计 3、安全防护体系建设规划 软件全文档,全方案获取方式:本文末个人名片直接获取。

【Python】基于KMeans的航空公司客户数据聚类分析

💐大家好!我是码银~,欢迎关注💐: CSDN:码银 公众号:码银学编程 实验目的和要求 会用Python创建Kmeans聚类分析模型使用KMeans模型对航空公司客户价值进行聚类分析会对聚类结果进行分析评价 实…

Python酷库之旅-第三方库Pandas(008)

目录 一、用法精讲 16、pandas.DataFrame.to_json函数 16-1、语法 16-2、参数 16-3、功能 16-4、返回值 16-5、说明 16-6、用法 16-6-1、数据准备 16-6-2、代码示例 16-6-3、结果输出 17、pandas.read_html函数 17-1、语法 17-2、参数 17-3、功能 17-4、返回值…

CountDownLatch简介

引言 在多线程编程中,线程之间的协调和同步是一个常见的需求。Java 提供了多种工具来实现这一目标,其中 CountDownLatch 是一种简单而强大的同步机制。本文将详细介绍 CountDownLatch 的概念、使用方法和实际应用场景。 1. CountDownLatch 概述 Count…

Redis新手教程

Redis新手教程 目录 什么是RedisRedis的安装 安装前准备安装步骤 Redis的基本数据类型 字符串哈希列表集合有序集合 Redis的持久化 快照AOF Redis的高可用性 主从复制Redis SentinelRedis Cluster Redis的使用场景Redis的优缺点总结 1. 什么是Redis Redis(Remot…

IPython 调试秘籍:精通 %xmode 命令的错误显示模式设置

IPython 调试秘籍:精通 %xmode 命令的错误显示模式设置 在使用 IPython 进行交互式编程时,错误信息的显示模式对于调试代码至关重要。%xmode 命令是 IPython 中专门用于控制错误信息展示方式的魔术命令。本文将详细解释 %xmode 命令的使用方法&#xff…

介绍东芝TB62262FTAG芯片:高性能两相双极步进电机驱动器

在当今快速发展的科技领域,高性能的电机驱动器对于许多工程项目来说至关重要。东芝的TB62262FTAG这款两相双极步进电机驱动器采用PWM斩波技术,集成了多个先进功能,适用于各种工业和消费类应用。本文将详细介绍TB62262FTAG的参数、性能、优势及…

ubuntu22 设置开机直接登录桌面

专栏总目录 一、打开设置文件 sudo vi /etc/gdm3/custom.conf 二、修改设置 在[daemon] 找到AutomaticLoginEnable和AutomaticLogin选项,取消注释并修改为: [daemon] # 自动登录用户名 AutomaticLoginEnableTrue AutomaticLoginusername 其中usernam…