栈和队列简介

2023-11-17

栈和队列简介

栈和队列是两种常用的数据结构,它们的数据是按线性结构存储的,因此,栈和队列也属于线性表。

栈和队列的数据可以存储在一个顺序表里,也可以存储在一个链表里,只要满足线性存储结构就行。只对数据的线性结构有要求,对存储数据的具体结构并不做要求。

栈和队列最关键的特征是存取数据有严格的顺序。栈遵循“后进先出”(LIFO, Last In First Out)的原则,队列遵循“先进先出”(FIFO, First In First Out)的原则。

接下来就简单介绍一下栈和队列。

一、栈简介 

栈(stack),又称为堆栈,是一种数据结构,一种存储数据的容器。

作为一种线性的数据结构,栈的一端是封闭的,称为栈底,另一端是开口的,称为栈顶。

将数据存到栈中,称为入栈(或进栈、压栈),将数据从栈中取出,称为出栈(或弹栈)。

从栈中存取数据,都只能从开口的一端操作,先入栈的数据会被后入栈的数据“压”住,只有将后入栈的数据取出后,才取得到先入栈的数据,所以,栈的数据是“后进先出”的。

栈的常见应用如:大部分软件都有的“回退”功能Ctrl+Z,浏览器的“后退”功能等。

栈的数据存储结构可以使用顺序表,也可以使用链表。使用顺序表存储数据的栈称为顺序栈,使用链表存储数据的栈称为链栈。

根据顺序表和链表的区别,顺序表物理有序,链表逻辑有序,顺序栈和链栈的区别为,数据在实际物理空间上存放的相对位置不同,顺序栈的数据按物理有序存储,链栈的数据按逻辑有序存储。

二、队列简介

队列(queue),是另一种有存取顺序要求的数据结构。

队列的两端都是打开的,两端都是“单行”的,一端只进不出,称为队尾,另一端只出不进,称为队头。

将数据从队尾存到队列中,称为入队,将数据从队列中取出,称为出队。

队列的一端只能存入数据,另一端只能取出数据,从队列中取数据时,先入队的数据“挡”住了后入队的数据,只有将先入队的数据取出来,才取得到后入队的数据,所以,队列的数据是“先进先出”的。

队列的常见应用如:春运抢票功能,网购预约功能等。

与栈相同,队列的数据存储结构也可以使用顺序表或者链表。使用顺序表存储数据的队列称为顺序队列,使用链表存储数据的队列称为链队列。

顺序队列和链队列的区别为,数据在实际物理空间上存放的相对位置不同,顺序队列的数据按物理有序存储,链队列的数据按逻辑有序存储。

三、双端队列简介

双端队列(deque,全名double-ended queue),是一种特殊的线性数据结构。

与队列不同,双端队列的两端都可以入队和出队。也就是说,双端队列没有严格意义上的“队头”和“队尾”,只是为了描述方便,分别称为“前端”和“后端”,两端能进行的操作一样,都可以插入和删除数据。

双端队列同时具有栈和队列的性质。单独从其中一端存取数据时,数据是“后进先出”的,具有栈的性质。从其中一端存数据再从另一端取出,数据是“先进先出”的,具有队列的性质。

双端队列就是一种可以(也只能)从两端插入和删除数据的线性数据结构,使用起来比栈和队列更加灵活。

 

 

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

