【数据结构练习】栈的面试题集锦

news2024/12/29 8:46:54

目录

前言:

1.进栈过程中可以出栈的选择题

2.将递归转化为循环

3.逆波兰表达式求值

4.有效的括号

5. 栈的压入、弹出序列

6. 最小栈 


前言:

数据结构想要学的好,刷题少不了,我们不仅要多刷题,还要刷好题!为此我开启了一个必做好题锦集的系列,此为第一篇选择题篇,该系列会不定期更新敬请期待!

栈(Stack)的详解_WHabcwu的博客-CSDN博客


1.进栈过程中可以出栈的选择题

1. 若进栈序列为 1,2,3,4 ,进栈过程中可以出栈,则下列不可能的一个出栈序列是()
A: 1,4,3,2                 B: 2,3,4,1                 C: 3,1,4,2               D: 3,4,2,1
A选项进出入栈顺序:
push(1)->pop() 出1;
 push(2)->push(3)->push(4)->pop() 出4;
pop() 出3;
pop() 出2;
B C D步骤相同,通过分析可知C明显错误;
选C

2.将递归转化为循环

比如:逆序打印链表
使用栈的方法解决:
        public void printfList(Node head) {
            if (head == null) {
                return;
            }
            Node cur=head;
            Stack<Node> stack = new Stack<>();
            while (cur!=null){
                stack.push(cur);
                cur=cur.next;
            }
            while(!stack.empty()){
                System.out.println(stack.pop().val);
            }

        }

3.逆波兰表达式求值

逆波兰表达式求值icon-default.png?t=N7T8https://leetcode.cn/problems/evaluate-reverse-polish-notation/

 

要想彻底的掌握这道题,必先清楚的理解后缀表达式

 总结:

(1)遍历数字,依此压栈

(2)遇到' + ' ' - ' ' * ' ' / '就出栈2数,第一次出栈的数做为右操作数, 第二次出栈的数做为左操作数

(3)再把(2)运算的数压栈

(4)重复(1)(2)(3)

故代码: 

class Solution {
          public int evalRPN(String[] tokens) {
        Stack<Integer> stack = new Stack<>();
        for (String x : tokens) {
            if (!isoperation(x)) {
                stack.push(Integer.parseInt(x));
            } else {
                int x1 = stack.pop();
                int x2 = stack.pop();
                switch (x) {
                    case "+":
                        stack.push(x2 + x1);
                        break;
                    case "-":
                        stack.push(x2 - x1);
                        break;
                    case "*":
                        stack.push(x2 * x1);
                        break;
                    case "/":
                        stack.push(x2 / x1);
                        break;
                }
            }
        }
        return stack.pop();
    }

    public boolean isoperation(String x) {
        if (x.equals("+")  || x.equals("-") || x.equals("*") || x.equals("/")) {
            return true;
        }
        return false;
    }
}

4.有效的括号

有效的括号icon-default.png?t=N7T8https://leetcode.cn/problems/valid-parentheses/

 

class Solution {
    public boolean isValid(String s) {
     Stack<Character> stack = new Stack<>();
        for (int i = 0; i < s.length(); i++) {
            char x=s.charAt(i);
            if(x=='('||x=='{'||x=='['){
                stack.push(x);
            }else{
                if(stack.empty()){
                    return false;
                }
                char y=stack.peek();
                if(y=='('&&x==')'||y=='{'&&x=='}'||y=='['&&x==']'){
                    stack.pop();
                }else{
                    return false;
                }
            }
        }
        if(!stack.empty()){
            return false;
        }
        return true;
    }
    
}

 解析:

(1)遍历给定的字符串,由于后遇到的左括号要先闭合,因此我们可以将这个左括号放入栈顶。

(2)当我们遇到一个右括号时,我们可以取出栈顶的左括号并判断它们是否是相同类型的括号,栈为空返回flase,不为空但不是相同的类型,也返回 false。

(3)在遍历结束后,如果栈中没有左括号,返回 false。


5. 栈的压入、弹出序列

 

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param pushV int整型一维数组 
     * @param popV int整型一维数组 
     * @return bool布尔型
     */
      public boolean IsPopOrder (int[] pushV, int[] popV) {
        Stack<Integer> stack = new Stack<>();
        int j=0;
        for (int i = 0; i < pushV.length; i++) {
            stack.push(pushV[i]);
            while(j<popV.length&&!stack.empty()&&stack.peek().equals(popV[j])){
                stack.pop();
                j++;
            }
        }
        return stack.empty();
    }
}

解析:


6. 最小栈 

 最小栈icon-default.png?t=N7T8https://leetcode.cn/problems/min-stack/

 

import java.util.Stack;

public class MinStack {
    private Stack<Integer> stack;
    private Stack<Integer> minstack;

    public MinStack() {
        this.stack = new Stack<>();
        this.minstack = new Stack<>();
    }

    public void push(int val) {
        stack.push(val);
        if (minstack.empty()) {
            minstack.push(val);
        } else {
            if (minstack.peek() >= val) {
                minstack.push(val);
            }
        }
    }

    public void pop() {
           if(!stack.empty()){
            int x = stack.pop();
            if (x == minstack.peek()) {
                minstack.pop();
            }
        }
    }

    public int top() {
        return stack.peek();
    }

    public int getMin() {
        return minstack.peek();
    }
}

 解析:

辅助栈法:

(1)一个用来正常存放数据->stack

(1)一个用来存放最小数据->minstack

  private Stack<Integer> stack;
    private Stack<Integer> minstack;

 push:

stack无差别入栈,对于minstack进行判断,若为空,直接入栈,若不为空,则需要与栈顶元素进行比较,若小于等于则入栈。

其余过于简单,无需多讲。


以上为我个人的小分享,如有问题,欢迎讨论!!! 

都看到这了,不如关注一下,给个免费的赞 

 

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

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

相关文章

动态规划:路径和子数组问题(C++)

动态规划&#xff1a;路径和子数组问题 路径问题1.不同路径&#xff08;中等&#xff09;2.不同路径II&#xff08;中等&#xff09;3.下降路径最⼩和&#xff08;中等&#xff09;4.地下城游戏&#xff08;困难&#xff09; 子数组问题1.最大子数组和&#xff08;中等&#xf…

【Java】关于JDK 8的HashMap

文章目录 HashMap 简介数据结构Hash构造方法get(key)方法步骤一&#xff1a;通过key获取所在桶的第一个元素是否存在步骤二:该节点的hash和key是否与要查询的hash和key匹配步骤三:当对应桶中不止一个节点时&#xff0c;根据不同节点类型查询 put(key,value)为什么树化&#xff…

4.正则提取html中的img标签的src内容

我们以百度贴吧的1吧举例 目录 1 把网页搞下来 2 收集url 3 处理url 4 空的src 5 容错 6 不使用数字作为文件名 7 并不是所有的图片都用img标签表示 8 img标签中src请求下来不一定正确 9 分页 1 把网页搞下来 搞下来之后&#xff0c;双击打开是这样的 2 收…

leetcode 143. 重排链表

2023.9.5 先将链表中的节点存储到数组中&#xff0c;再利用双指针重新构造符合条件的链表。代码如下&#xff1a; /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNod…

java八股文面试[数据库]——Page页的结构

mysql中数据是存储在物理磁盘上的&#xff0c;而真正的数据处理又是在内存中执行的。由于磁盘的读写速度非常慢&#xff0c;如果每次操作都对磁盘进行频繁读写的话&#xff0c;那么性能一定非常差。为了上述问题&#xff0c;InnoDB将数据划分为若干页&#xff0c;以页作为磁盘与…

了解下iVX,它可能会刷新你对传统软件开发的认知!

知识目录 前言一、聊聊传统编程语言二、iVX的诞生三、iVX VS 传统编程语言3.1 图形化 vs 文本化3.2 逻辑与语法的解耦3.3 组件与库3.4 编译与代码生成3.5 IDE与语言设计的整合3.6 面向群体3.7 灵活性与便利性 四、iVX提供多样模板&#xff0c;快来 ~五、iVX VS 其他低代码平台结…

面试中的自我介绍:首印象决定一切

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

MES系统来料检验:优化制造业质量控制

一、MES系统来料检验的定义&#xff1a; MES系统来料检验是指制造执行系统中的质量管理模块&#xff0c;用于对供应商提供的原材料和零部件进行质量检查和验证。该模块涵盖了来料质量数据的采集、分析、报告和追溯等功能&#xff0c;以确保来料符合质量要求&#xff0c;并提供…

【web知识清单】你想要的都有:网络、HTTP、会话保持、认证授权......持续更新中

作者简介&#xff1a; 目录 1.网络 2.HTTP 2.1.报文结构 2.1.1.请求报文 2.1.2.响应报文 2.2.方法 2.3.HTTPS 2.4.跨域 3.会话保持 3.1.概述 3.2.cookie 3.3.session 4.认证授权 4.1.Token 4.2.JWT 4.3.oauth 1.网络 计算机网络&#xff1a; 计算机网络&…

