剑指Offer——Java实现栈和队列的互模拟操作

栈模拟队列

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

  思路:其实就是把队列正常入栈,出栈的时候先把栈里的内容按顺序搬到另一个栈里,负负得正,这样再按顺序出栈的时候,就成了入栈前队列的顺序

package cn.edu.ujn.demo;

import java.util.Stack;

import org.junit.Test;

public class Stack2Queue {
    Stack<Integer> stack1 = new Stack<Integer>();
    Stack<Integer> stack2 = new Stack<Integer>();

    // 入栈函数
    public void push(int num) {
        stack1.push(num); // 要往栈中压入什么就直接用栈的push方法就好了
    }

    // 出栈函数
    public int pop() {
        Integer re = null;
        if (!stack2.empty()) { // 如果栈2不是空的,那么把最上面那个取出来
            re = stack2.pop();
        } else {
            // 如果栈2是空的,就把栈1里的数一个个取出来,放到栈2里
            while (!stack1.empty()) {
                re = stack1.pop();
                stack2.push(re);
            }
            // 栈2里有数之后,再次把里面的数取出来
            if (!stack2.empty()) {
                re = stack2.pop();
            }
        }
        return re;
    }

    @Test
    public void test(){
        Stack2Queue sq = new Stack2Queue();
        sq.push(1);
        sq.push(3);
        System.out.println("...:" + sq.pop());
        System.out.println("...:" + sq.pop());
    }
}

队列模拟栈

 题目:JAVA实现用两个队列来实现一个栈,完成栈的Push和Pop操作

package cn.edu.ujn.demo;

import java.util.LinkedList;
public class Queue2Stack {
    private LinkedList<String> queue1;
    private LinkedList<String> queue2;

    public Queue2Stack(){
        queue1 = new LinkedList<String>();
        queue2 = new LinkedList<String>();
    }

    public String pop(){
        String re =null;
        if(queue1.size() == 0 && queue2.size() == 0){
            return null;
        }
        if(queue2.size() == 0){
            while(queue1.size() >0){
                re = queue1.removeFirst();
                if(queue1.size() != 0){
                    queue2.addLast(re);
                }
            }
        }else if(queue1.size() == 0){
            while(queue2.size() >0){
                re = queue2.removeFirst();
                if(queue2.size()!=0){
                    queue1.addLast(re);
                }
            }
        }
        return re;
    }

    public String push(String str){
        if(queue1.size() ==0 && queue2.size() == 0){
            queue1.addLast(str);
        }
        if(queue1.size()!=0){
            queue1.addLast(str);
        }else if(queue2.size()!=0){
            queue2.addLast(str);
        }
        return str;
    }

     public static void main(String[] args) {
         Queue2Stack stack = new Queue2Stack();
            String tmp;
            stack.push("1");
            stack.push("2");
            stack.push("3");
            tmp = stack.pop();
            System.out.println(tmp);//3
            stack.push("4");
            tmp = stack.pop();
            System.out.println(tmp);//4
            tmp = stack.pop();
            System.out.println(tmp);//2
            stack.push("5");
            stack.push("6");
            tmp = stack.pop();
            System.out.println(tmp);//6
            tmp = stack.pop();
            System.out.println(tmp);//5
            tmp = stack.pop();
            System.out.println(tmp);//1
     }
}




