算法 中的 栈和队列

代码随想录算法训练营第八天 -- 栈和队列1 || 232.用栈实现队列 / 225.用队列实现栈 / 20.有效的括号 / 1047.删除字符中的所有相邻重复项 然后,我们将栈中元素依次出栈,存入到新的字符串中,但此时字符串和原来字符串是相反的,所以我们还需要反转一下字符串。此外,其实我们可以利用字符串来模拟栈,这样我们就可以不用反转,代码也变得更加简洁。:如果遇到右括号,再看其与栈头元素是否匹配,如果不匹配,就返回false。:如果遇到右括号,先看栈是否为空,如果为空,那么就返回false。:最后,如果栈里还有元素,说明左括号剩余,返回false。:字符串里右方向的括号多余了,所以不匹配。时,我们就让该元素进栈,否则我们就出栈。,当入栈时,队列也入队。 阅读详情

什么是栈?

栈是一种线性的数据结构,只能遵循“先入后出”的原则。“先入后出”也就是First In Last Out,简称FILO,也就是最先进入栈的原则需要最后出栈的元素,这个最早进入栈的元素存放位置叫栈底,最后进入的元素存放的位置叫做栈顶。

 

栈的基本操作

入栈

现有这样一个栈,需要将一个新元素入栈。

将新的元素入栈。

新的元素取代原来的栈顶,成为新的栈顶。

 

出栈

现在有一个这样的栈,我要让他执行一次出栈操作。

 将需要出栈的元素移除,前面的元素就变成了栈顶。

 

什么是队列?

队列不同于栈的先入后出,队列中的元素只能按照先入先出(First In First Out,FIFO)的方式,队列的出口端叫队头,队列的入口端叫队尾。

为了入队操作方便,把队尾位置规定为最后入队元素的下一个位置,就像这样:

 

队列的基本操作

入队

现有这样一个队列需要入队。

将需要插入的元素插入队尾。

最后再重新调整队尾指针的位置,需要指向最后一个元素的下一个元素。

 

出队

根据先入先出的原则,出队需要让队头的元素先出。

出队完成后,队头便成了队头的下一个元素。

 

循环队列

如果队列不停的入队和出队操作,这个数组固定的空间就会越用越小,像这样:

队列的容量将会越来越小,这时候再插入一个元素。

从上面来看,插入了一个新元素,队尾指针又重新指向了该数组的第一个元素。

现在再插入一个元素:

这时候,新元素又插入了队尾指针的位置,队尾指针又指向了下一个元素,这样一来,整个数组就循环起来了,这就叫做循环队列。

 

循环队列的判满公式

( 队尾下标 + 1 ) % 数组长度 = 队头下标

当 队尾下标+1 刚好等于 数组长度 时,结果应是0。

例如:队尾下标=15,数组长度=30,队头下标=16。

则:(15 + 1) % 30 = 16

因为,之前说过,队尾的下标是最后一个元素的下一个,实际在队尾的元素其实下标为14,但,队尾指针指向的位置永远空出一位,所以循环队列元素已满。

 

循环队列的入队

    /**
     * 入队
     * @param element 入队的元素
     * @param front 队头下标
     * @param rear 队尾下标
     */
    public void enQueue(int element) throws Exception{
        if((rear+1)%array.length == front) { //判满公式
            throw new Exception("队列已满!!");
        }
        array[rear] = element; //把新值插入队尾下标,也就是队列的下一个元素
        rear = (rear+1)%array.length; //重新定义队尾下标(+1就是下标向后移一位)
    }

 

循环队列的出队

    /**
     * 出队
     * @return
     */
    public int deQueue() throws Exception{
        if(rear == front) {
            throw new Exception("队列已空!!");
        }
        int deQueueElement = array[front]; //队头下标的元素就是要出队的元素
        front = (front+1)%array.length; //重新定义队头下标(队头下标向后移一位)
        return deQueueElement;
    }

 

数据结构 栈和队列 算法设计题 五 算法设计题 1. 设有两个栈S1,S2都采用顺序栈方式,并且共享一个存储区[O..maxsize-1],为了尽量利用空间,减少溢出的可能,可采用栈顶相向,迎面增长的存储方式。试设计S1,S2有关入栈和出栈的操作算法。 【哈尔滨工业大学 2001 七 (12分)】 2. 设从键盘输入一整数的序列:a1, a2, a3,…,an,试编写算法实现:用栈结构存储输入的整数,当ai≠-1时,将ai 阅读详情

