用队列实现栈

小结:

1、

借助linkedlist,每次添加元素后,反转,取逆序

Implement Stack using Queues - LeetCode
https://leetcode.com/problems/implement-stack-using-queues/solution/

Implement Stack using Queues - LeetCode Articles
https://leetcode.com/articles/implement-stack-using-queues/

使用队列实现栈的下列操作:

  • push(x) -- 元素 x 入栈
  • pop() -- 移除栈顶元素
  • top() -- 获取栈顶元素
  • empty() -- 返回栈是否为空

注意:

  • 你只能使用队列的基本操作-- 也就是 push to backpeek/pop from frontsize, 和 is empty 这些操作是合法的。
  • 你所使用的语言也许不支持队列。 你可以使用 list 或者 deque(双端队列)来模拟一个队列 , 只要是标准的队列操作即可。
  • 你可以假设所有操作都是有效的(例如, 对一个空的栈不会调用 pop 或者 top 操作)。

Approach #1 (Two Queues, push - O(1), pop O(n))

Approach #2 (Two Queues, push - O(n), pop O(1) )

Approach #3 (One Queue, push - O(n), pop O(1))

package leetcode;

import java.util.LinkedList;import java.util.Queue;

class MyStack {

    //one Queue solution    private Queue<Integer> q = new LinkedList<Integer>();

    public static void main(String[] args) {        MyStack myStack = new MyStack();        myStack.push(-2);        myStack.push(0);        myStack.push(-3);        myStack.push(13);        myStack.pop();        myStack.top();    }

    // Push element x onto stack.    public void push(int x) {        q.add(x);        for (int i = 1; i < q.size(); i++) { //rotate the queue to make the tail be the head            q.add(q.poll());        }    }

    // Removes the element on top of the stack.    public int pop() {        return q.poll();    }

    // Get the top element.    public int top() {        return q.peek();    }

    // Return whether the stack is empty.    public boolean empty() {        return q.isEmpty();    }}

原文地址:https://www.cnblogs.com/yuanjiangw/p/10803322.html

时间: 2024-08-05 03:36:19

用队列实现栈的相关文章

编程题目: 两个队列实现栈(Python)

感觉两个队列实现栈 比 两个栈实现队列 麻烦 1.栈为空:当两个队列都为空的时候,栈为空 2.入栈操作:当队列2为空的时候,将元素入队到队列1:当队列1位空的时候,将元素入队到队列2: 如果队列1 和 队列2 都为空的时候,那就选择入队到队列1. 3.出队操作:当两个队列都为空的时候,引发错误"栈为空": 当队列2位空的时候,如果队列1中只有一个元素,则直接将队列1中的元素出队: 如果队列1不止一个元素的时候,就将队列1的元素出队然后入队到队列2,知道队列1中只有一个元素,然后将队列1

C语言算法系列---1.队列和栈

写在前面:在家玩了好久,实在是不知道干嘛了,突然想找些事做,现在是时候做些什么了.这些东西不见得多高深,也可能很简单,但很基础,也无法忽视.同时,也是自己学习走过的一条路. 这是开头,就写写C的队列和栈的一些算法吧. 首先是栈的一些基础功能的实现,先贴代码: #include<stdlib.h> #include<stdio.h> typedef int SElemType; //声明栈元素类型为int typedef int Status; //函数返回值的类型为int #def

剑指Offer面试题7(Java版):用两个栈实现队列与用两个队列实现栈

题目:用两个栈实现一个队列.队列的声明如下,请实现它的两个函数appendTail和deletedHead,分别完成在队列尾部插入节点和在队列头部删除节点的功能. 我们通过一个具体的例子来分析该队列插入和删除元素的过程.首先插入一个元素a,不妨先把它插入到stack1,此时stack1 中的元素有{a},stack2为空.再压入两个元素b和c,还是插入到stack1中,此时stack1中的元素有{a,b,c},其中c位于栈顶,而stack2仍然为空. 这个时候,我们试着删除从队列中删除一个元素.

数据结构(7)----栈与队列之栈的应用四则运算表达式求值

栈与队列之栈的应用四则运算表达式求值 栈在四则运算表达式求值的应用为逆波兰表达式(后缀表达式) 普通算式(中缀表达式):9 + (3 - 1) * 3 + 10 / 2     ---(1) 逆波兰表达式(后缀表达式):9 3 1 - 3 * + 10 2 /         ---(2) 1:逆波兰表达式的计算规则 从左到右遍历表达式的每个数字和符号,遇到数字就进栈,遇到符号,就将处于栈顶的两个数字出栈,进行运算,再把运算结果进栈,一直到最终获得结果.接下来我们以(2)式为例:

数组的队列和栈方法

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>数组的队列和栈方法</title></head><body><script>// 栈是一种LIFO(Last-In-First-Out后进先出)的数据结构,js中的push()和pop()类似栈的行为// 队列是一种FIFO(

1.3 背包、队列和栈

知识点 背包:只进不出,迭代顺序不确定(即无先后顺序) 队列:先进先出 栈   :后进先出 两种基础数据结构:数组和链表 数据结构 优点 缺点 数组 通过索引可以访问任意元素 在初始化时就需要知道元素的数量 链表 使用的空间大小和元素数量成正比 需要通过引用访问任意元素 练习 1.3.1 为FixedCapacityStackOfStrings添加一个方法isFull().       /*其中注意N的含义,别和数组下标完全混淆*/ public class FixedCapacityStack

【JavaSE】day05_List集合_List排序_队列和栈

1.List集合 1)有序集,可重复集.List的特点是可以像数组一样,根据下标操作元素.所以List提供了一些独有的方法. 2)常用实现类: --ArrayList:内部由数组实现,查询快. --LinkedList:内部由链表实现,增删快. 3)E get(int index) 获取指定下标对应的元素.(下标从0开始) 4)E set(int index,E e) 将给定的元素设置到指定的位置上,返回值为原位置上的元素.所以该操作是替换元素操作. 注:需在现有的元素上进行操作. 代码演示:

关于队列与栈相互模拟的读书笔记

栈与队列都是比较高级的数据结构,虽然不难,但有时有些问题也比较灵活,在<编程之美>与<剑指offer>上就有一些这样的题目.用队列模拟栈.用站栈模拟队列,以及现实队列与栈的最大值与最小值求解,这些都是基础的,只要理解栈的后进先出与队列的先进先出特点即可解决. 1.栈模拟队列 用两个栈,元素从一个栈stackA进入,从另一个栈stackB出来.进队列时直接添加到stackA,出队列时若stackA非空,则直接出,否则将stackB中元素全部初战装到stackA,然后从stackA出栈

算法系列(六)数据结构之表队列和栈

在http://blog.csdn.net/robertcpp/article/details/51559333一文中,我们讲了排序,这一章来介绍一下基本数据结构:表.队列.栈和它们的简单实现 一.表ADT 1.数组实现顺序表 通过对数组操作,来直接对表进行增删查改操作,这种线性表查找某个位置的元素花费的时间为O(1),但是插入删除元素花费的时间为O(n),如果对表的操作更多的是访问操作,那么选择这种实现更为合适. 下面是一个简单实现 package com.algorithm.list; im

STL的队列和栈简单使用

STL的队列和栈简单使用 #include <iostream>#include <cstdio>#include <string.h>#include <algorithm>#include <queue>#include <stack>using namespace std;int main(){ queue<int> Q; stack<int> S; int i; for(i=1;i<=10;i++