算法模板之栈图文详解

在这里插入图片描述
🌈个人主页:聆风吟
🔥系列专栏:算法模板、数据结构
🔖少年有梦不应止于心动,更要付诸行动。


文章目录

  • 📋前言
  • 一. ⛳️模拟栈
    • 1.1 🔔用数组模拟实现栈
      • 1.1.1 👻栈的定义
      • 1.1.2 👻向栈顶插入一个数 x(进栈操作)
      • 1.1.3 👻从栈顶弹出一个元素(出栈操作)
      • 1.1.4 👻判断栈是否为空
      • 1.1.5 👻查询栈顶元素
    • 1.2 🌟模板提取(重点)🌟
  • 二. ⛳️题目练习
    • 2.1 题目
    • 2.2 输入样例
    • 2.3 输出样例
    • 2.4 c++代码
  • 📝结语

📋前言

    💬 hello! 各位铁子们大家好哇,我们上期已经学习了双链表的算法模板,不知道大家都已经掌握了吗?如果你还有缺漏可以通过下面专栏自行跳转学习,今天作者又又又给大家带来了栈的算法模板详细讲解,让我们一起加油进步。
    📚 系列专栏:本期文章收录在《算法模板》,大家有兴趣可以浏览和关注,后面将会有更多精彩内容!
    🎉 欢迎大家关注🔍点赞👍收藏⭐️留言📝



一. ⛳️模拟栈

1.1 🔔用数组模拟实现栈

1.1.1 👻栈的定义

    栈(Stack):是只允许在一端进行插入或删除的线性表。首先栈是一种线性表,但限定这种线性表只能在某一端进行插入和删除操作。如下图是栈的示意图:
在这里插入图片描述

1.1.2 👻向栈顶插入一个数 x(进栈操作)

    根据栈的定义可知,我们可以将数组看作是横放的栈的示意图,即将数组的首元素位置看作栈底、当前元素的位置看作栈顶,便可以实现数组模拟栈的相关操作。如果我们要向栈顶插入一个元素,将栈顶指针向后移动一位将元素插入进去即可。如下图所示:
在这里插入图片描述
代码展示(建议结合图示看注释):

//top表示栈顶
int stk[N], top = -1;

// 向栈顶插入一个数x
stk[++top] = x;

1.1.3 👻从栈顶弹出一个元素(出栈操作)

    根据上面所知,如果我们要从栈顶弹出一个元素,我们只需要将栈顶指针向前移动一位即可。如下图所示:
在这里插入图片描述
代码展示(建议结合图示看注释):

// 从栈顶弹出一个数
top--;

1.1.4 👻判断栈是否为空

    根据上面所知,如果我们要判断栈是否为空,我们只需要判断栈顶指针是否指向数组首元素左边的位置(即判断top是否等于-1位置)。如下图所示:
在这里插入图片描述
代码展示(建议结合图示看注释):

// 判断栈是否为空,如果 top >= 0,则表示不为空
if (top >= 0)
{
	//输出栈不为空	
}
else
{
	//输出栈为空
}

1.1.5 👻查询栈顶元素

    根据下图所示,查询栈顶元素只需要输出数组下标为top的值即可;
在这里插入图片描述
代码展示(建议结合图示看注释):

// 栈顶的值
stk[top];

1.2 🌟模板提取(重点)🌟

C++代码:

// top表示栈顶
int stk[N], top = -1;

// 向栈顶插入一个数x
stk[++top] = x;

// 从栈顶弹出一个数
top-- ;

// 栈顶的值
stk[top];

// 判断栈是否为空,如果 top >= 0,则表示不为空
if (top >= 0)
{
	//输出栈不为空	
}
else
{
	//输出栈为空
}


二. ⛳️题目练习

⌈ 在线OJ链接,可以转至此处自行练习 ⌋

2.1 题目

在这里插入图片描述

2.2 输入样例

10
push 5
query
push 6
pop
query
pop
empty
push 4
query
empty

2.3 输出样例

5
5
YES
4
NO

2.4 c++代码

#include <iostream>

using namespace std;

const int N = 100010;
int stk[N], top = -1;

int main()
{
    int m = 0;
    cin >> m;
    
    while(m--)
    {
        string s;
        cin >> s;
        if(s == "push")
        {
            //在栈顶插入一个元素
            int x = 0;
            cin >> x;
            stk[++top] = x;
        }
        else if(s == "pop")
        {
            //从栈顶弹出一个元素
            top--;
        }
        else if(s == "empty")
        {
            //判断栈是否为空
            cout << (top >= 0 ? "NO":"YES" ) << endl;
        }
        else
        {
            //查询栈顶元素
            cout << stk[top] << endl;
        }
    }
    
    return 0;
}


