• 使用两个队列模拟栈


    整体思路如下图:

    在这里插入图片描述

    代码实现

    import java.util.LinkedList;
    import java.util.Queue;
    import java.util.Scanner;
    
    /**
     * @author: Arbicoral
     * @Description: 使用2个队列模拟栈的 push() pop() top(), 自己实现打印 print()
     */
    public class QueueMoniStack2 {
        public static void main(String[] args) {
            QueueMoniStack2 queueMoniStack2 = new QueueMoniStack2();
            Scanner sc = new Scanner(System.in);
            System.out.print("请输入要入栈的元素(以-1结尾): ");
            while (true){
                int tmp =sc.nextInt();
                if (tmp!=-1){
                    queueMoniStack2.push(tmp);
                }else {
                    break;
                }
            }
            // 测试
            queueMoniStack2.print();
            queueMoniStack2.push(52);
            queueMoniStack2.print();
            queueMoniStack2.push(33);
            queueMoniStack2.print();
            queueMoniStack2.top();
            queueMoniStack2.print();
            queueMoniStack2.pop();
            queueMoniStack2.print();
            queueMoniStack2.pop();
            queueMoniStack2.print();
            queueMoniStack2.pop();
            queueMoniStack2.print();
        }
    
        private void print() {
            if (queue1.isEmpty()){
                System.out.println("栈中空空如也~");
            }else {
                System.out.print("当前栈中的元素:");
                queue1.forEach(val-> System.out.print(val + " "));
                System.out.println();
            }
        }
    
        private Queue<Integer> queue1=new LinkedList<>();//存数据
        private Queue<Integer> queue2=new LinkedList<>();// 临时存放
    
        // 模拟 push()
        public void push(Integer n){
            while (!queue1.isEmpty()){
                int size = queue1.size();
                // 1. queue1中的值全部移到queue2
                while (size-->0){
                    queue2.add(queue1.poll());
                }
            }
            System.out.println("加入元素:" + n);
            queue1.offer(n);
            // 2. 将queue2中的值依次加到queue1尾部
            while (!queue2.isEmpty()){
                queue1.add(queue2.poll());
            }
        }
    
        // pop() 弹出栈顶元素
        public void pop(){
            Integer poll = queue1.poll();
            System.out.println("当前栈顶的元素是:" + poll);
        }
    
        // top() 取栈顶元素
        public void top(){
            Integer peek = queue1.peek();
            System.out.println("当前栈顶的元素是:" + peek);
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80

    输出结果:

    在这里插入图片描述

  • 相关阅读:
    scada组态软件和硬件结构的主要功能
    二、Eureka服务注册与发现
    了解策略模式
    2022最新版JDK1.8的安装教程、包含jdk1.8的提取码(亲测可用)
    FPGA 20个例程篇:18.SD卡存放音频WAV播放(上)
    SuperMap GIS基础软件地图瓦片问题Q&A
    【目标检测】目标检测的评价指标(七个)
    基于PHP+MySQL信息技术学习网站设计与实现
    西门子精彩触摸屏SMART V3组态配方的具体方法示例
    大数据架构:字节跳动开源Cloud Shuffle Service简介
  • 原文地址:https://blog.csdn.net/Miss_croal/article/details/132898713