美文网首页
算法分享第6题

算法分享第6题

作者: DevWang | 来源:发表于2017-12-24 21:29 被阅读0次
题目:用两个栈实现一个队列,只要求实现入队,出队方法即可.
假设这两个栈分别为s1,s2




















  • 分析思路
    1、栈的特性为:先进后出;队列的特性为:先进先出;
    2、如一个数组 data[0] ~ data[n - 1] ,我们将它压入s1栈中,那么 data[0]在栈底,data[n - 1]在栈顶;
    3、如果我们对s1栈中的元素执行出栈操作,并将出栈元素压入s2栈中,那么在s2栈中data[n - 1]在栈底,data[0]在栈顶;
    4、此时s2栈中的元素再次出栈的话,顺序即是:按照 data[0] ~ data[n - 1] 的顺序进行出栈,这就和队列先进先出的顺序相吻合.
  • 实现思路1
    1、把s1作为存储空间,s2作为临时空间;
    2、入栈时:把元素压入s1;
    3、出栈时:把s1中除栈底元素外的所有元素都倒入s2,弹出s1的栈底元素,然后把s2中所有元素倒回s1.
  • 实现思路2
    1、把s1作为存储空间,s2作为临时空间;
    2、入栈时,判断s1是否为空:
    如不为空,说明所有元素都在s1,直接将入栈元素压入s1;
    如为空,将s2中的所有元素倒回s1,再将入栈元素压入s1;
    3、出栈时,判断s2是否为空:
    如不为空,直接弹出s2的栈顶元素并出栈;
    如为空,把s1中除栈底元素外的所有元素都倒入s2,然后弹出s1的栈底元素.
  • 实现思路3 - 最佳方案
    1、把s1作为存储空间,s2作为临时空间:
    2、入栈时,将元素压入s1;
    3、出栈时,判断s2是否为空:
    如不为空,则直接弹出顶元素;
    如为空,把s1中除栈底元素外的所有元素都倒入s2,然后弹出s1的栈底元素.

最佳方案实现代码:

class Stack4Queue<E> {

    private Stack<E> s1 = new Stack<>();
    private Stack<E> s2 = new Stack<>();

    // 入队列
    public void push(E item) {
        s1.push(item);
    }

    // 出队列
    public E pop() {
        if (s2.empty()) {
            if (s1.empty()) {
                return null;
            }
            while (s1.size() != 1) {
                s2.push(s1.pop());
            }
            return s1.pop();
        }
        return s2.pop();
    }
}

相关文章

  • 算法分享第6题

    题目:用两个栈实现一个队列,只要求实现入队,出队方法即可. 假设这两个栈分别为s1,s2 分析思路1、栈的特性为:...

  • 算法分享第5题

    题目:Given a string containing just the characters '(',')',...

  • 算法分享第3题

    题目:给定两个整数a和b,交换这两个数字,要求不引入第三个变量 如:定义a=1、b=2 交换后 a=2、b=1 思...

  • 算法分享第4题

    题目:给定一串链表和一个整数n,要求删除链表倒数第n个节点 (注:输入的n永远是合法的,试着访问 '一次' 链表就...

  • 算法分享第1题

    题目:要求定义一个方法,实现对传入的字符串进行反转并返回 如:传入字符串ABCDEFG -> 返回GFEDCBA ...

  • 算法分享第2题

    题目:斐波那契数列,又称黄金分割数列,指的是这样一个数列:1、1、2、3、5、8、13、21、34、…… 现在要求...

  • 10道前端基础题

    第1题 第2题 第3题 第4题 第5题 第6题 第7题 第8题 第9题 第10题

  • 2017年“视界窗教学服务培训”调查问卷统计分析

    第1题 第2题 第3题 第4题 第5题 第6题 第7题 第8题 第9题 第10题

  • 周末作业题

    第1题 第2题 第3题 第4题 第5题 第6题 第7题 第8题 第9题 第10题 第11题 第12题 第13题 第...

  • 2016北京市小学生程序设计友谊赛详细答案

    第1题 第2题 第3题 少儿编程答疑、算法答疑请加微信307591841或QQ307591841公众号.jpg

网友评论

      本文标题:算法分享第6题

      本文链接:https://www.haomeiwen.com/subject/ikzhgxtx.html