一、什么是堆?(Heap)

     堆是无序的,是一片不连续的内存域,由用户自己来控制和释放,如果用户自己不释放的话,当内存达到一定的特定值时,通过垃圾回收器(GC)来回收。

     是程序运行期间动态分配的内存空间,你可以根据程序的运行情况确定要分配的堆内存的大小。

二、什么是栈?(Stack)

     栈是有顺序的,是一片连续的内存域,保持着先进后出的原则,由系统自动分配和维护。

     是编译期间就分配好的内存空间,因此代码中必须就栈的大小有明确的定义。

     表尾允许进行插入删除操作,称为栈顶(Top,另一端是固定的,称为栈底(Bottom

     PS:

     线性表(Linear List)是具有相同特性的数据元素的一个有限序列。

     堆栈(Stack) 是一种特殊的线性表,是一种操作只允许在尾端进行插入或删除等操作的线性表。

     顺序栈(Sequence Stack)是用一片连续的存储空间来存储栈中的数据元素。

     链栈(Linked Stack)是用链式存储结构来存储的栈,链栈通常用单链表来表示。

三、什么是堆栈?

     由堆和栈的概念,可以清晰的知道,堆栈是一种数据项按序排列的数据结构,只能在一端称为栈顶(top)对数据项进行插入和删除。

     最后一个放入堆栈中的物体总是被最先拿出来,这个特性通常称为后进先出(LIFO队列。

     堆栈中定义了一些操作,两个最重要的是PUSH和POP。PUSH操作在堆栈的顶部加入一个元素,POP操作相反,在堆栈顶部移去一个元素, 并将堆栈的大小减一。

     PS:通常所说的堆栈,实际上更偏向于指栈。

四、什么是队列?(Queue)

     队列是一种特殊的线性表,它只允许在表的前端(Front)进行删除操作,而在表的后端(Rear)进行插入操作。

     进行插入操作的表尾称为队尾(Rear),把进行其他操作的头部称为队头(Front)

     队列中没有元素时,称为空队列,队列具有先进先出(FIFO)的特点。

     PS:

     队列(Queue)是插入操作限定在表的尾部而其他操作限定在表的头部进行的线性表。

     顺序队列(Sequence Queue)用一片连续的存储空间来存储队列中的数据元素,类似于顺序表,用一维数组来存放队列中的数据元素。

     循环顺序队列(Circular sequence Queue)解决顺序队列的假溢出的方法是将顺序队列看成是首位相接的循环结构。

     链队列(Linked Queue)队列的另外一种存储方式是链式存储,通常用单链表表示。

五、堆、栈之间的区别是?

     堆实际上指的就是(满足堆性质的)优先队列的一种数据结构,第一个元素有最高的优先权

     栈实际上就是满足先进后出的性质的数学或数据结构。

     1、堆栈空间分配

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

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

     2、堆栈缓存方式

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

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

     3、堆栈数据结构区别

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

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

     特性: 最后一个放入堆栈中的物体总是被最先拿出来, 这个特性通常称为后进先出(LIFO)队列。

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

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

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

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

优秀是一种习惯,欢迎大家关注学习

C# 编程中的堆栈(Stack)和队列(Queue)的更多相关文章

  1. STL学习笔记6 -- 栈stack 、队列queue 和优先级priority_queue 三者比较

    栈stack  .队列queue  和优先级priority_queue 三者比较 默认下stack 和queue 基于deque 容器实现,priority_queue 则基于vector 容器实现 ...

  2. python基本数据结构栈stack和队列queue

    1,栈,后进先出,多用于反转 Python里面实现栈,就是把list包装成一个类,再添加一些方法作为栈的基本操作. 栈的实现: class Stack(object): #初始化栈为空列表 def _ ...

  3. C++栈(stack)、队列(queue)、链表(list)的常用函数

    C++队列Queue是一种容器适配器,它给予程序员一种先进先出(FIFO)的数据结构.1.back() 返回一个引用,指向最后一个元素2.empty() 如果队列空则返回真3.front() 返回第一 ...

  4. C++标准库类模板(stack)和 队列(queue)

    在C++标准库(STL)中有栈和队列的类模板,因此可以直接使用 1.栈(stack):使用栈之前,要先包含头文件 : #include<stack> stack.push(elem); / ...

  5. 自定义栈Stack 和 队列Queue

    自定义栈 接口 package com.test.custom; public interface IStack<E> { E pop(); void push(E e); E peek( ...

  6. 利用栈Stack实现队列(Queue)

    实现说明: 入队时,将元素压入s1; 出队时,推断s2是否为空,如不为空,则直接弹出顶元素:如为空.则将s1的元素逐个"倒入"s2.把最后一个元素弹出并出队; 这个思路,避免了重复 ...

  7. java中堆栈(stack)和堆(heap)(还在问静态变量放哪里,局部变量放哪里,静态区在哪里.....进来)

    (1)内存分配的策略 按照编译原理的观点,程序运行时的内存分配有三种策略,分别是静态的,栈式的,和堆式的. 静态存储分配是指在编译时就能确定每个数据目标在运行时刻的存储空间需求,因而在编 译时就可以给 ...

  8. java中堆栈(stack)和堆(heap)

    原文地址:http://blog.csdn.net/jerryao/article/details/874101 1.内存分配策略 按照编译原理的观点,程序运行时的内存分配有三种策略,分别是静态的,栈 ...

  9. 3.2 java中堆栈(stack)和堆(heap)(还在问静态变量放哪里,局部变量放哪里,静态区在哪里.....进来)

    (1)内存分配的策略 按照编译原理的观点,程序运行时的内存分配有三种策略,分别是静态的,栈式的,和堆式的. 静态存储分配是指在编译时就能确定每个数据目标在运行时刻的存储空间需求,因而在编 译时就可以给 ...

随机推荐

  1. WINDOWS-API:API函数大全

    操作系统除了协调应用程序的执行.内存分配.系统资源管理外,同时也是一个很大的服务中心,调用这个服务中心的各种服务(每一种服务是一个函数),可以帮肋应用程序达到开启视窗.描绘图形.使用周边设备的目的,由 ...

  2. springmvc导出excel(POI)

    /** * 导出excel表格 */ @RequestMapping(value = "/doExportData", method = {RequestMethod.POST, ...

  3. shelll脚本,常见的脚本题目。

    [root@localhost wyb]# cat 2quan.sh #!/bin/bash #写一个脚本,先要求输入用户名,然后让他输入一个数字,输的如果是数字给输出yes,不是数字,输出no #然 ...

  4. LeetCode 字符串相乘

    给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式. 示例 1: 输入: num1 = "2", num ...

  5. 【动态规划】luoguP1941 飞扬的小鸟

    细节总是打挂选手:) 题目描述 Flappy Bird是一款风靡一时的休闲手机游戏.玩家需要不断控制点击手机屏幕的频率来调节小鸟的飞行高度,让小鸟顺利通过画面右方的管道缝隙.如果小鸟一不小心撞到了水管 ...

  6. GIMP工具箱的自定义操作

    首选项 中还包含工具箱的自定义操作:

  7. 对freescale的mfgtool的ucl2.xml的理解

    转载于此:http://blog.csdn.net/bugouyonggan/article/details/8664898 对于Freescale MFG编程工具控制文件ucl2.xml的分析 为了 ...

  8. 《C/C++工程师综合练习卷》之小试牛刀

    第一套练习之感受 刚刚注册了牛客网的账号,准备在此衡量一下水平,好好磨练一番.看到推荐练习<C/C++工程师综合练习卷>,oh,20道题,2个小时.由于木有经验,好一番紧张~ 结果用了20 ...

  9. 某比赛小记2- 从HTTP请求返回中获得答案

    题目:在A页面登录后,重定向到A页面,然后访问B页面,header中带一指定内容"Content":"2018",然后从response中读取answer的值. ...

  10. C++ 实验六

    Part.2 // 合并两个文件内容到一个新文件中. // 文件名均从键盘输入 #include <iostream> #include <fstream> #include ...