Lesson4-1:OpenCV图像特征提取与描述---角点特征

学习目标 理解图像的特征知道图像的角点 1 图像的特征 大多数人都玩过拼图游戏。首先拿到完整图像的碎片&#xff0c;然后把这些碎片以正确的方式排列起来从而重建这幅图像。如果把拼图游戏的原理写成计算机程序&#xff0c;那计算机就也会玩拼图游戏了。 在拼图时&#xff…

Problem: 205. 同构字符串;力扣;python

题目描述 代码展示 # class Solution: # def isIsomorphic(self, s: str, t: str) -> bool: # dict {} # flag 0 # for i in range(len(s)): # #记录&#xff0c;s # if s[i] not in dict.keys(): # …

【真题解析】系统集成项目管理工程师 2023 年上半年真题卷(综合知识)

本文为系统集成项目管理工程师考试(软考) 2023 年上半年真题(全国卷),包含答案与详细解析。考试共分为两科,成绩均 ≥45 即可通过考试: 综合知识(选择题 75 道,75分)案例分析(问答题 4 道,75分)综合知识(选择题*75)1-10 题11-20 题21-30 题31-40 题41-50 题51-60 …

让GPT成为您的科研加速器丨GPT引领前沿与应用突破之GPT4科研实践技术与AI绘图

GPT对于每个科研人员已经成为不可或缺的辅助工具&#xff0c;不同的研究领域和项目具有不同的需求。如在科研编程、绘图领域&#xff1a;1、编程建议和示例代码:无论你使用的编程语言是Python、R、MATLAB还是其他语言&#xff0c;都可以为你提供相关的代码示例。​2、数据可视化…

vs code调试rust乱码问题解决方案

在terminal中 用chcp 65001 修改一下字符集&#xff0c;就行了。有的博主推荐 修改 区域中的设置&#xff0c;这会引来很大的问题。千万不要修改如下设置&#xff1a;

宁德时代龙头,比亚迪榜眼:1-7 月全球电动汽车电池市场份额公布

根据SNE Search公布的数据显示&#xff0c;今年1-7月全球电动汽车电池的消费总量为362.9 千兆瓦时&#xff08;GWh&#xff09;&#xff0c;比去年同期的243.2 千兆瓦时&#xff08;GWh&#xff09;增长了49.2%。这表明电动汽车市场的增长势头依然强劲。 在这些数据中&#xff…

QuantLib学习笔记——InterestRate的应用

⭐️ 单利还是复利 巴菲特老爷子有句名言&#xff1a;“人生就像滚雪球&#xff0c;重要的是发现很湿的雪和很长的坡。” 很湿的雪&#xff0c;指的就是复利。很长的坡&#xff0c;指的就是时间。很湿的雪和很长的坡组合起来&#xff0c;就能滚成巨大的雪球。 哈哈&#xff0…

南京市玄武区委常委、组织部部长任宁一行率企业家研修班莅临麒麟信安调研交流

为学习在先进科学技术、人才引育等方面的领先经验&#xff0c;进一步加强交流合作&#xff0c;9月4日上午&#xff0c;南京市玄武区委常委、组织部部长任宁&#xff0c;玄武区委组织部副部长、两新工委书记鲁琳&#xff0c;玄武区委组织部人才综合服务科科长韩静玮等领导一行带…

Apache NIFI将Json数据转为SQL语句并插入到数据库表中

说明 本文中的NIFI是使用docker进行安装的&#xff0c;所有的配置参考&#xff1a;docker安装Apache NIFI 需求背景 现在有一个文件&#xff0c;里面存储的是一些json格式的数据&#xff0c;要求将文件中的数据存入数据库表中&#xff0c;以下是一些模拟的数据和对应的数据库…

Linux_VMware_虚拟机磁盘扩容

来源文章 &#xff1a;VMware教学-虚拟机扩容篇_vmware虚拟机扩容_系统免驱动的博客-CSDN博客 由于项目逐步的完善&#xff0c;需要搭建的中间件&#xff0c;软件越来越多&#xff0c;导致以前虚拟机配置20G的内存不够用了&#xff0c;又不想重新创建新的虚拟机&#xff0c;退…

数据脱敏sensitive(前端或数据库加密,解密)

可以对数据加密&#xff0c;解密&#xff0c;对数据库加密的数据进行解密显示&#xff0c;对数据库没有加密的数据进行加密处理展示前端等待 1&#xff1a;引入数据如下结构 1-1&#xff1a;SensitiveDecode脱敏解密注解 package com.example.poi.desensitization.annotation;…