剑指Offer——Java实现栈和队列的互模拟操作的更多相关文章

  1. 《剑指offer》-双栈实现队列

    题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 很基本的STL容器操作了,应该可以1A的,但是忘记返回值的时候,clang的报错感觉并不友好啊.. cl ...

  2. 牛客网剑指offer java 全部题解

    经过数月的努力,终于更完了牛客网的66道剑指offer,以下的顺序和大家在牛客网的顺序是一样的(排序也花了不少时间),希望对大家找工作/提高算法能力能起到些许帮助. 每天一道剑指offer-二维数组中 ...

  3. 剑指offer-用两个栈实现队列05

    class Solution: def __init__(self): self.stackpush=[] self.stackpop=[] def push(self, node): # write ...

  4. 剑指offer-用两个栈实现队列-栈和队列-python

    题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型.   # -*- coding:utf-8 -*- class Solution: def __init_ ...

  5. 剑指 offer set 10 栈的压入、弹出序列

    总结 1. 通过按位对比来判断, 没有更优的方法了

  6. 剑指offer—java版本实现

    终于完成了全部!所有的心累这时候都觉得很值得啊!爽! https://github.com/xurui1995/Sword-pointing-to-offer

  7. 剑指Offer——CVTE校招笔试题+知识点总结(Java岗)

    剑指Offer(Java岗)--CVTE校招笔试题+知识点总结 2016.9.3 19:00参加CVTE笔试,笔试内容如下: 需要掌握的知识:Linux基本命令.网络协议.数据库.数据结构. 选择题 ...

  8. 剑指offer】Java版代码(完整版)

    转自:剑指offer]Java版代码(完整版) 转自:[剑指offer] JAVA版题解(完整版)

  9. 《剑指offer》 二叉树的镜像

    本题来自<剑指offer>二叉树的镜像 题目: 操作给定的二叉树,将其变换为源二叉树的镜像. 二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 ...

随机推荐

  1. LeakCanary检测内存泄漏.md

    一使用步骤 添加依赖 // 内存泄漏检测 debugCompile 'com.squareup.leakcanary:leakcanary-android:1.5.4' releaseCompile ...

  2. 【python进阶】详解元类及其应用1

    前言 元类在python中是很重要的一部分,我将分两次去讲解元类及其应用,此篇为详解元类及其应用第一篇,下面开始今天的说明~~~ 1. 类也是对象 在⼤多数编程语⾔中,类就是⼀组⽤来描述如何⽣成⼀个对 ...

  3. [LeetCode] Beautiful Arrangement II 优美排列之二

    Given two integers n and k, you need to construct a list which contains n different positive integer ...

  4. 【温故而知新】HTTP 概述

    什么是 HTTP 官方解释是 "因特网的多媒体信使",通俗点说,就是个送信的.电话机出来之前,人与人(有一定距离)之间的沟通基本靠写信,然后由快递员送发.如果把 web 服务器和客 ...

  5. [Codeforces]862F - Mahmoud and Ehab and the final stage

    题目大意:n个字符串,支持修改一个位置上的字符串和查询一个区间的子区间中长度乘LCP的最大值,输入字符数和询问数不超过10^5. 做法:求出相邻的LCP长度,区间LCP等于区间最小值,查询分几种情况考 ...

  6. hdu 5016 点分治(2014 ACM/ICPC Asia Regional Xi'an Online)

    Mart Master II Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)T ...

  7. [bzoj4822][Cqoi2017]老C的任务&[bzoj1935][Shoi2007]Tree 园丁的烦恼

    来自FallDream的博客,未经允许,请勿转载,谢谢. 老 C 是个程序员.     最近老 C 从老板那里接到了一个任务——给城市中的手机基站写个管理系统.作为经验丰富的程序员,老 C 轻松地完成 ...

  8. Java并发编程:JMM(Java内存模型)和volatile

    1. 并发编程的3个概念 并发编程时,要想并发程序正确地执行,必须要保证原子性.可见性和有序性.只要有一个没有被保证,就有可能会导致程序运行不正确. 1.1. 原子性 原子性:即一个或多个操作要么全部 ...

  9. java开发笔记——表映射实体类代码示例

    package com.special.ipmsdm; import java.io.Serializable; import javax.persistence.Column; import jav ...

  10. C++多态?

    以前看资料只是理解多态是"一个接口,多种调用" ,但是没有理解其真正意思,不明白具体咋么实现. 不过看了这位博主的博客后对多态有了一些理解,链接:https://www.cnblo ...