栈和队列简介 的相关文章

  • RabbitMQ镜像集群搭建

    RabbitMQ镜像集群搭建 消息队列 在消息的传输过程中保存消息的容器 MQ角色 Broker 即消息队列服务器实体 Exchange 消息交换机 它指定消息按什么规则 路由到哪个队列 Queue 消息队列载体 每个消息都会被投入到一个或
  • linux驱动调试--段错误之栈信息分析

    转自 http blog chinaunix net xmlrpc php r blog article uid 29401328 id 4923529 接着上一篇来分析一下Oops的栈 s3c2440平台 关于调试源码和整个Oops信息请
  • 【leetcode】----102二叉树的层序遍历

    102二叉树的层序遍历 给你一个二叉树 请你返回其按 层序遍历 得到的节点值 即逐层地 从左到右访问所有节点 示例 二叉树 3 9 20 null null 15 7 3 9 20 15 7 返回其层次遍历结果 3 9 20 15 7 BF
  • 出栈的合法性检测

    对于一个给定的入栈顺序 可能的出栈顺序会有很多 但是肯定都要遵循栈 后进先出 的特点 那么怎么进行合法性检测呢 算法思想如下 定义变量InIndex标记入栈序列的当前位置 定义OutIndex标记出栈序列的当前位置 对InIndex和Out
  • C/C++语言实现的一个缓存队列

    C C 语言实现的一个缓存队列 完整代码下载地址 https gitee com yzhengBTT QueueBuffer 使用方法 对于C语言 队列的创建分两种 1 静态创建 队列大小 define QUEUE SIZE 10 队列数据
  • Leetcode题解——30. 包含min函数的栈(辅助栈思想)

    题目地址 剑指 Offer 30 包含min函数的栈 力扣 LeetCode 目录 一 算法思想 二 代码实现 三 拓展思考 首先说结论 这道题虽然难度不大 但是算法思想很重要 是辅助栈应用的生动实例 所以 这里小编不再重点将代码 而是讲思
  • 【栈】逆波兰计算器

    文章目录 前言 一 基本概念 1 1 介绍 1 2 入栈和出栈示意图 1 3 栈的应用场景 二 使用数组模拟栈 2 1 思路分析 2 2 代码实现 2 3 测试 三 使用栈模拟中缀表达式计算器 3 1 整体思路 3 2 验证3 2 6 2
  • 多益视频面试

    多益面试 有一种怀疑人生的感觉 向老师 我对不起你 去年刚学的网络安全 我竟然没说出来加密算法的名字 也并不是题很难 而是简单的就是说不出来 写不出来 而难的也就是听过而已 问题 1 说一下什么是线程安全 线程安全的场景 线程安全就是确保程
  • 单调递增队列(全过程图文实现 另附习题)

    什么是单调队列 有什么用 不妨用一个问题来说明单调队列的作用和操作 不断地向缓存数组里读入元素 也不时地去掉最老的元素 不定期的询问当前缓存数组里的最小的元素 最直接的方法 普通队列实现缓存数组 进队出队都是O 1 一次查询需要遍历当前队列
  • LeetCode 232. 用栈实现队列

    题目链接 https leetcode cn problems implement queue using stacks 栈的特点是先进后出 而队列的特点是先进先出 我们用两个栈正好能把顺序反过来实现类似队列的操作 stackData 作为
  • 从0开始的(c语言)数据结构学习 3:栈

    注 本文以造轮子为主 属于相对理论性 教学性的东西 在实际使用中 如果你是c 请直接 include lt stack gt 理解 什么是栈 你现在有一个放网球的竖球筒 每次你放进去的球都会放在最上面 同理 当你要取出来一个球的时候 也只能
  • CH3-栈和队列

    文章目录 3 1栈和队列的定义和特点 栈的应用 队列的应用 3 1 1栈的定义和特点 3 1 2队列的定义和特点 3 2案例引入 案例3 1 进制转换 案例3 2 括号匹配的检验 案例3 3 表达式求值 案例3 4 舞伴问题 3 3栈的表示
  • 使用两个栈(stack)实现一个队列(queue)

    题目 已知下面Stack类及其3个方法Push Pop和Count 请用2个Stack实现Queue类的入队 Enqueue 出队 Dequeue 方法 class Stack public void Push int x Push an
  • 每天进步一点点【图的深度优先搜索与广度优先搜索】

    图是一种数据结构 其中节点可以具有零个或多个相邻元素 两个节点之间的连接称为边 节点也可以称为顶点 图分为三种 无向图 有向图 带权图 图的表示方式有两种 二维数组表示 邻接矩阵 链表表示 邻接表 邻接矩阵 邻接矩阵是表示图形中顶点之间相邻
  • Leetcode刷题316. 去除重复字母

    给你一个字符串 s 请你去除字符串中重复的字母 使得每个字母只出现一次 需保证 返回结果的字典序最小 要求不能打乱其他字符的相对位置 注意 该题与 1081 https leetcode cn com problems smallest s
  • Python deque的用法介绍

    Python deque的用法介绍 deque 是Python标准库 collections 中的一个类 实现了两端都可以操作的队列 相当于双端队列 与Python的基本数据类型列表很相似 Python实现双端队列参考 https blog
  • 用栈来判断括号匹配问题

    用栈实现 输入一行符号 以 结束 判断其中的括号是否匹配 括号包括 lt gt 如果匹配 输出 right 如果不匹配 给出错误提示 包括 1 对称符号都匹配 输出 right 2 处理到某个符号时不匹配了 输出 The character
  • 以带头结点的循环链表表示队列,并且只设一个指针指向队尾元素。

    出队的时候一定要注意是不是最后一个元素出队 假设以带头结点的循环链表表示队列 并且只设一个指针指向队尾元素结点 试编写相 应的初始化 入队以及出队算法 include
  • 01 用栈实现队列(leecode 232)

    1 问题 请你仅使用两个栈实现先入先出队列 队列应当支持一般队列的支持的所有操作 push pop peek empty 实现 MyQueue 类 void push int x 将元素 x 推到队列的末尾 int pop 从队列的开头移除
  • 浏览器请求队列机制-请求为什么会阻塞

    前言 最近遇到一个问题 我1个站点链接2个后端服务 但1个后端服务有问题 导致访问超时 但请求接口都是分开的 自认为一个服务站点请求超时 不会影响到另外一个请求的 但不是 全部请求都发不出去 为什么呢 是不是浏览器有请求机制管理 正常情况前

