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

原创 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());
    }
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

新手讲栈:编程实现栈的入栈出栈操作

定义一个栈 typedef struct student{ int data; struct student *next; }node; typedef struct stack...
  • jiguojing123
  • jiguojing123
  • 2016年10月07日 10:06
  • 985

c++和数据结构 模拟栈的入栈和出栈

c++学了类   老师就让写了这个、、、 #include #include using namespace std; class Stack { public: void push(in...
  • su20145104009
  • su20145104009
  • 2016年10月09日 19:02
  • 3777

采用顺序存储实现栈的初始化、入栈、出栈操作。

#include #include #include #define TRUE   1 #define FALSE  0 #define ERROR 0 #define OVERFLOW...
  • cddchina
  • cddchina
  • 2012年04月18日 09:19
  • 2436

栈与队列的互相转化

栈与队列的互相转化
  • guozhenqiang19921021
  • guozhenqiang19921021
  • 2016年05月07日 17:05
  • 702

通俗讲解入栈、出栈(C语言)

**解释入栈出栈原理:栈的结构是“先进后出“的,就像你堆积木一样,第一根放在最底层的地面上,然后一根一根往上堆。前一个放上去的总是被后一个放上去的压在底下。那我当我再想里面放一根的时候,总不能放中间或...
  • a1b2c3d4123456
  • a1b2c3d4123456
  • 2015年12月17日 10:36
  • 5162

入栈和出栈

Description 假设有一组数,共n个,如23、45、17、93、27、6、91、13,依次入栈(23最先入栈,13最后出栈),给定这n个数入栈和出栈的操作序列(push表示入栈,pop表...
  • zufejsjcy
  • zufejsjcy
  • 2015年03月26日 17:15
  • 1856

C/C++ 知识回顾 栈的入栈与出栈

#include using namespace std; typedef struct student { int data; struct student * next; }node; ty...
  • luchengtao11
  • luchengtao11
  • 2017年03月06日 22:17
  • 518

C++ 栈和队列 Vector

原帖 http://blog.csdn.net/zhy_cheng/article/details/8090346 使用标准库的栈和队列时,先包含相关的头文件 #include ...
  • XingKong_678
  • XingKong_678
  • 2014年08月18日 13:53
  • 3784

根据已知入栈顺序判断一个数组是否是出栈顺序

题目含义已经很明确了,现在开始使用一个样例输入和输出 int a[]={1,2,3,4,5};//原始的入栈顺序 int b[]={4,5,3,1,2};//出栈顺序 int b1[]={4,5...
  • dasgk
  • dasgk
  • 2015年07月20日 08:37
  • 795

用JAVA代码实现出栈入栈并获取栈中最小值的程序

【前言】学习Java编程一段时间,对于一些涉及业务逻辑的案例没有太多的机会接触;闲的时候添加了很多群,里面有很多涉及到算法的问题,比较感兴趣(有的时候脑袋还是要练一练的,O(∩_∩)O哈哈~)。 言归...
  • z_programmer
  • z_programmer
  • 2016年12月03日 11:56
  • 3416
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:两个队列实现栈--出栈,入栈
举报原因:
原因补充:

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