栈,堆,堆栈,队列

2023-10-27

堆栈都是一种数据项按序排列的数据结构,只能在一端(称为栈顶(top))对数据项进行插入和删除。

要点:堆:顺序随意      栈:后进先出(Last-In/First-Out)

堆:什么是堆?又该怎么理解呢?

①堆通常是一个可以被看做一棵树的数组对象。堆总是满足下列性质:

   ·堆中某个节点的值总是不大于或不小于其父节点的值;

   ·堆总是一棵完全二叉树。

将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。常见的堆有二叉堆、斐波那契堆等。

②堆是在程序运行时,而不是在程序编译时,申请某个大小的内存空间。即动态分配内存,对其访问和对一般内存的访问没有区别。

③堆是应用程序在运行的时候请求操作系统分配给自己内存,一般是申请/给予的过程。

④堆是指程序运行时申请的动态内存,而栈只是指一种使用堆的方法(即先进后出)。

栈:什么是栈?又该怎么理解呢?

①栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。

②栈就是一个桶,后放进去的先拿出来,它下面本来有的东西要等它出来之后才能出来(先进后出)

③栈(Stack)是操作系统在建立某个进程时或者线程(在支持多线程的操作系统中是线程)为这个线程建立的存储区域,该区域具有FIFO的特性,在编译的时候可以指定需要的Stack的大小。

堆栈:什么是堆栈?又该怎么理解呢?

注意:其实堆栈本身就是栈,只是换了个抽象的名字。

堆栈的特性: 最后一个放入堆栈中的物体总是被最先拿出来, 这个特性通常称为后进先出(LIFO)队列。 堆栈中定义了一些操作。 两个最重要的是PUSH和POP。 PUSH操作在堆栈的顶部加入一 个元素。POP操作相反, 在堆栈顶部移去一个元素, 并将堆栈的大小减一。

 

堆、栈区别总结:

1.堆栈空间分配

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

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

2.堆栈缓存方式

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

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

3.堆栈数据结构区别

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

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

 

队列:什么是队列?又该怎么理解呢?

①队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。

②队列中没有元素时,称为空队列。

③建立顺序队列结构必须为其静态分配或动态申请一片连续的存储空间,并设置两个指针进行管理。一个是队头指针front,它指向队头元素;另一个是队尾指针rear,它指向下一个入队元素的存储位置。

④队列采用的FIFO(first in first out),新元素(等待进入队列的元素)总是被插入到链表的尾部,而读取的时候总是从链表的头部开始读取。每次读取一个元素,释放一个元素。所谓的动态创建,动态释放。因而也不存在溢出等问题。由于链表由结构体间接而成,遍历也方便。(先进先出)

堆、栈、队列之间的区别是?

①堆是在程序运行时,而不是在程序编译时,申请某个大小的内存空间。即动态分配内存,对其访问和对一般内存的访问没有区别。

②栈就是一个桶,后放进去的先拿出来,它下面本来有的东西要等它出来之后才能出来。(后进先出)

③队列只能在队头做删除操作,在队尾做插入操作.而栈只能在栈顶做插入和删除操作。(先进先出)

转载于:https://www.cnblogs.com/guoxiaoyan/p/8664150.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

栈,堆,堆栈,队列 的相关文章