随机推荐

  • 【简单】阶乘之和

    描述 给定n的值 求Sn 1 2 3 4 5 n 之值 但Sn可能很大 因此只要求出Sn关于100007的余数 输入 输入数据有多组 每组占一行 每行一个正整数n n lt 1000 输出 每组输出一个整数 即Sn Mod 100007 样
  • 自动化测试用例设计实例

    在编写用例之间 笔者再次强调几点编写自动化测试用例的原则 1 一个脚本是一个完整的场景 从用户登陆操作到用户退出系统关闭浏览器 2 一个脚本脚本只验证一个功能点 不要试图用户登陆系统后把所有的功能都进行验证再退出系统 3 尽量只做功能中正向
  • 2022年全新Java学习路线图,含源码+笔记

    简洁版本Java学习路线 Java SE基础 gt Java Web gt Maven gt Git gt SSM框架 gt MybatisPlus gt Spring Boot gt 传智健康 医疗行业 gt Spring Cloud g
  • TLS 安全设置未设置为默认设置,这也可能导致此错误。

    edge浏览器打开网页时打示 TLS 安全设置未设置为默认设置 这也可能导致此错误 如图 此时可以通过启用TLS功能处理该问题 控制面板 Internet选项 高级 如图 启用TLS功能后刷新页面或重启浏览器 之后就不会提示之前的报错了
  • ctfshow-萌新-web1( 利用intval函数的特性获取敏感数据)

    ctf show 萌新模块的web1关 这一关考察的是intval 函数转换字符串时的特性以及SQL的拼接绕过 这一关直接就给了源码 并提示我们 id 1000 时 就是flag 先分析一下源码 首先是 intval 函数将参数id转换为数
  • Educoder---计算机系统基础-----计算机系统2.1测试

    1 5 B C A D C 6 10 D C B C B 10题讲解过程 在8位寄存器中存放补码表示的数0FEH 算术左移一位后 其十六进制代码是 A 0FFH B 0FCH C 7CH D 7EH 我是谁 a student a skat
  • 43_iPhone如何查看idfa

    今天工作时 需要帮一位同事查看iPhone的idfa 然后通过idfa做一些定向操作 网上查了十几分钟 一直没有找到合适的方法 最后找到一个对我来说非常简单的方法 很快就找到了我们需要的idfa 在这里记录一下思路 并不做详细解释 懂的人自
  • 【第10篇】MobileNets:用于移动视觉应用的高效卷积神经网络

    MobileNets 用于移动视觉应用的高效卷积神经网络 文章目录 MobileNets 用于移动视觉应用的高效卷积神经网络 摘要 一 简介 二 前期工作 三 MobileNet 架构 3 1 深度可分离卷积 3 2 网络结构和训练 3 3
  • Python爬虫,京东自动登录,在线抢购商品

    京东抢购 Python爬虫 自动登录京东网站 查询商品库存 价格 显示购物车详情等 可以指定抢购商品 自动购买下单 然后手动去京东付款就行 chang log 2017 03 30 实现二维码扫码登陆 2017 06 27 Golang版J
  • 飞哥送书第二期:充能书单|618,买什么都不如买知识!

    您好 我是码农飞哥 wei158556 感谢您阅读本文 欢迎一键三连哦 1 Python基础专栏 基础知识一网打尽 9 9元买不了吃亏 买不了上当 Python从入门到精通 2 毕业设计专栏 毕业季咱们不慌忙 几百款毕业设计等你选 3 Py
  • python多进程服务高可用

    python多进程服务高可用 目的 实现方式 出现的问题 尝试思路 问题产生原因 问题解决方式 目的 多进程服务高可用目的暂定为两个 任务超时 计算超时 或者内部死锁 会出现timeout 任务计算失败 子进程挂掉 比如动态基线卡爆子进程
  • 【目标检测】40、CentripetalNet: Pursuing High-quality Keypoint Pairs for Object Detection

    文章目录 Abstract 1 Introduction 2 Related work Anchor based approach Anchor free Approach 3 CentripetalNet 3 1 Centripetal
  • [股票预测]基于BP神经网络的股票行情预测

    目录 一 数据集介绍 1 输入数据 XRHJDataInput mat 2 目标数据 XRHJDataTarget mat 3 预测数据 newdata pre18 mat 二 模型训练 1 训练过程 2 Matlab程序代码 三 网络训练
  • Java中switch……case穿透、死循环以及break、return、continue知识点

    一 Java中switch case穿透 1 定义 在switch语句中 如果case控制的语句体后面不写break 将出现穿透现象 在不判断下一个case值的情况下 向下运行 直到遇到break 或者整体switch语句结束 2 case
  • jquery.print.js打印页面时,多分出一页

    可能是要打印的元素 有内边距和外边距 可以设置 margin 0 padding 0 border 0
  • 最新芒果TV视频下载方法-马赛克视频助手

    芒果TV是一款资源丰富的互联网视频平台 它除了可以看视频外 还可以将这些视频下载下来 但官方是不支持视频下载的 那么芒果TV该怎么下载视频么 接下来就让我们一起去看看吧 今天小编就教大家如何把上面喜欢的视频下载下来 1 这里我们需要用到一个
  • 通过Keil如何查看MCU的RAM与ROM使用情况

    概述 在很多偏门MCU 还是使用keil进行开发 开发过程中能免会出现ram rom不够问题 怎么查看呢 下面揭晓答案 一 查看方式 1 编译后 2 通过map查看 方法很简单 鼠标对准红色圈 双击即可 有时 双击不了 只要按照上图配置 此
  • kubernetes集群更新证书(kubeadm方式)

    一 kubernets证书详情 1 查看证书 tree etc kubernetes pki etc kubernetes pki apiserver crt apiserver etcd client crt apiserver etcd
  • RK3399-查看系统温度

    上面是我的微信和QQ群 欢迎新朋友的加入 安装工具 sudo apt install lm sensors 测试效果 root FriendlyELEC sensors gpu thermal virtual 0 Adapter Virtu
  • 栈和队列简介

    栈和队列简介 栈和队列是两种常用的数据结构 它们的数据是按线性结构存储的 因此 栈和队列也属于线性表 栈和队列的数据可以存储在一个顺序表里 也可以存储在一个链表里 只要满足线性存储结构就行 只对数据的线性结构有要求 对存储数据的具体结构并不