用两个栈实现队列

题目描述
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。

①可以用一个取巧的方法,java的stack有个很搞的地方,就是有个add的方法,这个方法可以进行对指定位置进行添加元素
import java.util.Stack;

public class Solution {
    Stack<Integer> stack1 = new Stack<Integer>();
    Stack<Integer> stack2 = new Stack<Integer>();
    
    public void push(int node) {
        stack1.add(0,node);//只用一个栈就行了,在最底下去插入元素,但是这种方法其实违背了栈的思想
    }
    
    public int pop() {
        return stack1.pop();
    }
}

②我们可以用两个栈
队列时,输入一个4,然后把这个4存入栈1中,然后队列在输入一个5,在存入栈1中。
此时队列    4 5
栈一是   5
        4
然后想去输出的话,按照队列应该先输出5的,这时就需要另一个栈来实现这一操作了,我们把栈1的元素(全部)拿出来都存入栈2中,这样再去取栈2的顶元素,就可以第一个输出4了
栈一   null   栈二    4
					 5
返回栈顶元素即可,相当于出队
注意每次入队操作时,要把元素从栈1转移到栈2的时候,一定要注意栈2要为空,不为空的话,就不转移,直接把栈2的元素继续取栈顶的输出即可,入队的新元素先放到栈1中,等到栈2为空的时候,在进行出队操作时,再将栈1的全部元素压入到栈2
例如 入队 4 5
栈一   5   栈二    null
	  4			 
出队一个  此时栈2为空
栈一  null   栈二    4
					5
然后返回栈2的顶部,即为出队4
栈一  null   栈二    5

在入队一个 6   然后栈1添加6
栈一  6      栈二    5
此刻再出队,注意,栈二不是空的
所以不能将6压入栈2,否则栈2栈顶就是6了,再出队输出的就是6了,按队列规则应该是输出5的,
所以栈二不是空的时候,就继续输出栈2的栈顶就行了,不把元素压入到栈2

import java.util.Stack;
 
public class Solution {
    Stack<Integer> stack1 = new Stack<Integer>();
    Stack<Integer> stack2 = new Stack<Integer>();
 
    public void push(int node) {
        stack1.push(node);//压入栈1
    }
 
    public int pop() {
        if (stack2.empty()) {//为空,就把栈1的元素全部压入栈2,然后输出栈2的栈顶
            while (!stack1.empty()) {
                stack2.push(stack1.pop());
            }
        }
        //栈2不为空,那么不能将栈1的元素压入到栈2,否则会乱序,不能实现先进先出, 
        // 所以就是直接输出栈2的栈顶,等到空的时候在将栈1的全部元素压进来
        return stack2.pop();
    }
}

					 
	  		
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值