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

【面试入门必刷】算法入门-数据结构-栈(一)

【牛客网面试入门必刷】算法入门-数据结构-栈(一)

  • 前言
  • 算法入门刷题训练
    • 题一:AB1 【模板】栈
      • 题目分析
      • 理论准备
      • 题解
  • 小结

📦个人主页:一二三o-0-O的博客
🏆技术方向:C/C++客户端资深工程师(直播+音视频剪辑)
👨‍💻作者简介:数据结构算法与音视频领域创作者
📒 系列专栏:牛客网面试必刷
📣专栏目标:帮助伙伴们通过系统训练,掌握数据结构与算法,收获心仪Offer
📝推荐一个找工作神器:牛客刷题网 【面试经验|实习招聘内推,求职就业一战解决】
🧡如果对您有帮助的话,欢迎点赞👍收藏📂,关注不迷路

前言

开启刷题,请点击右边链接进行跳转点击这里

在这里插入图片描述

算法入门刷题训练

题一:AB1 【模板】栈

题目分析

描述
请你实现一个栈。
操作:
push x:将 加x 入栈,保证 x 为 int 型整数。
pop:输出栈顶,并让栈顶出栈
top:输出栈顶,栈顶不出栈

根据题目描述是要实现一个栈,因此我们可以使用一个基础的容器来封装一个栈结构来实现栈的入栈,出栈以及返回栈顶元素的功能。这里选择使用基础容器数组:vector来封装一个栈结构。

理论准备

首先我们要掌握vector的一些基础操作:

添加操作
vector v;
v.push_back(1);//v = 1
v.emplace_back(2);//v = 1 2

删除操作
vector v{ 1,2,3,4,5 };
v.erase(v.begin());//删除1
v.erase(v.begin(),b.begin()+3);//删除1到3

题解

  1. 首先我们需要使用vector封装一个stack类

class stack{
vector v;
}

  1. 实现push方法:将要入栈的元素添加到vector容器中

void push(int x){
// 使用vector的添加方法
v.push_back(x);
}

  1. 实现pop方法:将栈顶的元素弹出

void pop(){
// 如果数组为空,输出报错
if(v.size() == 0){
cout << “error” << endl;
}else{
// 数组不为空,输出数组的最后一个元素
cout << v[v.size()-1] << endl;
// 输出后,将最后一个元素从容器中删除
v.erase(v.begin() + v.size()-1);
}
}

  1. 实现top方法:返回栈顶的元素

void top(){
// 如果数组为空,输出报错
if(v.size() == 0){
cout << “error” << endl;
}else{
// 数组不为空,返回数组的最后一个元素
cout << v[v.size()-1] << endl;
}
}

  1. 完整代码如下:
#include <iostream>
#include <vector>
using namespace std;

class stack{
    vector<int> v;
public:
	// push方法
    void push(int x){
        v.push_back(x);
    }  
    // pop方法
    void pop(){
        if(v.size() == 0){
            cout << "error" << endl;
        }else{
            cout << v[v.size()-1] << endl;
            v.erase(v.begin() + v.size()-1);
        }  
    }
    // top方法
    void top(){
        if(v.size() == 0){
            cout << "error" << endl;
        }else{
            cout << v[v.size()-1] << endl;
        }
    }
};

int main() {
    int n{};
    
    cin >> n;
    stack st;
    for(int i{};i<n;++i){
        string op;
        cin >> op;
        if(op == "push"){
            int x{};
            cin >> x;
            st.push(x);
        }else if(op == "pop"){
            st.pop();
        }else if(op == "top"){
            st.top();
        }
    }
    
    return 0;
}
// 64 位输出请用 printf("%lld")

当提交成功后,会展示如下界面,那么恭喜这道题目就通过了!
在这里插入图片描述

小结

祝愿所有的伙伴都能拿到自己心仪的Offer!📣伙伴们点击右边链接立刻开启刷题吧:牛客——刷题网

相关文章:

  • 《论文复现》MOJITALK: Generating Emotional Responses at Scale 部分过程讲解
  • GBase 8s 安全性(6)- 备份与恢复
  • 【人工智能】神经网络八股扩展
  • 如何获取大数据行业高薪岗位offer?
  • mac mongodb6.0.1安装
  • Spring常见问题解决 - @EnableWebMvc 导致自定义序列化器失效
  • 深入理解JVM(一)JVM与Java体系结构
  • 【数据分享】 中国五批3610个国家级非物质文化遗产空间分布数据
  • 7、JAVA入门——if选择结构
  • 【论文-目标追踪】BoT-SORT: Robust Associations Multi-Pedestrian Tracking
  • 【JetBrains】安装使用技巧
  • 进程间通信之有名(命名)管道、断言函数
  • iPayLinks艾贝盈金融科技,助力健身器材企业乘风破浪
  • bjdctf_2020_babyrop【BUUCTF】
  • Scss--将node-sass切换为sass(原dart-sass)
  • #Java异常处理
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • 2017 年终总结 —— 在路上
  • JavaScript-Array类型
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • Linux各目录及每个目录的详细介绍
  • log4j2输出到kafka
  • spring security oauth2 password授权模式
  • 从0到1:PostCSS 插件开发最佳实践
  • 类orAPI - 收藏集 - 掘金
  • 它承受着该等级不该有的简单, leetcode 564 寻找最近的回文数
  • 腾讯视频格式如何转换成mp4 将下载的qlv文件转换成mp4的方法
  • 【云吞铺子】性能抖动剖析(二)
  • ​LeetCode解法汇总1410. HTML 实体解析器
  • ​Linux·i2c驱动架构​
  • ​你们这样子,耽误我的工作进度怎么办?
  • %@ page import=%的用法
  • (06)Hive——正则表达式
  • (html5)在移动端input输入搜索项后 输入法下面为什么不想百度那样出现前往? 而我的出现的是换行...
  • (附源码)计算机毕业设计ssm基于Internet快递柜管理系统
  • .axf 转化 .bin文件 的方法
  • .Family_物联网
  • .NET框架
  • /dev下添加设备节点的方法步骤(通过device_create)
  • [ 渗透测试面试篇 ] 渗透测试面试题大集合(详解)(十)RCE (远程代码/命令执行漏洞)相关面试题
  • [20171106]配置客户端连接注意.txt
  • [BUUCTF]-PWN:[极客大挑战 2019]Not Bad解析
  • [C#] 如何调用Python脚本程序
  • [C#]winform制作圆形进度条好用的圆环圆形进度条控件和使用方法
  • [HTML]Web前端开发技术18(HTML5、CSS3、JavaScript )HTML5 基础与CSS3 应用——喵喵画网页
  • [Interview]Java 面试宝典系列之 Java 多线程
  • [JS]Math.random()随机数的二三事
  • [JS入门到进阶] 前端开发不能写undefined?这是误区!
  • [LeetCode系列]3元素最近和问题的O(n^2)解法
  • [leveldb] 2.open操作介绍
  • [Linux]——彻底学通权限
  • [No000016]为什么假期计划总是做不到?
  • [Salesforce组件开发][LWC] 弹出框开发
  • [scikit-learn] 第一章 初识scikit-learn及内置数据集介绍
  • [socket 弹 shell] msg_box3