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

原创 2016年06月01日 11:22:15

栈和队列新加入元素的时候总是在最后加入,只不过队列出的时候栈顶,队列出的是队首。所以入栈就是先把元素进入队列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());
    }
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

数据结构-栈和队列

1.栈 1.1 栈的定义 栈是一种特殊的线性表。其特殊性在于限定插入和删除数据元素的操作只能在线性表的一端进行。如下所示: 结论:后进先出(Last In First Out),...
  • hguisu
  • hguisu
  • 2012年06月19日 12:53
  • 78586

链式存储结构实现队列的入队和出队操作以及 栈的出栈和入栈操作

链式存储结构实现队列的入队和出队操作以及 栈的出栈和入栈操作其实本质上就是用含头结点的单链表来模拟队列的入队和出队,以及栈的入栈和出栈 换句话来形容,用单链表来实现队列和栈 对于队列: 存储结构 ...

链表实现队列的出队和入队,栈的入栈和出栈

队列的出队和入队 queue.h #ifndef QUEUE_H_ #define QUEUE_H_ #include typedef struct tagstudent{ int data;...

实现一个返回最小值的栈

一、 实现一个栈,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作) 的时间复杂度为O(1) (1)栈的基本操作入栈(push);出栈(pop);查找栈顶(top);栈的元素个数(...

【栈队列】实现一个栈Stack,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1)

问题分析要记录从当前栈顶到栈底元素的最小值,很容易想到用一个变量,每push一个元素更新一次变量的值。那么问题来了,当执行pop操作时,上一次的最小值就找不到了。解决方法方法1、 使用一个栈。元素x...

使用堆栈(Stack)来模拟队列(FIFO)功能,要求数据必须存储在堆栈内部.需要实现enqueue(入栈),dequeue(出栈),isEmpty(判空)三个功能,并给出单元测试.

思路:两个堆栈实现队列 s1为入栈的,s2为出栈的 1. 入队列:直接压入s1即可 2. 出队列:如果s2不为空,把s2中的栈顶元素直接弹出;否则,把s1的所有元素全部弹出压入s2中,再弹...

【学习点滴-数据结构-栈&队列】 顺序栈的建立,入栈,出栈,判空

#include #include #include #include //栈的初始最大容量 #define STACK_MAX_SIZE 100 //栈的容量增量 #define I...

栈和队列的面试题(五)---判断元素出栈、入栈顺序的合法性

题目: 如:入栈的序列(1,2,3,4,5),出栈序列为 (4,5,3,2,1)是合法序列, 入栈的序列(1,2,3,4,5),出栈序列为(1,5,3,2,4)是不合法序列一:判断元素出入...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:两个队列实现栈--出栈,入栈
举报原因:
原因补充:

(最多只允许输入30个字)