如何用栈实现队列

思路如下:

队列的结构为先进先出

栈的结构为后进先出,在明确了基本结构后,我们基本的实现想法如下

建立两个栈,分别为栈1和栈2

栈1的作用是push数据,栈2的作用是pop数据

当我们push数据时先进的数据会被压入栈底,但是当我们重新把push进栈1的数据一个一个pop进栈2时,栈底的元素此刻就成为了栈顶,所以pop数据时我们只需要pop栈2中的数据即可

因此,我们在pop数据时要判断栈2是否为空,如果不为空,则pop栈2中的数据,如果为空,我们就要把栈1的元素全部push进栈2,一定要记住,是全部

否则就会造成顺序谬误,不能正常实现功能

具体代码如下

class MAin{
    Stack<Integer> stack1 = new Stack<>();
    Stack<Integer> stack2 = new Stack<>();
    public void push(int node) {
        stack1.push(node);
    }

    public int pop() {
        Integer re = null;
        if(!stack2.empty()){  // 如果栈2不是空的,那么把最上面那个取出来
            re=stack2.pop();
        }else{
            //如果栈2是空的,就把栈1里的数一个个取出来,放到栈2里
            while(!stack1.empty()){
                re = stack1.pop();
                stack2.push(re);
            }
            //栈2里有数之后,再次把里面的数取出来
            if(!stack2.empty()){
                re = stack2.pop();
            }
        }
        return re;
    }
}

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值