【 腾讯精选练习 50 题】用队列实现栈

简介: 【 腾讯精选练习 50 题】用队列实现栈

1. 题目描述

 

 

2. 题目分析

  • 有一说一,题目有点沙雕
  • 用两个队列来实现一个栈
  • 栈:先进后出、队列:先进先出
  • 我们用两个队列来模拟栈,一个队列当主栈,一个队列用来辅助,我们在push的时候,将主栈的元素转移到辅助栈中,然后push至主栈,再从辅助栈拿回所有的数据,这样,一个模拟的栈基本构成
  • pop(),直接应用队列的poll()
  • top(),直接应用队列的peek()
  • empty(),直接应用队列的isEmpty()

 

3. 题目代码

public class Stack {
  Queue<Integer> queue1 = new LinkedList<Integer>();
  Queue<Integer> queue2 = new LinkedList<Integer>();
  /**
   * Initialize your data structure here.
   * 
   * @return
   */
  public Stack() {
  }
  /** Push element x onto stack. */
  public void push(int x) {
    while (!queue1.isEmpty()) {
      queue2.add(queue1.peek());
      queue1.poll();
    }
    queue1.add(x);
    while (!queue2.isEmpty()) {
      queue1.add(queue2.peek());
      queue2.poll();
    }
  }
  public int pop() {
    int temp = queue1.peek();
    queue1.poll();
    return temp;
  }
  /** Get the top element. */
  public int top() {
    return queue1.peek();
  }
  /** Returns whether the stack is empty. */
  public boolean empty() {
    return queue1.isEmpty();
  }
}


相关文章
|
1天前
|
C++
【洛谷 P1044】[NOIP2003 普及组] 栈 题解(递归+记忆化搜索)
**NOIP2003普及组栈问题**:给定操作数序列1到n,仅允许push(进栈)和pop(出栈)操作。目标是计算所有可能的输出序列总数。输入包含一个整数n(1≤n≤18)。示例输入3,输出5。当队列空时返回1,栈空则只能入栈,栈非空时可入栈或出栈。AC C++代码利用记忆化搜索求解。
5 1
|
3天前
|
算法
$停车场管理系统 栈与队列
$停车场管理系统 栈与队列
5 1
|
1天前
|
算法 Java 机器人
Java数据结构与算法:线性数据结构之栈
Java数据结构与算法:线性数据结构之栈
|
1天前
|
存储 机器人 Java
堆和栈的区别
堆和栈的区别
|
1天前
|
C++
【洛谷 P1739】表达式括号匹配 题解(栈)
该编程题目要求检查给定的包含字母、运算符和括号的表达式是否括号匹配。输入为一行表达式,以`@`结束。如果括号匹配,输出`YES`,否则输出`NO`。样例包括一个匹配和一个不匹配的表达式。解决方案是使用栈,遇到左括号入栈,遇到右括号时判断栈是否为空,栈空则输出`NO`,否则出栈。当读到`@`时,栈空则输出`YES`,否则输出`NO`。提供的AC代码使用C++实现,通过`stack`处理括号匹配。
4 0
|
1天前
|
Python
数据结构===队列
数据结构===队列
|
1天前
|
存储 Java Python
数据结构===栈
数据结构===栈
|
2天前
|
索引
栈的数组实现
栈的数组实现
4 0
|
7天前
数据结构——栈和队列
数据结构——栈和队列
10 1
|
10天前
|
存储 算法 调度
数据结构与算法-栈篇
数据结构与算法-栈篇
13 3