栈--专题讲解

news2025/1/13 3:06:55

文章目录

    • 基本概念
    • 模拟栈
    • 数据结构-栈:stack
        • 头文件
        • 定义
        • 基本操作
    • 实例:火车进栈
      • 题目大意
      • 解题思路
      • AC代码

基本概念

栈的定义
栈(stack)是限定仅在表尾进行插入或者删除的线性表。对于栈来说,表尾端称为栈顶(top),表头端称为栈低(bottom)。不含元素的空表称为空栈。因为栈限定在表尾进行插入或者删除,所以栈又被称为后进先出的线性表(简称LIFO:Last in, First out.结构)。

例如:stack:1 2 3 4 5
类似于放盘子
视图如下:

后进先出
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

模拟栈

先进后出
比较简单直接放截屏
在这里插入图片描述

#include<bits/stdc++.h>
using namespace std;

# 用数组模拟栈
const int N=100;
int stk[N],tt=0;  # stk代表的是栈数组,tt就是栈顶指针

# 栈顶
栈顶指针:tt
栈顶元素:stk[tt];

# 入栈:栈顶指针先+1,然后入栈
stk[++tt]=66;

# 出栈:栈顶指针先-1,然后出栈
tt--;

# 判断栈是否为空
if(tt==0) true
else false

数据结构-栈:stack

栈,先进后出

头文件

#include <stack> 

定义

stack<int> st;

基本操作

empty() 堆栈为空则返回真

pop() 移除栈顶元素

push() 在栈顶增加元素

size() 返回栈中元素数目

top() 返回栈顶元素

#include<bits/stdc++.h>
#include<stack>
// 包含了stack这个头文件
using namespace std;

// 使用数据结构的栈
//定义一个栈
stack<int> stk;

/*
empty() 堆栈为空则返回真

pop() 移除栈顶元素

push() 在栈顶增加元素

size() 返回栈中元素数目

top() 返回栈顶元素
*/

int main(){
    
    //入栈
    stk.push(10);
    stk.push(20);
    stk.push(30);
    
    //查看栈顶元素
    cout<<stk.top();
    //cout == print
    
    //出栈
    stk.pop();
    
    //查看栈顶元素
    cout<<" "<<stk.top();
    
    //查看栈元素个数
    cout<<" size="<<stk.size();
    
    return 0;
}

实例:火车进栈

原题链接:
https://www.acwing.com/problem/content/131/

题目描述
这里有 n 列火车将要进站再出站,但是,每列火车只有 1 节,那就是车头。

这 n 列火车按 1 到 n 的顺序从东方左转进站,这个车站是南北方向的,它虽然无限长,只可惜是一个死胡同,而且站台只有一条股道,火车只能倒着从西方出去,而且每列火车必须进站,先进后出。

也就是说这个火车站其实就相当于一个栈,每次可以让右侧头火车进栈,或者让栈顶火车出站。

车站示意如图:

        出站<——    <——进站
                 |车|
                 |站|
                 |__|

现在请你按《字典序》输出前 20 种可能的出栈方案。

输入格式
输入一个整数 n,代表火车数量。

输出格式
按照《字典序》输出前 20 种答案,每行一种,不要空格。

数据范围
1≤n≤20
输入样例:
3
输出样例:
123
132
213
231
321

题目大意

输出 1 、 2 、 . . . . . . 、 n {1、2、......、n} 12......n的按字典序前20个出栈情况

解题思路

模拟栈的出栈情况,对于每一次栈有两个选择,要么进栈,要么出栈。
由此,我们可以知道我们需要三个变量:可以用stack3来表示入栈的数值,每入一次栈就加一;用stack2表示栈中的情况,当栈不为空的时候才可以出栈;stack1来表示出栈情况
我们可以通过递归来实现整个过程:

1.当stack1的长度为n时,那么达到边界
2.当stack2不为空的时候出栈
3.入栈

注意:每次操作后记得还原栈的情况
在这里插入图片描述

AC代码

#include<iostream>
#include<vector>
#include<stack>
using namespace std;

int n;
int cnt = 20,stack3;
vector<int> stack1;
stack<int> stack2;

