美文网首页
堆,栈,队列的区别和联系

堆,栈,队列的区别和联系

作者: 程序里的小仙女 | 来源:发表于2020-06-19 14:12 被阅读0次
堆是一块动态内存,栈是先进后出的堆的一种方法,队列是一种先进先出的线性表

0.利用redis的list数据类型构造栈和队列:

List类型

    常用命令:
lpush(从list最左边加入元素)、lpop(从list最左边取出元素)、
rpush(从list最右边加入元素)、rpop(从list最右边取出元素)
lrange(按区间取元素)、blpop(从list最左边取出元素,没有元素则会按设置的时间阻塞等待)、
brpop(从list最右边取出元素,没有元素则会按设置的时间阻塞等待)

应用场景举例:

(1)构造数据结构:栈(lpush-lpop/rpush-rpop)、队列(lpush-rpop/rpush-lpop)、阻塞队列(lpush-brpop/rpush-blpop)


  1. 堆是在程序运行时,而不是在程序编译时,申请某个大小的内存空间。即动态分配内存,对其访问和对一般内存的访问没有区别。堆是指程序运行时申请的动态内存,而栈只是指一种使用堆的方法(即先进后出)。
    2.2 堆简介
    2.2.1 堆的性质
    堆是一种常用的树形结构,是一种特殊的完全二叉树,当且仅当满足所有节点的值总是不大于或不小于其父节点的值的完全二叉树被称之为堆。堆的这一特性称之为堆序性。因此,在一个堆中,根节点是最大(或最小)节点。如果根节点最小,称之为小顶堆(或小根堆),如果根节点最大,称之为大顶堆(或大根堆)。堆的左右孩子没有大小的顺序。下面是一个小顶堆示例:


堆的存储一般都用数组来存储堆,i节点的父节点下标就为(i–1)/2(i – 1) / 2(i–1)/2。它的左右子节点下标分别为 2∗i+12 * i + 12∗i+1 和 2∗i+22 * i + 22∗i+2。如第0个节点左右子节点下标分别为1和2。


2.2.2 堆的基本操作
(1)建立
以最小堆为例,如果以数组存储元素时,一个数组具有对应的树表示形式,但树并不满足堆的条件,需要重新排列元素,可以建立“堆化”的树。

(2)插入
将一个新元素插入到表尾,即数组末尾时,如果新构成的二叉树不满足堆的性质,需要重新排列元素,下图演示了插入15时,堆的调整。

(3)删除。
堆排序中,删除一个元素总是发生在堆顶,因为堆顶的元素是最小的(小顶堆中)。表中最后一个元素用来填补空缺位置,结果树被更新以满足堆条件。

原文链接:https://blog.csdn.net/K346K346/article/details/80849966

  1. 栈(stack)——先进后出,删除与加入均在栈顶操作
    栈也称为堆栈,是一种线性表。
    堆栈的特性: 最先放入堆栈中的内容最后被拿出来,最后放入堆栈中的内容最先被拿出来, 被称为先进后出、后进先出。
    堆栈中两个最重要的操作是PUSH和POP,两个是相反的操作。
    PUSH:在堆栈的顶部加入一 个元素。
    POP:在堆栈顶部移去一个元素, 并将堆栈的大小减一。


堆与栈的区别总结如下:


  1. 队列——先进先出

队列也是一种特殊的线性表。不同于栈所服从的先进后出的原则,队列的原则是先进先出。
队列在队头做删除操作,在队尾做插入操作:


原文链接:https://blog.csdn.net/m0_37622530/article/details/81429837

相关文章

  • 堆,栈,队列的区别和联系

    堆是一块动态内存,栈是先进后出的堆的一种方法,队列是一种先进先出的线性表 0.利用redis的list数据类型构造...

  • 堆和栈(Heap and Stack)的区别!

    堆和栈最明显的区别是: 堆(Heap):队列优先,先进先出(FIFO—first in first out); 栈...

  • 堆、栈、队列的区别

    堆 堆中主要存放用new构造的对象和数组优势:可以动态的分配内存的大小,生存期也不必事先告诉编译器,因为它是在运行...

  • 10.11java中的堆和栈

    java高级-堆和栈 java堆 /栈 栈内存 / 堆内存的区别 1. java堆 /栈 2. 栈内存 / 堆内存的区别

  • 堆栈

    #什么是“堆”,"栈","堆栈","队列",它们的区别 如果你学过数据结构,就一定会遇到“堆”,"栈","堆栈",...

  • 堆和栈,队列和栈

    堆和栈的区别 1、堆栈空间分配 栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作...

  • 堆、栈和队列

    栈(stack)又叫堆栈是一种容器,可存入数据元素、访问元素、删除元素,它的特点在于只能允许在容器的一端进行加入数...

  • 【Javascript】探究javascript中的堆/栈/任务

    堆/栈/队列 在javascript中,存在调用栈 (call stack)和内存堆(memory heap) ,...

  • 未知分类

    栈和队列的区别? 栈的插入和删除操作都是在一端进行的,而队列的操作却是在连端进行的。 队列先进先出,栈后进后出 栈...

  • java中栈内存和堆内存有什么区别

    java中栈内存和堆内存有什么区别 栈内存和堆内存的区别: 1、栈内存用来存放基本类型的变量和引用变量,堆内存用来...

网友评论

      本文标题:堆,栈,队列的区别和联系

      本文链接:https://www.haomeiwen.com/subject/idsvxktx.html