当前位置: 首页 > news >正文

栈,队列

栈(Stack)和队列(Queue)是两种常用的数据结构,它们在计算机科学中有着广泛的应用。它们的主要区别在于元素的添加和移除方式。

栈(Stack)

  1. 栈是一种后进先出(Last In First Out, LIFO)的数据结构。
  2. 栈只允许在一端(称为栈顶)进行添加(push)和移除(pop)操作。
  3. 最后被添加到栈中的元素将是第一个被移除的元素。
  4. 栈的两个主要操作是:
    • push:将一个元素添加到栈顶。
    • pop:移除栈顶的元素,并返回它。
  5. 栈的其他操作可能包括:
    • peek:查看栈顶的元素但不移除它。
    • is_empty:检查栈是否为空。
  6. 栈在表达式求值、函数调用、撤销/重做功能等方面有广泛应用。

队列(Queue)

  1. 队列是一种先进先出(First In First Out, FIFO)的数据结构。
  2. 队列允许在一端(称为队尾)添加元素,在另一端(称为队首)移除元素。
  3. 最先被添加到队列中的元素将是第一个被移除的元素。
  4. 队列的两个主要操作是:
    • push:在队尾添加一个元素。
    • pop:移除队首的元素,并返回它。
  5. 队列的其他操作可能包括:
    • front:查看队首的元素但不移除它。
    • is_empty:检查队列是否为空。
  6. 队列在任务调度、缓冲处理、广度优先搜索算法等方面有广泛应用。

 

用链表实现栈和队列是一种常见的做法,因为链表的动态性质非常适合这些数据结构的插入和删除操作。下面是如何使用链表来实现栈和队列的简述:

用链表实现栈

  1. 定义节点:首先定义一个链表节点,通常包含数据部分和指向下一个节点的指针。
  2. 初始化栈:创建一个指向链表头部的指针,初始时指向null,表示栈为空。
  3. Push操作:添加元素到栈顶。创建一个新节点,将其数据部分设置为要添加的值,然后将新节点的指针指向当前的栈顶节点,最后更新栈顶指针为新节点。
  4. Pop操作:移除栈顶元素。首先检查栈是否为空,如果不为空,保存栈顶节点的数据,然后将栈顶指针移动到下一个节点,最后释放原栈顶节点的内存。
  5. get_top操作:查看栈顶元素。检查栈是否为空,如果不为空,返回栈顶节点的数据,但不移除它。

用链表实现队列

  1. 定义节点:与栈类似,定义一个链表节点,包含数据部分和指向下一个节点的指针。
  2. 初始化队列:创建两个指针,一个指向队首(front),一个指向队尾(rear),初始时都指向null,表示队列为空。
  3. push操作:在队尾添加元素。创建一个新节点,将其数据部分设置为要添加的值,然后将新节点的指针设置为null。如果队列为空,新节点既是队首也是队尾。否则,将队尾节点的指针指向新节点,然后更新队尾指针为新节点。
  4. pop操作:从队首移除元素。首先检查队列是否为空,如果不为空,保存队首节点的数据,然后将队首指针移动到下一个节点,最后释放原队首节点的内存。如果队首和队尾指针相同,表示队列中只有一个元素,移除后队列变为空,需要将队尾指针也设置为null
  5. getFront操作:查看队首元素。检查队列是否为空,如果不为空,返回队首节点的数据,但不移除它。

相关文章:

栈,队列

