什么是“堆”,栈,堆栈,队列,它们的区别
如果你学过数据结构,就一定会遇到“堆”,"栈","堆栈","队列",而最关键的是这些到底是什么意思?最关键的是即使你去面试,这些都还会问到,所以如果你不懂对你是损失很大的。
堆栈都是一种数据项按序排列的数据结构,只能在一端(称为栈顶(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),新元素(等待进入队列的元素)总是被插入到链表的尾部,而读取的时候总是从链表的头部开始读取。每次读取一个元素,释放一个元素。所谓的动态创建,动态释放。因而也不存在溢出等问题。由于链表由结构体间接而成,遍历也方便。(先进先出)
区别:
堆、栈、队列之间的区别是?
①堆是在程序运行时,而不是在程序编译时,申请某个大小的内存空间。即动态分配内存,对其访问和对一般内存的访问没有区别。
②栈就是一个桶,后放进去的先拿出来,它下面本来有的东西要等它出来之后才能出来。(后进先出)
③队列只能在队头做删除操作,在队尾做插入操作.而栈只能在栈顶做插入和删除操作。(先进先出)
什么是“堆”,栈,堆栈,队列,它们的区别相关推荐
- “堆”,栈,堆栈,队列,它们的区别?
2019独角兽企业重金招聘Python工程师标准>>> 什么是"堆","栈","堆栈","队列",它们 ...
- ADT栈与队列的C语言编程与实现
一 .目的: 加深对抽象数据类型 ADT 栈和队列的理解: 二 .环境: operating system version:Win11 CPU instruction set: x64 Integr ...
- JavaSE(二十一)——栈和队列、栈和堆
文章目录 1. 栈和队列 1.1 定义 1.2 区别 1.3 常见笔试题 2. 栈和堆 2.1 栈内存 2.2 堆内存 2.3 区别 1. 栈和队列 1.1 定义 栈(Stack):是限定能在表的一端 ...
- 堆、栈、队列的区别和联系
数据结构中的堆.栈和队列 堆:堆是一种经过排序的树形数据结构,每个结点都有一个值.通常我们所说的堆的数据结构,是指二叉堆.堆的特点是根结点的值最小(或最大),且根结点的两个子树也是一个堆.由于堆的这个 ...
- 面试题:堆、栈、队列的区别以及使用场景
1. 堆和栈 JavaScript中的变量分为基本类型和引用类型: 基本类型是保存在栈内存中的简单数据段,它们的值都有固定的大小,每种类型的数据占用的内存空间的大小是确定的,并由系统自动分配和自动释放 ...
- 堆、栈、队列的区别以及使用场景
转载自:https://www.pianshen.com/article/54131761085/ 1. 堆和栈 JavaScript中的变量分为基本类型和引用类型: 基本类型是保存在栈内存中的简单数 ...
- 数据结构中堆、栈和队列的理解
一.堆 堆是一种经过排序的树形数据结构,每个节点都有一个值,通常我们所说的堆的数据结构是指二叉树.所以堆在数据结构中通常可以被看做是一棵树的数组对象.而且堆需要满足一下两个性质: (1)堆中某个节点的 ...
- C语言中堆、栈、队列
C语言中堆.栈和队列: 1.堆和栈 (1)数据结构的堆和栈 堆栈是两种数据结构. 栈(栈像装数据的桶或箱子):是一种具有后进先出性质的数据结构,也就是说后存放的先取,先存放的后取.这就如同要取出放在箱 ...
- 数据结构,堆和栈和队列的概念
数据结构,堆和栈和队列的概念 1 什么是数据结构 数据结构是计算机存储,组织数据的反复改.数据结构是指相互之间存在的一种或多种特定关系的数据元素集合. 2 数据结构的逻辑结构 1 集合结构,元素都是孤 ...
最新文章
- Python将图片转成pdf(高清)论文党用~
- java 的对象强制转换后的调用
- mysql中的get_lock锁机制解析
- js字符串(String)转多维数组(Array) - 代码篇
- 如何手动实现C语言中的字符串操作
- pythonturtle魔法阵_深圳Pythonlevel1
- 使用MyBatis框架连接MySQL数据库查询记录,全部步骤
- NB-IOT技术以及物联网安全问题简述
- Unicode 和 UTF-8 的区别
- L1-053 电子汪 (10 分)—团体程序设计天梯赛
- 编写脚本常用的几种语句
- VC2010 Tab控件使用
- java voip 的sip服务器搭建_用ASTERISK搭建自己的免费VOIP服务器
- eclipse+lomboz*tomcat简单配置
- Android进阶知识(五):IPC基本概念之Binder、Binder工作机制及其原理
- spss入门——简单的数据预处理到时间序列分析系列(五)
- 函数声明和函数表达式的区别
- python 列表推导式 else_列表推导式与表达式生成器在 Python 中的滥用!
- oracle rac实现,炼数成金Oracle 12C RAC集群原理与管理实战 16课
- Mysql 分组查询取max 那条记录其他字段