哆啦A梦的博客

业精于勤荒于嬉,行成于思而毁于随

两个队列实现栈--出栈,入栈

栈和队列新加入元素的时候总是在最后加入,只不过队列出的时候栈顶,队列出的是队首。所以入栈就是先把元素进入队列1,出栈的时候,先判断队列1有几个元素,如果只有一个元素就直接输出这个元素就好,如果不止1个就先把队列1的n-1个元素放入队列2,然后把队列1的元素弹出,弹出后队列1就空了,如果此时还要进行出栈操作,就报队列2的n-1个元素放到队列1中然后弹出队列2的元素。
出栈的中心思想就是要输出元素的那个队列只有一个元素,出队后就空了。

这里写图片描述

package stackAndQuence;

import java.util.LinkedList;

public class queueToStack {
    LinkedList<Integer> queue1 = new LinkedList<Integer>();
    LinkedList<Integer> queue2 = new LinkedList<Integer>();

    public void push(int value)// 入栈
    {
        queue1.addLast(value);

    }

    public int pop()// 出栈 必须是非空的栈才能出栈
    {
        if ((queue1.size() + queue2.size()) != 0)// 栈不为空
        {
            // 移动一个队的n-1个到另一个中,然后弹出剩余的1个元素,保证队列一个空一个非空
            if (!queue1.isEmpty()) {
                toanother();
                return queue1.removeFirst();
            } else {
                toanother();
                return queue2.removeFirst();
            }
        } else {
            System.out.println("栈已空");
            return -1;
        }
    }


    // 从非空中出队n-1个到另一个队列 ,保证队列总是一空一非空
    public void toanother()
    {
        if (!queue1.isEmpty()) {
            while (queue1.size() > 1) {
                queue2.addLast(queue1.removeFirst());
            }
        } else if (!queue2.isEmpty()) {
            while (queue2.size() > 1) {
                queue1.addLast(queue2.removeFirst());
            }
        }
    }

    public static void main(String[] args) {
        queueToStack st = new queueToStack();
        st.push(1);
        st.push(2);
        st.push(3);
        st.push(4);
        System.out.println(st.pop());
        st.push(5);
        System.out.println(st.pop());
    }
}
阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/a1b2c3d4123456/article/details/51554588
文章标签: 队列
个人分类: 数据结构和算法
上一篇利用两个栈实现队列---入队和出队
下一篇xgboost在window安装----免编译步骤
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