首页 > 其他分享 >栈和队列--两个栈组成一个队列

栈和队列--两个栈组成一个队列

时间:2022-11-30 21:45:03浏览次数:34  
标签:队列 stackPop stackPush -- empty Stack public 组成

题目:用两个栈组成一个队列,支持队列的基本操作

思路:因为栈是先进后出,队列是先进先出,所以我们可以一个栈用来做入队,一个栈用来做出队。这里记作入栈stackPush,出栈stackPop。

因为数据压入栈的时候,顺序是先进后出的,所以把stackPush的数据放到stackPop,顺序符合队列的思想了,比如说入栈,1,2,3,4,5,现在

栈内元素是5,4,3,2,1,然后把这些元素压入到stackPop里,就变成,1,2,3,4,5,这样在执行出队的时候,就是先了先进先出的思想。但是要注意的是,

在执行放入stackPop的操作时,要保证,stackPop中元素是空的,否则会出问题!!!

废话不多说,直接上代码:

import java.util.Stack;

public class twoStackQueue {
    public Stack<Integer> stackPush;
    public Stack<Integer> stackPop;

    private void PushToPop(){
        if(stackPop.isEmpty()){
            while (!stackPush.empty()){
                stackPop.push(stackPush.pop());
            }
        }
    }
    public twoStackQueue(){
        this.stackPush = new Stack<>();
        this.stackPop = new Stack<>();
    }

    public void add(int pushInt){
        stackPush.push(pushInt);
        PushToPop();
    }

    public int poll(){
        if(stackPop.empty() && stackPush.empty()){
            throw new RuntimeException("Queue is empty!!!");
        }
        PushToPop();
        return stackPop.pop();
    }
    public int peek(){
        if(stackPop.empty() && stackPush.empty()){
            throw new RuntimeException("Queue is empty!!!");
        }
        PushToPop();
        return stackPop.peek();
    }

    @Override
    public String toString() {
        return "twoStackQueue{" +
                "stackPush=" + stackPush +
                ", stackPop=" + stackPop +
                '}';
    }
}

运行结果:

输入元素,1,2,3,4,5

执行出队操作:

 

标签:队列,stackPop,stackPush,--,empty,Stack,public,组成
From: https://www.cnblogs.com/99kol/p/16939850.html

相关文章

  • C#-简易公式计算器代码实现
    计算器如图所示,仅实现加减乘除及括号功能,公式错误时会有提示。首先建立一个inputList,每点击数据一下,便将内容添加至inputList中,点击后退时则删除List中最后一个元素。......
  • MySQL补充知识及索引
    昨日内容回顾多表查询的关键字innerjoin...on...leftjoin...on....rightjoin...on...SQL关键字补充concat/concat_ws/add/change/modify多表查询实操方式......
  • 关于hutool工具箱进行RSA非对称加密的使用笔记
    首先是导入hutool工具包的maven依赖<!--huTool工具箱--><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</arti......
  • 前端之HTML
    目录前端引入知识前端后端前端三剑客前端引入HTTP协议基于HTTP协议搭建HTMLHTMLHTML简介HTML概览HTML文档结构head常见标签body内标签基本标签常见符号布局标签常用标签列......
  • 动态规划笔记
    动态规划知识点背包问题动态规划,算法课的时候其实就学过,但是在ACM中的应用远比算法课学的01背包等问题要多。01背包问题有N件物品和一个容量是V的背包。每件物品只......
  • 前端开发
    目录前端与后端的概念前端前戏HTTP协议HTML简介HTML概览预备知识head内常见标签body内基本标签body内常见符号body内布局标签body内常用标签列表标签表格标签表单标签前端......
  • Android Activity和Intent机制学习笔记
    ActivityAndroid中,Activity是所有程序的根本,所有程序的流程都运行在Activity之中,Activity具有自己的生命周期(由系统控制生命周期,程序无法改变,但可以用onSaveInstanceState保......
  • Map 接口实现类的特点! 使用实现类HashMap
         ......
  • .NET6之MiniAPI(二十六):封装Dapper
    在上一篇说过,Dapper是通过扩展IDbConnection来达到实现的,那带来的一个问题就是隔离性不好,比如在做单元测试时,mock就有点困难,所以在实践中,我对Dapper作了扩展,下面分享出......
  • 判断子序列
    给定一个长度为 nn 的整数序列 a1,a2,…,an以及一个长度为 m 的整数序列 b1,b2,…,bm。请你判断 a 序列是否为 b 序列的子序列。#include<iostream>#includ......