【剑指offer】【7】两个栈实现队列及两个队列实现一个栈

2.3 数据结构

面试题7:两个栈实现队列

分析:主要实现添加删除元素的问题。先将元素添加到栈A,再全部将A中的全部放入栈B。从栈B中删除。

添加:往栈A中添加
删除:必须从栈B中弹出,B中没有时,A中才能添加到B,并且要取到A的栈底,所以要取完A中的所有元素放在B中。
还可以实现size方法。

java实现:

import java.util.Stack;

//假设加入或删除的都是int

public class  TwoStack2Queue{
    Stack stack1 = new Stack();
    Stack stack2 = new Stack();
    //--------------------------------
    public  void  appendTail(int i) {
        stack1.push(i);
    }
    //---------------------------------
    public  void deleteHead(){
        //首先,如果栈2不为空,则从栈2中弹出;否则从栈1中全部加入栈2
        //为了简化代码。我们分以下三步
        if(stack2.isEmpty()){
            while(!stack1.isEmpty()){
                stack2.push(stack1.pop());
            }
        }

        if(stack2.isEmpty()){//栈1中的已经全部加过来了,如再为空,说明栈1栈2中都为空
            System.out.println("queue is Empty!");
            return;
        }

        System.out.println(stack2.pop());//从栈2中弹出
    }
    public static void main(String[] args) {
        TwoStack2Queue q = new TwoStack2Queue();
        q.appendTail(1);
        q.appendTail(2);
        q.appendTail(3);
        q.deleteHead(); //删除头部的1
    }
}

面试题7变式:两个队列实现一个栈

分析:从添加和删除两方面分析
添加:直接往队列1中添加
删除:如下:

c
b
a

对于队列,要删除是a。要模拟栈,要删除的是c,所以将队列1中的元素放入队列2中,只留1个:

c

b
a

然后队列1中的一个元素出队即可。

注意:始终保证一个队列为空,添加元素始终往不为空的队列中添加。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值