Implement Queue using Stacks

原创 2015年07月07日 21:36:37

1 题目描述

Implement the following operations of a queue using stacks.

  • push(x) -- Push element x to the back of queue.
  • pop() -- Removes the element from in front of queue.
  • peek() -- Get the front element.
  • empty() -- Return whether the queue is empty.
Notes:
  • You must use only standard operations of a stack -- which means only push to toppeek/pop from topsize, and is empty operations are valid.
  • Depending on your language, stack may not be supported natively. You may simulate a stack by using a list or deque (double-ended queue), as long as you use only standard operations of a stack.
  • You may assume that all operations are valid (for example, no pop or peek operations will be called on an empty queue).
题目出处:https://leetcode.com/problems/implement-queue-using-stacks/


2 解题思路

1.用两个栈模拟队列的操作:一个作为插入栈,一个作为弹出栈。关键是当弹出栈为空时,要将插入栈中的元素弹出并插入到弹出栈中。


3 源代码

package com.larry.easy;

import java.util.Stack;

public class ImplementQueueUsingStacks {
	//主要思想为:出入元素时,直接出入到sta1;
	//          弹出元素时,sta2不为空则直接弹出,为空则将sta1中的元素弹出到sta2
	private Stack<Integer> sta1 = new Stack<Integer>();//插入元素栈
	private Stack<Integer> sta2 = new Stack<Integer>();//弹出元素栈
	
	// Push element x to the back of queue.
    public void push(int x) {
        sta1.push(x);
    }

    // Removes the element from in front of queue.
    public void pop() {
        if(!sta2.isEmpty()) sta2.pop();
        else{
        	while(!sta1.isEmpty()) sta2.push(sta1.pop());
        	sta2.pop();
        }
    }

    // Get the front element.
    public int peek() {
    	if(!sta2.isEmpty()) return sta2.peek();
        else{
        	while(!sta1.isEmpty()) sta2.push(sta1.pop());
        	return sta2.peek();
        }
    }

    // Return whether the queue is empty.
    public boolean empty() {
        return (sta1.isEmpty() && sta2.isEmpty());
    }
}


Stack_Queue 一个数组实现三个栈 @CareerCup

原文: Describe how you could use a single array to implement three stacks. 译文: 你如何只用一个数组实现三个栈...
  • hellobinfeng
  • hellobinfeng
  • 2014年03月01日 11:35
  • 1736

Java7后try-catch块的变化——aotocloseable接口

java7优化了异常捕获机制,增加了aotocloseable接口,try-catch块的写法可以更加简洁了...
  • a472770699
  • a472770699
  • 2015年07月16日 16:15
  • 655

gp的资源管理队列

gp可以通过resource queue来限制用户使用系统的资源,gp是通过用户可以执行并发的sql数量、每个sql的cost、sql的优先级来限制用户对gp资源的使用。 一般,系统根据公司对gp的使...
  • rgb_rgb
  • rgb_rgb
  • 2013年11月21日 22:42
  • 1339

【LeetCode-面试算法经典-Java实现】【028-Implement strStr() (实现strStr()函数)】

[【028-Implement strStr() (实现strStr()函数)】](028-Implement strStr() (实现strStr()函数))【LeetCode-面试算法经典-Jav...
  • DERRANTCM
  • DERRANTCM
  • 2015年07月25日 08:08
  • 2615

Shiro框架Web环境下过滤器结构分析

Shiro的过滤器的配置是结合使用Spring的DelegatingFilterProxy与FactoryBean2种技术来完成自身过滤器的植入的,所以理解Shiro的过滤器首先要理解这2者的使用。 ...
  • wangshfa
  • wangshfa
  • 2014年10月21日 14:06
  • 2268

java泛型详解

学习java或者软件开发的出去编程有时候项目经理经常会问到有关泛型的理解; 泛型:是指在定义类或者接口的时候可以为类和接口指定类型形参,该类型形参在定义变量和创建对象的确定 1、定义泛型类,程序实例代...
  • hgd613
  • hgd613
  • 2013年10月12日 20:24
  • 13060

java并发编程 之 Queue的一些总结

什么是队列队列是一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。...
  • wuseyukui
  • wuseyukui
  • 2017年03月31日 00:09
  • 547

Java类集框架——LinkedList子类与Queue接口

学习目标: 掌握LinkedList与List接口的关系。 掌握Queue接口的作用。 LinkedList子类与Queue接口 LinkedList表示的是一个链表的操作类,此类的定义如下:...
  • u013087513
  • u013087513
  • 2016年08月16日 14:31
  • 1156

基于OKHttp的升级改造

在学习了鸿教主的两篇OKHttp的文章后,瞬间感觉OKHttp的高大上,在闲暇之余,将项目中的网络请求框架全部更换成OKHttp,当然在更换的过程中也有地方跟个人习惯有关,本人就在鸿教主的源码上做了一...
  • u010963246
  • u010963246
  • 2016年11月10日 18:50
  • 269

c++容器queue的用法整理

C++队列queue模板类的定义在头文件中,queue 模板类需要两个模板参数,一个是元素类型,一个容器类型,元素类型是必要的,容器类型是可选的,默认为deque 类型。 C++队列Queue是一种容...
  • fengzhizi76506
  • fengzhizi76506
  • 2017年02月01日 18:48
  • 3163
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Implement Queue using Stacks
举报原因:
原因补充:

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