剑指offer-两个栈实现-队列尾部插入,头部删除

2023-11-17

大家都知道,队列是一个尾部(rear)插入,头部(front)删除的数据结构。本题要求,用两个栈,构造出一个队列出来。

本题中,构造两个栈,stack1和stack2,1用来插入,2用来弹出。其中,栈1的插入很简单,函数体内部,直接用add方法即可。但是栈2的弹出,要考虑此时栈2是不是有值,如果2为空,1不空。则弹出1的值,add进2。如果此时2还没有值,则抛异常,如果有值,则pop出来。

拓:只考虑了2的情况,没考虑1的情况,要是1满了,压不进去呢,这在后面还可以商榷一下。

import java.util.Stack;

public class Test07 {
    /**
     * 用两个栈模拟的队列
     * 用两个栈实现一个队列。队列的声明如下,诸实现它的两个函数appendTail和deleteHead,
     * 分别完成在队列尾部插入结点和在队列头部删除结点的功能。
     */
    public static class MList<T> {
        // 插入栈,只用于插入的数据
        private Stack<T> stack1 = new Stack<>();
        // 弹出栈,只用于弹出数据
        private Stack<T> stack2 = new Stack<>();

        public MList() {
        }
        
        // 添加操作,在队列尾部插入结点
        public void appendTail(T t) {
            stack1.add(t);
        }

        // 删除操作,在队列头部删除结点
        public T deleteHead() {

            // 先判断弹出栈是否为空,如果为空就将插入栈的所有数据弹出栈,
            // 并且将弹出的数据压入弹出栈中
            if (stack2.isEmpty()) {
                while (!stack1.isEmpty()) {
                    stack2.add(stack1.pop());
                }
            }

            // 如果弹出栈中还没有数据就抛出异常
            if (stack2.isEmpty()) {
                throw new RuntimeException("No more element.");
            }

            // 返回弹出栈的栈顶元素,对应的就是队首元素。
            return stack2.pop();
        }
    }
}

参考文献:github上某大神的代码。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

剑指offer-两个栈实现-队列尾部插入,头部删除 的相关文章

