寒假算法打卡第十天

学习目标:

第五章 栈与队列

  • 232.用栈实现队列

  • 225. 用队列实现栈

学习内容:

232.用栈实现队列
思路: 将元素放到队列的末尾,也就是将元素直接存入stackIn即可,因为stackOut与stackIn出栈的顺序相反,因此最后放入stackIn的元素在stackOut中是最后出栈的,相当于是队列的末尾

        public day_10() {
            stackIn = new Stack<>(); // 负责进栈
            stackOut = new Stack<>(); // 负责出栈
        }

       //将元素放到队列的末尾,也就是将元素直接存入stackIn即可,因为stackOut与stackIn出栈的顺序相反,因此最后放入stackIn的元素在stackOut中是最后出栈的,相当于是队列的末尾
        public void push(int x) {
            stackIn.push(x);
        }

       //从队列开头取出元素并且返回数值,将stackIn的元素全部存入stackOut后进行操作,并且受栈的先进后出影响,stackIn和stackOut元素顺序相反
        public int pop() {
            dumpstackIn();
            return stackOut.pop();
        }

        //查出第一个元素的数值但不弹出
        public int peek() {
            dumpstackIn();
            return stackOut.peek();
        }

        //判断队列是否为空
        public boolean empty() {
            return stackIn.isEmpty() && stackOut.isEmpty();
        }

        // 如果stackOut为空,那么将stackIn中的元素全部放到stackOut中
        private void dumpstackIn(){
            if (!stackOut.isEmpty()) return;//如果stackOut中不是空那么就无法添加其他元素,否则会改变元素顺序
            while (!stackIn.isEmpty()){
                stackOut.push(stackIn.pop());
            }
        }



225. 用队列实现栈
思路: 向队列中直接插入元素相当于在栈中直接插入元素,只是修改取值的方式将队列取值方式变成跟栈相同。移除并返回栈顶元素,先获取队列的长度,然后减一,然后将最后一个元素前的全部元素弹出再重新写回队列,最后再弹出原来队列的最后一个元素也就是栈顶元素,最后返回值,因为其他元素全部重新添加了,因此原来的那个最后一个元素就变成了队列的第一个元素

  Queue<Integer> queue;

    public day_10() {
        queue = new LinkedList<>();
    }
    //向队列中直接插入元素相当于在栈中直接插入元素,只是修改取值的方式将队列取值方式变成跟栈相同
    public void push(int x) {
        queue.add(x);
    }
    //移除并返回栈顶元素,先获取队列的长度,然后减一,然后将最后一个元素前的全部元素弹出再重新写回队列,最后再弹出原来队列的最后一个元素也就是栈顶元素,最后返回值,因为其他元素全部重新添加了,因此原来的那个最后一个元素就变成了队列的第一个元素
    public int pop() {
        rePosition();
        return queue.poll();//弹出栈顶元素并且返回值
    }

    public int top() {
        rePosition();
        int result = queue.poll();//弹出元素并且返回值
        queue.add(result);//然后重新插入回去,因为只需要查到值并不需要移除
        return result;//返回值
    }

    public boolean empty() {
        return queue.isEmpty();
    }

    public void rePosition(){
        int size = queue.size();
        size--;
        while(size-->0)
            queue.add(queue.poll());
    }


学习时间:

下午三小时。

  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值