void dfs(){
    if(!cnt) return ;
    //边界条件
    if(stack1.size()==n){
        cnt--;
        for(int i=0;i<n;i++) cout<<stack1[i];
        cout<<endl;
        return ;
    }
    
    //出栈
    if(!stack2.empty()){
        stack1.push_back(stack2.top());
        stack2.pop();
        dfs();
        stack2.push(stack1.back());
        stack1.pop_back();
    }
    
    //入栈
    if(stack3<n){
    stack3++;
    stack2.push(stack3);
    dfs();
    stack2.pop();
    stack3--;
    }
    return;
}

int main(){
    cin>>n;
    dfs();
    return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

web服务器----基于http协议搭建的静态网站详解

一&#xff0c;WWW的简介 1、什么是 www www 是 world wide web 的缩写&#xff0c;也就是全球信息广播的意思。通常说的上网就是使用 www 来查询用户所需要的信息。www 可以结合文字、图形、影像以及声音等多媒体&#xff0c;并通过可以让鼠标单击超链接的方式将信息以 Inter…

Docker容器搭建及基本使用

一、安装环境 操作系统&#xff1a;CentOS 7&#xff08;建议用7或以上&#xff0c;因为6版本有部分功能不兼容&#xff09; 二、Docker安装 1、卸载旧版本 yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrota…

linux修改密码报错‘Authentication token manipulation error‘

本次事故使用操作系统为centos7 1、报错起因&#xff1a; 利用chage设置root用户密码定期更换后&#xff0c;到期之后登录系统&#xff0c;输入密码之后&#xff0c;提示要改密码&#xff0c;输入新密码之后&#xff0c;报错 ‘Authentication token manipulation error’ &a…

【k8s系列】gvisor安装与containerd集成

文章目录安装与containerd集成下发runtimeclass资源修改containerd配置文件准备pod的yaml文件参考资料author: ningan123date: ‘2023-01-11 21:23’updated: ‘2023-01-11 21:31’安装 安装地址&#xff1a;Installation - gVisor ARCH$(uname -m)URLhttps://storage.googlea…

Gotify <2.2.3 存在反射型 XSS 漏洞(MPS-2023-0815)

漏洞描述 Gotify 是 Go 语言开发的开源组件&#xff0c;用作于发送和接收消息的服务器。 由于 2.2.3 之前版本的 Gotify 使用具有反射型 XSS 漏洞版本的 swagger-ui 生成文档&#xff0c;当用户访问 Gotify /docs 页面时存在反射型 XSS 漏洞。 攻击者可诱导 Gotify 用户点击…

【学习笔记】【Pytorch】四、torchvision中的数据集使用

【学习笔记】【Pytorch】四、torchvision中的数据集使用学习地址主要内容一、datasets模块介绍二、datasets.CIFAR10类的使用1.使用说明2.代码实现学习地址 PyTorch深度学习快速入门教程【小土堆】. 主要内容 一、datasets模块介绍 介绍&#xff1a;一些加载数据的函数及常用…

P6:DataLoader的使用

1、准备数据集&#xff08;测试集&#xff09; import torchvisiontest_data torchvision.datasets.CIFAR10(./dataset, trainFalse, transformtorchvision.transforms.ToTensor()) 注意数据集中的图片是PIL的格式&#xff0c;需要格式转换。 2、使用DataLoader from torch…

HBase数据库总结(一)

1、 HBase的特点是什么&#xff1f;HBase是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统&#xff0c;HBase不同于一般的关系数据库&#xff0c;它是一个适合于非结构化数据存储的数据库。1&#xff09;大&#xff1a;一个表可以有数十亿行&#xff0c;上百万列2&…

测试开发基础|一文搞定计算机网络(一)

计算机网络知识对测试人员来说是非常重要的基础技能。无论是在平时测试工作中&#xff08;比如接口测试&#xff09;&#xff0c;还是测试技术面试时&#xff0c;都会经常涉猎。很多基础薄弱的同学靠临时抱佛脚突击搜索学习&#xff0c;对系统知识和重点难点的理解总是不够透彻…

认证授权-SpringSecurity

认证授权-SpringSecurity 1. 认证授权概述 1.1 认证授权概念 1.1.1 认证 在互联网中&#xff0c;我们每天都会使用到各种各样的 APP 和网站&#xff0c;在使用过程中通常还会遇到需要注册登录的情况&#xff0c;输入你的用户名和密码才能正常使用&#xff0c;也就是说成为这…

uniapp引入vantweapp踩坑笔记

vue-cli创建uniapp项目引入vantweapp踩坑笔记 uni-app中引入vantweappvue-cli创建uniapp项目引入vantweapp踩坑笔记一、环境准备二、项目搭建三、引入vant第一种方式第二种方式一、环境准备 我用的环境分别是 软件名称版本号下载命令\链接检查是否成功卸载命令Vue-clivue/cli…

JavaScript中的重要概念

JavaScript中的重要概念 1、标识符 标识符&#xff08;Identifier&#xff09;就是名字。JavaScript 中的标识符包括变量名、函数名、参数名、属性名、类名等。 合法的标识符应该注意以下强制规则&#xff1a; 第一个字符必须是字母、下划线&#xff08;_&#xff09;或美元…

发表计算机SCI论文,需要经历哪些阶段? - 易智编译EaseEditing

想在SCI期刊上发表一篇属于自己的论文一定是要经历四个阶段&#xff1a;论文选题、论文写作、期刊投稿和修稿反馈。 1.论文选题&#xff1a;前面已经说过在SCI期刊上发表论文是比较有难度的&#xff0c;是因为SCI期刊通常要求所接收稿件的选题具有较高的创新性和新颖性。 所以…

马蹄集 单位矩阵

单位矩阵 难度&#xff1a;白银 0时间限制&#xff1a;1秒 巴占用内存&#xff1a;64M 输入3X3的整型矩阵A,判断是否为单位矩阵&#xff0c;输出YES或者NO。 格式 输入格式&#xff1a;输入矩阵&#xff0c;空格分隔 输出格式&#xff1a;输出YES或者NO #include<bits/stdc.…

第09讲:Docker镜像制作

我们可以在容器去部署应用&#xff0c;然后把容器转为镜像给测试人员用&#xff0c;由于镜像是不能直接传输的&#xff0c;所以我们将新的镜像转成压缩文件&#xff0c;给测试人员。测试人员把我们的压缩文件还原成一个新的镜像。 一、Linux文件系统组成 Linux文件系统组成由…

mysql快速生成100W条测试数据(2)公司员工信息

首先这个就是我们需要生成的数据类型&#xff0c;这种只是我们用于测试以及学习时候使用&#xff0c;正常来讲公司架构会比这个要复杂的多 #mermaid-svg-fxDINAOpv25PiDLG {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid…

数据库,计算机网络、操作系统刷题笔记31

数据库&#xff0c;计算机网络、操作系统刷题笔记31 2022找工作是学历、能力和运气的超强结合体&#xff0c;遇到寒冬&#xff0c;大厂不招人&#xff0c;可能很多算法学生都得去找开发&#xff0c;测开 测开的话&#xff0c;你就得学数据库&#xff0c;sql&#xff0c;oracle…

SpringBoot中JPA的基本使用

1、Jpa 是什么 JPA顾名思义就是Java Persistence API的意思&#xff0c;是JDK 5.0注解或XML描述对象&#xff0d;关系表的映射关系&#xff0c;并将运行期的实体对象持久化到数据库中。 2、优势 2.1标准化 JPA 是 JCP 组织发布的 Java EE 标准之一&#xff0c;因此任何声称符…

美国空运专线 美国空运专线时效多久

美国空运专线是国内到美国的优势渠道&#xff0c;为跨境卖家专门研发的货物海关清关快递/卡车配送的专线运输服务&#xff0c;范畴覆盖全部美国地区&#xff0c;各路经安排发货次数更高一些&#xff0c;时效更有保障。一、美国空运专线是什么 美国空运专线是专门将货物运送到美…

开学季如何运营跑腿系统?

现在学生们都在放寒假中&#xff0c;再过一段时间就又到开学季了&#xff0c;开学季是运营好跑腿项目的关键时刻&#xff0c;刚开学的时候如何让同学继续使用呢&#xff1f;这时候我们可以采取一些优惠政策来吸引同学&#xff0c;我们可以在后台设置一些优惠券&#xff0c;满减…