相关推荐

滑动窗口在数据结构与算法栈和队列中的应用

在数据结构与算法的领域中,滑动窗口、栈和队列都是非常重要的概念。滑动窗口是一种常用的算法技巧,能够高效地处理连续子数组或子串的问题。栈和队列则是两种基本的数据结构,具有独特的操作特性。本文章的目的在于详细探讨滑动窗口在栈和队列这两种数据结构中的应用,通过理论分析、代码实现和实际案例,让读者深入理解如何利用滑动窗口的思想来优化栈和队列相关的算法问题。范围涵盖了滑动窗口与栈和队列结合的核心原理、算法实现、实际应用场景以及相关的学习资源推荐等方面。

AI 算法实战派 1054

Java实现循环队列/栈——先入先出/后入先出的数据结构

先入先出的数据结构 在 FIFO 数据结构中,将首先处理添加到队列中的第一个元素。 如上图所示,队列是典型的 FIFO 数据结构。插入(insert)操作也称作入队(enqueue),新元素始终被添加在队列的末尾。 删除(delete)操作也被称为出队(dequeue)。 你只能移除 第一个元素。 队列–实现 队列的初始化: 用 队列的两个主要操作:入队与出队 // store eleme...

weixin_43772228的博客 4031

微信小程序如何集成EasyRTC实现零插件音视频通话?5步搞定完整接入流程

本文详细介绍了如何在微信小程序中集成EasyRTC SDK,实现零插件的实时音视频通话功能。通过5个关键步骤,包括环境配置、SDK初始化、核心功能实现、性能优化和问题排查,帮助开发者快速完成WebRTC技术在小程序中的落地应用,解决微信小程序原生不支持实时音视频通信的技术难题。

weixin_28340315的博客 144

数据结构 - 栈(Stack)

文章目录栈的介绍用数组模拟栈栈实现计算器 栈的介绍 栈的英文为(stack)。 栈是一个先入后出(FILO : First In Last Out)的有序列表。 栈(stack)是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊的线性表。允许插入和删除的一端,为变化的一端,称为栈顶(Top),另一端为固定的一端,称为栈底(Bottom)。 根据栈的定义可知,最先放入栈中元素在栈底,最后放入的元素在栈顶;而删除元素刚好相反,最后放入的元素最先删除,最先放入的元素最后删除。 入栈(push)示

张大安的博客 3182

以GD32F103C8T6为例的核心板原理图PCB绘制学习笔记简单总结

重点在supplier part是立创商城的编号,可以搜到。

2301_80397661的博客 3263

数字音频接口之I2S总线协议详解

1、SDATA,也就是串行数据信号,使用二进制传输数字信号。请注意数据的传输形式为补码的方式2、例如音频的采样率是8K,一s内存采样8K个点,一个点包含一个左声道,一个右声道,所以LRCK是8K,BCLK是2×采样频率×采样位数3、同时双向(TX和RX)音频流:串行数据同步移位到时钟信号SCK和LRCK。在SCK的下降沿将TX数据写入SDOUT引脚,并在SCK的上升沿从SDIN引脚读取RX数据。始终首先发送最高有效位(MSB);TX和RX均可在主模式和从模式下使用。

卓学课堂 3万+

数据结构之----栈、队列、双向队列

队列是一种遵循先入先出规则的线性数据结构。顾名思义,队列模拟了排队现象,即新来的人不断加入队列的尾部,而位于队列头部的人逐个离开。如图所示,我们将队列的头部称为队首,尾部称为队尾,将把元素加入队尾的操作称为入队,删除队首元素的操作称为出队。在队列中,我们仅能在头部删除或在尾部添加元素。如图所示,双向队列提供了更高的灵活性,允许在头部和尾部执行元素的添加或删除操作。栈是一种遵循先入后出原则的数据结构,可通过数组或链表来实现。

weixin_43285931的博客 1660

oracle 11.2.0.3.0 client下载,oracle64位客户端 Instant Client