随机推荐

  • Numpy攻略系列:repeat函数

    Numpy中repeat函数使用 Numpy是Python强大的数学计算库 和Scipy一起构建起Python科学计算生态 在本节下面我们重点介绍下repeat函数的用法 我们在Python中import numpy help numpy
  • ChatGPT怎么突然变得这么强?华人博士万字长文深度拆解GPT-3.5能力起源

    文章目录 一 2020 版初代 GPT 3 与大规模预训练 二 从 2020 版 GPT 3 到 2022 版 ChatGPT 三 Code Davinci 002和 Text Davinci 002 在代码上训练 在指令上微调 四 tex
  • vue2 onresize实现浏览器窗口大小实时计算

    首发于我的博客 http zhengxiyun top mounted window onresize gt return gt this divHeight window innerHeight yourHeight beforeMoun
  • 华为OD机试 - 事件推送(Java)

    题目描述 同一个数轴X上有两个点的集合A A1 A2 Am 和B B1 B2 Bn Ai和Bj均为正整数 A B已经按照从小到大排好序 A B均不为空 给定一个距离R 正整数 列出同时满足如下条件的所有 Ai Bj 数对 Ai lt Bj
  • Shell函数和脚本参数

    1 在脚本中定义函数 functin name 直接的定义方式 语句块 function function name 使用关键字 function 定义的方式 语句块 函数命名规则 为了和变量区分 使用小写字母和下划线 以字母开头 不能使用
  • 如何免费体验腾讯云虚拟主机(云服务器)

    最近调Android程序 访问不到局域网内的服务器 是在没有办法了就搞了台腾讯云的虚拟主机 不得不说 比起那些香港的三线品牌虚拟主机体验好了许多 配置属于乞丐版 1GHz CPU 1GB RAM 50GB 系统盘 30GB数据盘 对于广大学
  • 李宏毅机器学习 hw1 boss baseline 解析

    hw1 代码 任务描述 任务很简单 就是一个回归问题 给你过去四天新冠肺炎感染人数的相关情况 让你预测最后一天的新冠感染人数 上图展示了特征的解析特征共有117维 首先是37维的关于州的one hot编码 然后是4维的特征表示是否有新冠相像
  • 山东理工大学第十五届ACM程序设计竞赛 R - Zyn的超能力

    Description Zyn 需要能量提高自己的超能力 有两种能量存在 超级能量和小能量 对于超级能量 Zyn 绝对不可以错过 而且努力的 Zyn 希望得到更多的小能量 但是 Zyn 每天最多可以获得 k 次能量 而且每个能量都会在第 x
  • DNF那个跨区服务器稳定,dnf2017年最新跨区表 dnf2017跨区大区汇总介绍

    小编今天为大家带来的就是dnf2017年的最新跨区表 还不清楚dnf2017年各大区跨区详情的小伙伴们抓紧时间跟上小编一起来看一下吧 DNF跨6有哪些区 地下城与勇士跨区列表2017 跨一 广东1区 广东2区 广东3区 广东4区 广东5区
  • Vue:配置.env.dev文件不生效的问题

    问题描述 Vue项目的 env dev文件配置如下 但是在启动项目之后 通过process env VUE APP SCISERVE获取到的变量值一直为undefined 开发环境配置 在配置文件中定义自定义变量时 一定要以 VUE APP
  • WI-FI定位算法原理与介绍

    所谓的定位 就是利用所有可以获取的信息 对用户所在的位置进行推算 得到最大可能的用户位置 定位可以分为很多种定位 基站定位 WI FI定位 GPS定位 甚至地磁定位 几种定位方式各有优缺点 定位方式 精度 M 速度 耗电量 适用范围 基站定
  • Scikit-Learn 机器学习笔记 -- 线性回归、逻辑回归、softmax回归

    Scikit Learn 机器学习笔记 线性回归 逻辑回归 softmax回归 参考文档 handson ml import numpy as np from matplotlib import pyplot as plt 创建线性回归数据
  • 河北计算机等级考试但不包含职称,河北省计算机等级考试但不包含职称的页面(河北省计算机等级考试时间)...

    最佳案可以的 职称计算机在考试时 往往解决方法不止一种 只要达到最终结果 把题操作对就行了 界通2015年全国职称计算机考试模拟题库软件祝您考试顺利 最佳案职称计算机考试和全国计算机等级考试不是一回事 职称计算机考试是用于评职称的 比如评高
  • Java基础:Callable

    Callable具有返回值 抛出异常 import java util concurrent Callable public class TestCallable implements Callable Override public Bo
  • mysql 数据库字段动态扩展

    主要有一下几种方案 1 动态添加属性字段 当数据库中需要增加一个字段的时候 直接在数据库中增加 并修改相应的代码 优点 操作简单 易懂 缺点 每增加一个字段都需要修改数据库表结构 修改代码 而且在一张大表进行操作的时候 还可能需要很长时间
  • windows下的torch=1.2.0环境配置

    神经网络学习小记录48 windows下的torch 1 2 0环境配置 学习前言 环境内容 Anaconda安装 下载Cudnn和CUDA 配置torch环境 安装VSCODE 学习前言 好多人问环境怎么配置 还是出个教程吧 环境内容 t
  • Vmware 虚拟机 网络设置

    弄了很久 每次重启虚拟机都会网络连接不上 于是 这次弄好了之后 决定记录一下 我的虚拟机 主要用于PHP swoole 需要装在linux 上面 不得不通过虚拟机安装 学习一下 一 关于虚拟机的设置 1 选择NAT 模式 2 设置NAT模式
  • ShardingJDBC数据库中间件学习笔记

    简介 官网地址 https shardingsphere apache org index zh html Apache ShardingSphere 产品定位为 Database Plus 旨在构建多模数据库上层的标准和生态 它关注如何充
  • 【Docker】Docker java shell ssh

    1 在宿主机执行docker容器中的shell脚本或命令 常见命令形式 docker exec it master bin bash c echo PATH docker exec it master bin bash c cd home
  • 剑指offer-两个栈实现-队列尾部插入,头部删除

    大家都知道 队列是一个尾部 rear 插入 头部 front 删除的数据结构 本题要求 用两个栈 构造出一个队列出来 本题中 构造两个栈 stack1和stack2 1用来插入 2用来弹出 其中 栈1的插入很简单 函数体内部 直接用add方