使用两个栈模拟队列

使用两个栈模拟队列

在这里插入图片描述
在这里插入图片描述

实现代码

public class Test {
    public static void main(String[] args) {
       MyStackQueue sq = new MyStackQueue(3);
        try {
            sq.add(1);
            sq.add(2);
            sq.add(3);
//            sq.add(4); 会抛出异常
            System.out.println(sq.remove());// 1
            System.out.println(sq.remove());// 2
            System.out.println(sq.remove());// 3
//            System.out.println(sq.remove()); 会抛出异常
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}
//-------------------------使用两个栈模拟队列------------------------
class MyStackQueue{
    private MyStack stack1;
    private MyStack stack2;
    public MyStackQueue(int size){
        stack1 = new MyStack(size);
        stack2 = new MyStack(size);
    }
    public MyStackQueue(){}

    /**
     * 本方法用于将value排入队列中
     * @param val 需要进入队列的value
     * @throws Exception 队列满了抛出异常
     */
    public void add(int val) throws Exception {
        stack1.push(val);
    }

    /**
     * 本方法 是删除队列第一个value
     * @return 被删除的value
     * @throws Exception 队列为空抛出异常
     */
    public int remove() throws Exception {
        while (stack1.getSize() != 0){
            stack2.push(stack1.pop());
        }
        int val = stack2.pop();
        while (stack2.getSize() != 0){
            stack1.push(stack2.pop());
        }
        return val;
    }

    /**
     * 在队列中value的个数
     */
    public int getSize(){
        return stack1.getSize();
    }

//---------------------模拟栈------------------------
}

class MyStack{
    private int size;
    private int[] data;
    public MyStack(int size){
        data = new int[size];
    }
    public MyStack(){}
    /**
     * 本方法用于向栈中添加 value
     * @param val 需要存储的 value
     * @throws Exception 栈满了抛出异常
     */
    public void push(int val) throws Exception {
        if (size >= data.length) throw new Exception("满了");
        data[size++] = val;
    }
    /**
     * 本方法用于删除栈顶的第一个 value
     * @return 返回被删除的 value
     * @throws Exception 栈为空抛出异常
     */
    public int pop() throws Exception {
        if (size == 0) throw new Exception("空了");
        int val = data[--size];
        data[size] = 0;
        return val;
    }
    /**
     * 栈中value的个数
     * @return
     */
    public int getSize(){
        return size;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值