oracle64位 客户端安装程序,Instant Client v11.2.0.3.0(64-bit)可以用,bo客户端需要配这个的,所以装了一个,64位操作系统中、不安装Oracle-32bit客户端,方便使用PLSQL Developer(不支持64bit位Oracle客户端)安装教程安装配置instantclient下载后,解压到D:\Oracle\instantclient_11_2(特...

weixin_42573757的博客 4516

【队列 & 栈】(三) 栈:先入后出的数据结构

LeetCode - 探索卡片 - 队列&栈 - 三 - 先入后出的数据结构

闻韶 1391

python轮胎缺陷检测_基于深度学习的轮胎缺陷无损检测与分类技术研究

基于深度学习的轮胎缺陷无损检测与分类技术研究【摘要】:随着汽车行业快速发展及汽车保有量的持续增长,大大增加了对轮胎的需求,而轮胎质量在很大程度上决定了轮胎的使用寿命,也是在行驶过程中对人们生命财产安全的保障,同时对轮胎进行在线质量检测也便于轮胎生产企业及时发现生产线中存在的不合格产品,以此来调整机械设备甚至轮胎的生产工艺,避免造成生产材料的浪费。因此,检测轮胎质量是轮胎生产过程中必不可缺少的一部分...

weixin_39689428的博客 1426

基于Simulink的无线充电系统LCC补偿网络建模与控制

本文详细介绍了基于Simulink的无线充电系统LCC补偿网络建模与控制方法。首先分析了无线充电系统面临的核心挑战,提出LCC补偿网络解决方案,阐述了其恒流输出和输入阻抗解耦原理。通过Simulink分步演示了系统建模过程,包括松耦合变压器、LCC+LC补偿网络、功率变换级搭建以及频率跟踪控制实现。仿真结果表明,LCC补偿系统在气隙变化和负载跳变下能保持输出电压稳定(波动±3%),效率达89%。文章还总结了工程实现要点,并探讨了动态充电、多负载系统等扩展应用。该教程为开发高效智能的无线充电系统提供了实用指导

amy_mhd的博客 63

C语言数据结构之栈(FILO)标准模式

看会以后教你如何吊打面试官,内容非常详细,非常良心,很好的诠释了对栈的理解,以及栈的标准模板样式

weixin_63597125的博客 2170

基于Keil软件实现对射式红外传感器计次 (江协科技HAL库)

用HAL库复现江协科技,让嵌入式学习之路更顺畅。

2401_82728381的博客 798

算法笔记:Java中的栈和队列

栈和队列是十分基本的数据结构,其基本方法和实现想必大家一定耳熟能详,因此,在这篇博文中,不会介绍栈和队列的基本知识,而是讲解其实现中我觉得比较重要和有意思的点。 一. 大小调整(Resizing Arrays) 关于栈和队列的实现,我们既可以使用链表实现,也可以使用数组实现。在使用数组实现的时候,一个十分重要的问题就是调整数组的大小。当数组分配的空间已经被占满,而我们要添加新的元素,这个时候我...

彩虹糖的博客 364

NLP高频面试题(三十一)——多模态预训练模型的主要结构、特征对齐与融合方法及对比损失函数详解

多模态预训练模型通过创新的架构设计和训练策略,在跨模态理解和表示学习上取得了显著进展。从单塔到双塔,从编码器-解码器混合到图结构模型,研究者们探索了不同的模态融合途径;配合显式与隐式对齐手段以及有效的对比学习损失,当前的多模态模型已经能够在图文检索、视觉问答、图像描述生成等任务上接近甚至超越专门的有监督模型。可以说,多模态预训练成为了继NLP和CV单模态预训练之后的又一个AI热点领域。模型规模与泛化:与单模态的大型预训练模型类似,多模态模型的参数规模和训练数据规模在迅速增长。

WeLearnNLP 2924

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

算法-栈和队列02-删除字符串中的所有相邻重复项

其实这道题目不使用栈或者队列辅助,也是可以做的,在遍历字符串的时候向前一个比较然后删除,但是在字符串中间删除字符的开销比较大,需要大家谨慎使用,能不能通过测试用例我没有尝试。

Buling_0的博客 251

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

【数据结构与算法】2、栈和队列以及在java中的使用

上一小节我介绍了数组这种数据结构,并且二次封装了数组,可以添加元素、删除元素、查看元素等等,这一节我主要介绍栈和队列。 栈也是一种线性结构,相比数组来说,栈的操作会少一些,只能从一端添加元素和取出元素,后进先出LIFO,这一端被称为栈顶。 一、java中的栈Stack,后进先出 在上一小节实现的数组上,如果我可以从数组尾添加元素和数组尾删除元素,那么此时数组就可以当作一个栈来使用了。 现在我来介...

江南雨敲窗的博客 347

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

数据结构与算法 :队列与栈的操作以及Java中的List和Queue

这样原来非空的就变成了空队列了。---每次操作无论push还是pop均有一个队列是空的。把上面我分析的思路翻译成代码就是这样的。

m0_48922996的博客 729

已知Q是一个非空队列,S是一个空栈。仅使用少量工作变量以及对队列和栈的基本操作,编写一个算法,将队列Q中的所有元素逆置。

【问题描述】 已知Q是一个非空队列,S是一个空栈。仅使用少量工作变量以及对队列和栈的基本操作,编写一个算法,将队列Q中的所有元素逆置。 【输入形式】 输入的第一行为队列元素个数,第二行为队列从首至尾的元素 【输出形式】 输出队列的逆置 【样例输入】 3 1 2 3 【样例输出】 3 2 1 #include<iostream> #include<malloc.h> using namespace std; typedef int QElementType; typedef struc

weixin_45058573的博客 1万+

栈和队列的基本应用

1 栈的基本应用 1.1括号匹配 问题: 假设表达式有三种括号:圆括号“()”,花括号“{}”,方括号“[]”。它们可互相嵌套,如{([])}或{([])()[]}均为正确格式。而{)),{[()]均为不正确格式。 输入由三种括号构成的字符串,如何检测字符串里括号格式的正确性? 算法思路: 创建一个空栈,开始顺序扫描所有字符 遇到左括号入栈 遇到右括号则弹出已入栈的栈顶左括号(若栈为空没有左括号,直接退出报错) 检查两括号是否匹配(若两括号类型不一样,直接退出报错) 若所有字符都扫描完.

CYBCLOUD的博客 2712

算法:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。...

算法:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。《剑指offer》 利用栈来进行操作,代码注释写的比较清楚:首先判断两个栈是否是空的:其次当栈二 为空,将栈1中取出来放到栈二,最终返回栈二首部值; 主要利用了pop()方法和push方法: package LG.nowcoder; /** * @Author liguo * @...

weixin_34296641的博客 99

【leetcode 力扣刷题】栈和队列的基础知识 + 栈的经典应用—匹配

栈和队列是比较特殊的线性结构,特殊在于栈和队列中的元素不能随意的访问——对于栈,只能访问栈顶元素(用top()方法),只能向栈顶添加元素(用push()方法),只能从栈顶取元素(用pop()方法)。对于队列,则有两个开口,可以看作有两个口的管道,从一个方向把球塞进去(push()),从另外一个方向取出来(pop()),那么取出来的顺序还是和塞进去的顺序一样的,即。比如下图,依次入队是(出队也是)1,2,3,4,先放入栈A,再将栈A的元素依次取出并放入栈B,此时栈B内元素的出栈顺序也是1,2,3,4了。

massive_jiang的博客 651

利用栈和队列的基本运算将所构建的队列中的内容进行逆转(C语言实现)

栈和队列基本运算包括判断队空isQueueEmpty()、出队outQqueue()、入队enQueue()、初始化栈initStack()、判断栈空isEmptyStack()、入栈push()、弹栈pop()等。要求:编写一个算法,利用栈和队列的基本运算将所构建的队列中的内容进行逆转。函数原型为void reverse(cqueue *q).栈和队列的基本运算可以看我之前的文章。

qq_60545192的博客 1315

利用栈和队列将队列中的元素逆置☆

题目:有一个队列和一个栈,设计一个算法是队列中的元素逆置。 分析: 我们可以一次取出队列中的元素放到栈中,然后在依次取出入队。 代码: struct Stack { int* arr; //内存首地址 int len; //栈的容量 int top; //栈的下标 }; struct Squeue {//这里我才用的是循环队列,也可以不用循环队列 int *arr; int front, rear; }; #define _CRT_SECURE_NO_WARNINGS #...

北街lhy的博客 7259

【数据结构 Java 版】详解栈和队列的实现

文章目录1. 栈1.1 概念1.2 助解图题1.3 栈的数组实现1.4 问题1.5 栈的单链表实现2. 队列2.1 概念2.2 问题2.3 队列的单链表实现2.4 数组实现队列2.5 循环队列2.6 双端队列3. 栈和队列练习题3.1 有效的括号3.2 用队列实现栈3.3 用栈实现队列3.4 实现一个最小栈3.5 设计循环队列 1. 栈 1.1 概念 栈:是一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。 特点:栈中的数据元素遵循先进后出的原则,但要注意进的同时也可以出,元素不是要全部进展

吞吞吐吐大魔王的博客 6935
上一篇: Android 服务概要
下一篇: 算法 中的 散列表(哈希表)
Seas.Su
博客等级 码龄9年 19粉丝 67原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值