如何用两个栈实现队列

Posted 夏芷雨涵梦

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用两个栈实现队列相关的知识,希望对你有一定的参考价值。

题目内容:如何用两个栈实现队列?

思路分析:栈是先进后出的,队列是先进先出的。整体的思路是将一个栈1当做主要的存储空间,而将栈2当做缓冲区。入栈的时候先对栈1进行判断,看其是否为空,如果为空的话,将栈2的元素全部移到栈1中,然后再将新的元素入栈1,不为空的话直接入栈。出栈的时候,先判断两个栈是否都为空,如果都为空就返回提示信息,否则判断栈2是否为空如果不为空证明上次操作是出栈,继续从栈2出栈即可, 如果栈2为空,那么元素都在栈1中,将栈1的元素出栈移动到栈2中,当栈1中剩下最后的一个元素时,直接让其出栈,不需要将其移到栈2  再出栈,这样就达到了先进先出的队列要求。

源码:

import java.util.Stack;

/*
 * created by 夏晓林 in 2019/8/5/005 at 21:09
 * 用两个栈组成一个队列
 */
public class StackQueue<E> 
    Stack stack1 = new Stack();
    Stack stack2 = new Stack();

    public void into(E n) 
        if (!stack1.empty()) 
            System.out.println("进队元素"+stack1.push(n));
         else 
            for (int i = 0; i < stack2.size(); i++) 
                stack1.push(stack2.pop());
            
            System.out.println("进队元素"+stack1.push(n));
        
//        System.out.println(stack1);
//        System.out.println(stack2);

    

    public void out() 
        if(stack1.empty()&&stack2.empty())
            System.out.println("当前队列中为空,不能进行出队操作");
            return;
        
        if (!stack2.empty()) 
            System.out.println("出队元素:"+stack2.pop());
         else 
            int n=stack1.size();
            for (int i = 0; i <n - 1; i++) 
                stack2.push(stack1.pop());
            
            System.out.println("出队元素:"+stack1.pop());
        
//        System.out.println(stack1);
//        System.out.println(stack2);
    


import java.util.Scanner;

/*
 * created by 夏晓林 in 2019/8/5/005 at 21:15
 * 题目内容:如何用两个栈来形成一个队列?
 * 思路:栈是先进后出的,队列是先进先出的。整体的思路是将一个栈1当做主要的存储空间,而将栈2当做缓冲区。入栈的时候先对
 * 栈1进行判断,看其是否为空,如果为空的话,将栈2的元素全部移到栈1中,然后再将新的元素入栈1,不为空的话直接入栈。出栈的时候,先判断两个
 * 栈是否都为空,如果都为空就返回提示信息,否则判断栈2是否为空如果不为空证明上次操作是出栈,继续从栈2出栈即可,
 * 如果栈2为空,那么元素都在栈1中,将栈1的元素出栈移动到栈2中,当栈1中剩下最后的一个元素时,直接让其出栈,不需要将其移到栈2
 * 再出栈,这样就达到了先进先出的队列要求。
 */
public class Test 
    public static void main(String[] args) 
        StackQueue<Integer> stackQueue = new StackQueue<>();
        boolean flag=true;
        do 
            System.out.println("请选择进队还是出队:1【进队】2【出队】0【结束】");
            Scanner input = new Scanner(System.in);
            int choice = input.nextInt();
            switch (choice) 
                case 1:
                    System.out.print("请输入要进队的数据:");
                    int num = input.nextInt();
                    //String num=input.next();
                    stackQueue.into(num);
                    break;
                case 2:
                    stackQueue.out();
                    break;
                case 0:
                    flag=false;
                    break;
                default:
                    System.out.println("输入的操作无效");
                    break;
            
         while (flag);
    

 

以上是关于如何用两个栈实现队列的主要内容,如果未能解决你的问题,请参考以下文章

如何用两个栈实现队列

如何用两个栈实现队列

如何用栈实现队列

如何用两个栈实现一个队列

用两个栈实现队列的POP和PUSH操作

Python 如何用列表实现栈和队列?