随机推荐

  • Java垃圾回收机制

    Java垃圾回收机制 Java垃圾回收机制是指一种自动化的内存管理方式 Java程序员无需手动管理内存 而是由JVM Java虚拟机 自动进行垃圾回收 下面是简要的Java垃圾回收机制 垃圾收集器 JVM中垃圾回收器 Garbage Col
  • 外包征途-甲方、乙方、外包

    甲方 乙方 外包 在IT这行 我们经常都会听到这几个词 那这几个词到底是什么意思 我们先看看官方的解释 甲方 一般是指提出目标的一方 在合同拟定过程中主要是提出要实现什么目标 是合同的主导方 甲方是合同中双方平等主体的代称 也是为了方便在下
  • Meta算力争夺演变成团队动荡!LLaMA、LLaMA2、OPT团队成员多位离职

    据TheInformation报道 原参与Llama项目的团队成员有多位已经辞职 原因是Meta内部的OPT研究团队与Llama团队之间发生了一场关于计算资源的内部斗争 看来不管是谷歌 微软 OpenAI还是Meta 人才流失都是一个避不开
  • 【满分】【华为OD机试真题2023 JS】组装新的数组

    华为OD机试真题 2023年度机试题库全覆盖 刷题指南点这里 组装新的数组 知识点回溯数组 时间限制 1s 空间限制 256MB 限定语言 不限 题目描述 给你一个整数M和数组N N中的元素为连续整数 要求根据N中的元素组装成新的数组R 组
  • iOS 299美元企业账号申请流程及注意事项

    iOS开发者众多 但并不是所有的开发者都对账号申请 证书配置这些问题都清楚 毕竟不是所有开发者都能够经历这个环节 多数情况下是进公司之前这些东西都已经有了 作为一个合格的iOS开发者 我们必须要了解苹果的三种开发者账号 下图对三者进行了比较
  • C# 中的委托和事件(详解)

    C 中的委托和事件 委托和事件在 NET Framework 中的应用非常广泛 然而 较好地理解委托和事件对很多接触 C 时间不长的人来说并不容易 它们就像是一道槛儿 过了这个槛的人 觉得真是太容易了 而没有过去的人每次见到委托和事件就觉得
  • opencv图像处理及视频处理基本操作

    计算机眼中的图像由一个个像素组成 每个像素点的值在0 255之间 代表像素点的亮度 0为最暗 255为最亮 通常彩色图为三通道 灰度图 黑白图 为单通道 彩色图像包括三个颜色通道 B G R 分别表示蓝 绿 红 目录 1 图像的表示 2 图
  • html超链接打开共享文件夹,访问共享文件夹的方法

    在局域网 我们经常会用到共享文件 这样在多人传输文件跟共享资料上就会又方便又快捷啦 在这里教大家怎样建立跟访问共享文件夹 打开控制面板 找到防火墙 点击打开防火墙 弹出防火墙设置面板 我们选择关闭防火墙 虽然写不推荐 但我们可以无视它 然后
  • 抖音自动生成文字_文字动画怎么制作?这里教你一键制作抖音爆款文字视频

    现在很多人都会在闲暇时间打开抖音刷刷视频 经常会看到很多文字视频特别有趣 配上动感的节奏 文字立刻鲜活起来 如何才能制作出这样的文字视频呢 今天给大家介绍一种全网最简单的抖音文字视频制作方法 不需要会使用AE 甚至也不需要你打字 直接语音识
  • 关于python基础,90%的人不知道这些。但你一定得清楚。

    经过前几次的学习我们已经安装好Python解释器 搭建好顺手的IDE环境 那么接下来 我们就正式的开始一些列Python知识的学习 代码敲起来 一 字面量 字面量是以变量或常量给出的原始数据 在Python中 有多种类型的字面量 如数字字面
  • linux中断实验

    文章目录 一 linux中断简介 1 linux中断API函数 1 中断号 2 request irq函数 3 free irq 4 中断处理函数 5 中断使能与禁止函数 2 上半部与下半部 1 软中断 2 tasklet 3 工作队列 3
  • jboss源码中片段分析

    package com test import java security AccessController import java security PrivilegedAction import java util ArrayList
  • QRegExp

    d 非负整数 正整数 0 0 9 1 9 0 9 正整数 d 0 非正整数 负整数 0 0 9 1 9 0 9 负整数 d 整数 d d 非负浮点数 正浮点数 0 0 9 0 9 1 9 0 9 0 9 1 9 0 9 0 9 0 9 1
  • post使用方法以及有道API

    import requests import json headers User Agent Mozilla 5 0 Windows NT 10 0 Win64 x64 AppleWebKit 537 36 KHTML like Gecko
  • Unity人物前进的方向和相机朝向一致

    鼠标点击滑动移动相机 代码 using UnityEngine using System Collections This is an improved orbit script based on the MouseOrbitImprove
  • 数据结构-图的应用算法

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 一 最小生成树 1 1 Prim算法 1 2 Kruskal算法 二 最短路径 2 1 Dijkstra算法 2 2 Floyd算法 三 有向无环图描述表达式 四
  • Angular 使用MockJs

    今天要做模拟数据 但是发现没有说这个问题的帖子 特此记录分享一下 如果有用Angular的朋友刚好遇到这个问题 希望可以帮你解决 第一步 安装mockjs npm install mockjs save 第二步 引入mockjs 在 ang
  • Python学习笔记(十三)————循环语句相关

    目录 1 while循环 2 for循环 3 range语句 4 while与for区别 5 循环中断 break和continue 1 while循环 1 while的条件需得到布尔类型 True表示继续循环 False表示结束循环 2
  • 「OceanBase 4.1 体验」OceanBase 4.1社区版的部署及使用体验

    OceanBase 4 1 体验 OceanBase 4 1社区版的部署及使用体验 一 前言 1 1 本次实践介绍 1 2 本次实践目的 二 准备环境资源 2 1 部署前需准备工作 2 2 本地环境规划 三 部署Docker环境 3 1 安
  • 栈,堆,堆栈,队列

    堆栈都是一种数据项按序排列的数据结构 只能在一端 称为栈顶 top 对数据项进行插入和删除 要点 堆 顺序随意 栈 后进先出 Last In First Out 堆 什么是堆 又该怎么理解呢 堆通常是一个可以被看做一棵树的数组对象 堆总是满