栈(Stack)和队列(Queue)是两种常用的数据结构,它们在计算机科学中有着广泛的应用。它们的主要区别在于元素的添加和移除方式。 栈(Stack): 栈是一种后进先出(Last In F…...

新增一个数组传递给后端

实现的效果&#xff1a; 页面 <div style"margin-bottom: 10px" v-if"totalPrice"><p style"font-weight: bolder;margin-bottom: 10px">支付计划<el-button type"text" size"small" click"addPayInf…...

Flutter集成Firebase中的Realtime Analytics

实时分析&#xff08;Realtime Analytics&#xff09;的功能 实时数据更新&#xff1a;Firebase实时分析提供实时数据更新&#xff0c;让开发者可以实时了解应用程序的使用情况&#xff0c;包括活跃用户数量、事件触发次数等指标自定义事件跟踪&#xff1a;开发者可以通过自定…...

2024国赛数学建模A题B题C题D题E题思路资料模型

开始在本帖实时更新2024国赛数学建模赛题思路代码&#xff0c;文章末尾获取&#xff01; 持续更新参考思路...

C语言字面量和常量

目录 引言 1. 字面量 1.1 字符字面量 1.2 整型字面量 1.3 浮点字面量 2. 常量 2.1 使用预处理器指令 #define 定义常量 2.1.1 语法格式 2.1.2 使用举例 2.2 使用 const 关键字定义常量 2.3 使用 #define 和 const 定义常量的区别 引言 看了一些博文&#xff0c;有的文…...

视频结构化从入门到精通——行为分析类应用

行为分析类应用 1. 认识行为分析 监控/判断视频画面中目标的运动过程、携带属性等。从数据中自动识别、跟踪和理解人类或物体行为。 1. 车的行为分析应用 车辆行为分析主要用于监控和管理车辆的动态行为&#xff0c;广泛应用于智能交通、城市管理和安全监控。关键应用包括&…...

Redis的KeyExpirationEventMessageListener键过期监听器

MessageListener通过监听key过期的Redis keyspace通知&#xff0c;然后通过ApplicationEventPublisher发布RedisKeyExpiredEvent事件的模式进行事件监听和广播。 redis.conf地址&#xff1a;https://github.com/redis/redis/blob/unstable/redis.conf Redis官方地址&#xff1…...

MP4视频压缩,推荐这五大压缩操作

MP4视频压缩&#xff0c;在当今数字化的时代&#xff0c;视频已经成为我们日常生活和工作中不可或缺的一部分。然而&#xff0c;随着视频分辨率和长度的增加&#xff0c;MP4文件的大小也变得越来越大&#xff0c;这不仅占用了大量的存储空间&#xff0c;还使得传输和分享变得困…...

docker 安装NextERP

有很多方式&#xff1a; 一 docker sudo docker run -itd -p 8016:80 -v ERPNext_db:/var/lib/mysql -v ERPNext_sites:/home/frappe/frappe-bench/sites --name ERPNext lvxj11/erpnext:latest二 git clone https://e.coding.net/yuanerp/yuanerp/frappe_docker.gitcp exa…...

Android 存储之 SharedPreferences 框架体系编码模板

一、SharedPreferences 框架体系 1、SharedPreferences 基本介绍 SharedPreferences 是 Android 的一个轻量级存储工具&#xff0c;它采用 key - value 的键值对方式进行存储 它允许保存和读取应用中的基本数据类型&#xff0c;例如&#xff0c;String、int、float、boolean …...

弹性容器Flex中的自动外边距(Auto Margins) 的作用

最近在使用Flex布局时&#xff0c;遇到的一个情况&#xff1a; 有以下的代码&#xff1a; <div class"toolbox"><button id"decrease">-</button><span id"size">1</span><button id"increase">…...

C语言调用子函数时入/出栈(保护/恢复现场)全过程分析:以Cortex-M3为例

0 参考资料&工具 Cortex M3权威指南(中文).pdf keil5&#xff08;用于仿真查看寄存器、栈变化&#xff09;1 C语言调用子函数时出入/出栈&#xff08;保护/恢复现场&#xff09;全过程分析 使用C语言调用子函数是如何保护/恢复现场的呢&#xff1f;本文以Cortex-M3为例&a…...

理解Sigmoid激活函数原理和实现

Sigmoid 激活函数是一种广泛应用于机器学习和深度学习中的非线性函数&#xff0c;特别是在二分类问题中。它的作用是将一个实数值映射到(0, 1)区间&#xff0c;使得输出可以被解释为概率值&#xff0c;这在处理二分类问题时非常有用。 Sigmoid 函数的定义 Sigmoid 函数的数学…...

探秘DevSecOps黄金管道,安全与效率的完美融合

软件应用的安全性已成为企业和用户关注的焦点&#xff0c;DevSecOps作为一种将安全融入开发和运维全过程的理念和实践&#xff0c;旨在消除传统开发模式中安全被后置处理的弊端。DevSecOps黄金管道&#xff08;Golden Pipeline&#xff09;是实现这一理念的核心框架&#xff0c…...

Redis的内存淘汰策略- volatile-lru

volatile-lru 策略简介 在 volatile-lru 策略下&#xff0c;当 Redis 的内存使用达到配置的上限&#xff08;maxmemory&#xff09;时&#xff0c;它会优先删除那些设置了过期时间的键&#xff0c;并且选择最近最少使用的键进行删除。LRU 算法的核心思想是&#xff0c;优先删除…...

HTTP和HTTPS的区别?哪一个更适合你的网站?

什么是 HTTP&#xff1f; HTTP&#xff08;超文本传输协议&#xff09;&#xff08;Hypertext Transfer Protocol&#xff09;它是一组允许网络浏览器与网络服务器&#xff08;托管网站的计算机&#xff09;进行通信的规则。 HTTP 使用请求-响应模型。 例如&#xff0c;当你…...

OpenAI SORA团队负责人 通往智能的方式 报告笔记

OpenAI SORA团队负责人 通往智能的方式 报告笔记 这个报告其实是2024年智源大会的主旨报告&#xff0c;OpenAI SORA和DALL-E团队负责人Aditya Ramesh给出的一段有关多模态大模型的报告。我去听了现场&#xff0c;感觉倍受启发&#xff0c;但是感觉很多并不能当场理解&#xff…...

006-Sleuth(Micrometer)+ZipKin分布式链路追踪

这里写目录标题 1 分布式链路追踪概述1.1 为什么会出现这个技术&#xff1f;需要解决哪些问题&#xff1f;1.2 在分布式与微服务场景下需要解决的问题 2 新一代Spring Cloud Sleuth&#xff1a;Micrometer2.1 官网重要提示2.1.1 新一代Sleuth2.1.2 官网2.1.3 说明2.1.3.1 老项目…...

AI模型:追求全能还是专精?-- 之6 语言复杂度类别(Category 0~3 类)和语言功能性类型(Type 0~Ⅲ 型)之2

Q17、我前面说过&#xff0c;语言复杂度的0~3级&#xff08;Category 0~3&#xff09;表示了语言的的上下文相关性 &#xff1a; 完全不相关&#xff0c; 单相关的 单词上下文&#xff0c; 双相关的句子上下文 全相关的文章上下文 。我准备翻译为 Context - irrelative /relati…...

20240907 每日AI必读资讯

大疆发布 DJI Neo 掌上 Vlog 无人机&#xff01; - DJI Neo 是 DJI 迄今最轻、最小的无人机&#xff0c;无需遥控器&#xff0c;掌上起降即可轻松拍出主角大片… &#xff5c;135 克轻巧便携 丨零门槛掌上起降 丨AI 智能跟拍 &#xff0c;一键成片 丨多种操控&#xff0c;丰富…...

手游刚开服就被攻击怎么办?如何防御DDoS?

开服初期是手游最脆弱的阶段&#xff0c;极易成为DDoS攻击的目标。一旦遭遇攻击&#xff0c;可能导致服务器瘫痪、玩家流失&#xff0c;甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案&#xff0c;帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议&#xff08;EPSFD 2025&#xff09;将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会&#xff0c;EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

Java 8 Stream API 入门到实践详解

一、告别 for 循环&#xff01; 传统痛点&#xff1a; Java 8 之前&#xff0c;集合操作离不开冗长的 for 循环和匿名类。例如&#xff0c;过滤列表中的偶数&#xff1a; List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...

从零实现富文本编辑器#5-编辑器选区模型的状态结构表达

先前我们总结了浏览器选区模型的交互策略&#xff0c;并且实现了基本的选区操作&#xff0c;还调研了自绘选区的实现。那么相对的&#xff0c;我们还需要设计编辑器的选区表达&#xff0c;也可以称为模型选区。编辑器中应用变更时的操作范围&#xff0c;就是以模型选区为基准来…...

ESP32读取DHT11温湿度数据

芯片&#xff1a;ESP32 环境&#xff1a;Arduino 一、安装DHT11传感器库 红框的库&#xff0c;别安装错了 二、代码 注意&#xff0c;DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...

STM32标准库-DMA直接存储器存取

文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA&#xff08;Direct Memory Access&#xff09;直接存储器存取 DMA可以提供外设…...

Qt Http Server模块功能及架构

Qt Http Server 是 Qt 6.0 中引入的一个新模块&#xff0c;它提供了一个轻量级的 HTTP 服务器实现&#xff0c;主要用于构建基于 HTTP 的应用程序和服务。 功能介绍&#xff1a; 主要功能 HTTP服务器功能&#xff1a; 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)

宇树机器人多姿态起立控制强化学习框架论文解析 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架&#xff08;一&#xff09; 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

04-初识css

一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...

unix/linux,sudo,其发展历程详细时间线、由来、历史背景

sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...