前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >剑指Offer(八)--用两个栈实现队列

剑指Offer(八)--用两个栈实现队列

作者头像
秦怀杂货店
发布2022-02-15 13:37:02
1560
发布2022-02-15 13:37:02
举报
文章被收录于专栏:技术杂货店
  • 题目描述
  • 思路和解法

题目描述

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

思路和解法

  • 栈的特性是先进后出
  • 队列的特性是先进先出

百度百科:

堆(Heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵完全二叉树的数组对象。 栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。

有两个栈stack1,stack2; 如果有新的数据进入,那么我们可以直接push到stack1; 如果需要取出数据,那么我们优先取出stack2的数据,如果stack2里面数据是空的,那么我们需要把所有的stack1的数据倒入stack2。再从stack2取数据。

例如: (1). push 1--> push 2

(2).pop 1

(3). push 3--> push 4

(4).pop 2

代码语言:javascript
复制
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);
    }

    public int pop() {
        if(!stack2.isEmpty()){
            return stack2.pop();
        }else{
            while(!stack1.isEmpty()){
                stack2.push(stack1.pop());
            }
        }
        return stack2.pop();
    }
}

主要思路是如何将进入顺序和弹出的顺序做好装换。 - END -

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-09-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 秦怀杂货店 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目描述
  • 思路和解法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档