📝结语

     本文主要讲解栈的定义、使用数组模拟实现栈的相关操作:向栈顶插入一个数x、从栈顶弹出一个元素、判断栈是否为空、查询栈顶元素,通过栈相关操作的讲解最终我们提取出了栈的算法模板,并通过一个题目的练习结束了今天的课程。希望大家课下能够多敲多练,孰能生巧。

     今天的干货分享到这里就结束啦!如果觉得文章还可以的话,希望能给个三连支持一下,聆风吟的主页还有很多有趣的文章,欢迎小伙伴们前去点评,您的支持就是作者前进的最大动力!
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/262851.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

R语言贝叶斯网络模型、INLA下的贝叶斯回归、R语言现代贝叶斯统计学方法、R语言混合效应(多水平/层次/嵌套)模型

目录 ㈠ 基于R语言的贝叶斯网络模型的实践技术应用 ㈡ R语言贝叶斯方法在生态环境领域中的高阶技术应用 ㈢ 基于R语言贝叶斯进阶:INLA下的贝叶斯回归、生存分析、随机游走、广义可加模型、极端数据的贝叶斯分析 ㈣ 基于R语言的现代贝叶斯统计学方法&#xff08;贝叶斯参数估…

如何把透明OLED显示屏介绍给用户人群

透明OLED显示屏是一种新型的显示技术&#xff0c;它具有透明度高、色彩鲜艳、对比度高、响应速度快等优点。下面是一些介绍透明OLED显示屏的要点&#xff1a; 透明度&#xff1a;透明OLED显示屏的最大特点是其透明度&#xff0c;它可以让光线透过显示屏&#xff0c;使得屏幕背后…

TG5032CGN TCXO / VC-TCXO(超高稳定10pin端子型)

TG5032CGN 晶振是EPSON推出的一款额定频率10MHz至40MHz的石英晶体振荡器&#xff0c;该型号采用互补金属氧化物半导体技术&#xff0c;输出波形稳定可靠。外形尺寸为5.0 3.2 1.45mm具有小尺寸,高稳定性。该款晶体振荡器&#xff0c;可以在G&#xff1a;-40C至 85C的温度内稳定…

共建还是对抗?BTC 铭文风波中开发者、矿工与社区的平衡艺术

近期&#xff0c;比特币铭文正加速进入一场争议与危机的漩涡。12 月 6 日&#xff0c;比特币核心开发人员 Luke Dashjr 在 X 表示&#xff0c;铭文&#xff08;Inscriptions&#xff09;正在利用比特币核心客户端 Bitcoin Core 的一个漏洞向区块链发送垃圾信息&#xff0c;Bitc…

在灾难推文分析场景上比较用 LoRA 微调 Roberta、Llama 2 和 Mistral 的过程及表现

引言 自然语言处理 (NLP) 领域的进展日新月异&#xff0c;你方唱罢我登场。因此&#xff0c;在实际场景中&#xff0c;针对特定的任务&#xff0c;我们经常需要对不同的语言模型进行比较&#xff0c;以寻找最适合的模型。本文主要比较 3 个模型: RoBERTa、Mistral-7B 及 Llama-…

基于javaWeb的長安智慧医疗管理系统设计与实现论文

長安智慧医疗管理系统 摘 要&#xff1a;如今社会上各行各业&#xff0c;都在用属于自己专用的软件来进行工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。互联网的发展&#xff0c;离不开一些新的技术&#xff0c;而新技术的产生往往是为了解决…

Shell 脚本应用(三)

使用 for 循环语句 for语句的结构 使用for循环语句时&#xff0c;需要指定一个变量及可能的取值列表&#xff0c;针对每个不同的取值重复执行相同 的命令序列&#xff0c;直到变量值用完退出循环。在这里&#xff0c;“取值列表”称为for语句的执行条件&#xff0c;其中包括多…

makefile例子

1、目录结构 2、文件 2.1、 test.h extern void test(void); 2.2 、test.c #include <stdio.h>void test(void) {printf("Hello world!\n"); }2.3 、main.c #include "test.h"int main(void) {test();return 0; }2.4、makefile TEST_DIR : $(s…

ai学习笔记-入门

目录 一、人工智能是什么&#xff1f;可以做什么&#xff1f; 人工智能(Artificial Intelligence): 人工智能的技术发展路线&#xff1a; 产业发展驱动因素&#xff1a;数据、算力、算法 二、人工智能这个工具的使用原理入门 神经网络⭕数学基础 1.神经网络的生物表示 …

SpringMVC:执行原理详解、配置文件和注解开发实现 SpringMVC

文章目录 SpringMVC - 01一、概述二、SpringMVC 执行原理三、使用配置文件实现 SpringMVC四、使用注解开发实现 SpringMVC1. 步骤2. 实现 五、总结注意&#xff1a; SpringMVC - 01 一、概述 SpringMVC 官方文档&#xff1a;点此进入 有关 MVC 架构模式的内容见之前的笔记&a…

小红书kos和kop有什么区别,营销玩法有哪些

相信熟悉媒介传播的朋友&#xff0c;对于kol和koc都不陌生。但随着平台的发展和市场的进步&#xff0c;又出现了kos和kop。那么小红书kos和kop有什么区别&#xff0c;营销玩法有哪些&#xff1f; 一、什么是kos和kop KOS&#xff0c;全称叫做Key Opinion Sales&#xff0c;意思…

安装 PyCharm 2021.1 保姆级教程

作者&#xff1a;billy 版权声明&#xff1a;著作权归作者所有&#xff0c;商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处 前言 目前能下载到的最新版本是 PyCharm 2021.1。 请注意对应 Python 的版本&#xff1a; Python 2: 2.7Python 3: >3.6, <3.11…

APEX后台弱密码增强改造出现的问题及解决方法

为了加强APEX后台密码的安全性和可靠性&#xff0c;对其进行弱密码改造&#xff0c;通过改写登录函数&#xff0c;判断密码可靠性&#xff0c;在密码不符合条件&#xff08;密码长度必须大于8位小于16位&#xff0c;其包含数字、大小写字母与特殊符号&#xff09;时跳转到密码修…

网络基础篇【网线的制作,OSI七层模型,集线器和交换机的介绍,路由器的介绍与设置】

目录 一、网线制作 1.1 工具介绍 1.1.1网线 1.1.2 网线钳 1.1.3 水晶头 1.1.4 网线测试仪 二、OSI七层模型 2.1 简介 2.2 OSI模型层次介绍 2.2.1 结构图 2.2.2 数据传输过程 2.3 相关网站 二、集线器 2.1 介绍 2.2 适用场景 三、交换机 3.1 介绍 3.2 适用场景…

Linux(二)常用命令

文章目录 一、文件管理命令1.1 chmod1.2 chown1.3 cat1.4 cp1.5 find1.6 head1.7 tail1.8 less1.9 more1.10 mv1.11 rm1.12 touch1.13 vim1.14 >和>>1.15 scp1.16 ln1.17 怎么用命令查看日志 二、文档管理命令2.1 grep2.2 wc2.3 echo 三、磁盘管理命令3.1 cd3.2 df3.3…

JMeter常见配置及常见问题修改

一、设置JMeter默认打开字体 1、进入安装目录&#xff1a;apache-jmeter-x.x.x\bin\ 2、找到 jmeter.properties&#xff0c;打开。 3、搜索“ languageen ”&#xff0c;前面带有“#”号.。 4、去除“#”号&#xff0c;并修改为&#xff1a;languagezh_CN 或 直接新增一行&…

MySQL增删改查(查询)

White graces&#xff1a;个人主页 &#x1f649;专栏推荐:Java入门知识&#x1f649; &#x1f649; 内容推荐:《MySQL增删改查(增加)》&#x1f649; &#x1f439;今日诗词:八百虎贲踏江去,十万吴兵丧胆还&#x1f439; ⛳️点赞 ☀️收藏⭐️关注&#x1f4ac;卑微小博主…

网络技术基础与计算思维实验教程_4.1_PSTN和以太网互连实验

实验内容 实验目的 实验原理 关键命令说明 实验步骤 构建以太网 工作区中放置路由器 交换机 PC机 直通线互连PC0和交换机 交换机和路由器 构建PSTN 放置PSTN 放置PC 为路由器安装modem 打开电源 再为终端安装modem 单击路由器选择图形配置 这个IP地址将成为PC0的默认网关地…

时间序列分析

常用数据集 2.monash数据集 官网链接 我们的存储库包含30个数据集&#xff0c;包括公开可用的时间序列数据集(不同格式)和由我们管理的数据集。 DatasetDomainNo: of SeriesMin. LengthMax. LengthCompetitionMultivariateDownloadSourceM1Multiple100115150YesNoYearly Quart…

配置MUX VLAN示例(接入层设备)

一、组网需求 在企业网络中&#xff0c;企业所有员工都可以访问企业的服务器。但对于企业来说&#xff0c;希望企业内部部分员工之间可以互相交流&#xff0c;而部分员工之间是隔离的&#xff0c;不能够互相访问。为了解决上述问题&#xff0c;可在连接终端的交换机上部署MUX …