# 队列实现栈|栈实现队列
![](../pictures/souyisou.png) **labuladong 刷题辅助插件上线,欢迎大家使用,[下载地址](https://github.com/labuladong/fucking-algorithm/releases),别忘了点个 star**~ 读完本文,你不仅学会了算法套路,还可以顺便去 LeetCode 上拿下如下题目: [232.用栈实现队列](https://leetcode-cn.com/problems/implement-queue-using-stacks) [225.用队列实现栈](https://leetcode-cn.com/problems/implement-stack-using-queues) **-----------** 队列是一种先进先出的数据结构,栈是一种先进后出的数据结构,形象一点就是这样: ![](../pictures/%E6%A0%88%E9%98%9F%E5%88%97/1.jpg) 这两种数据结构底层其实都是数组或者链表实现的,只是 API 限定了它们的特性,那么今天就来看看如何使用「栈」的特性来实现一个「队列」,如何用「队列」实现一个「栈」。 ### 一、用栈实现队列 首先,队列的 API 如下: ```java class MyQueue { /** 添加元素到队尾 */ public void push(int x); /** 删除队头的元素并返回 */ public int pop(); /** 返回队头元素 */ public int peek(); /** 判断队列是否为空 */ public boolean empty(); } ``` 我们使用两个栈 `s1, s2` 就能实现一个队列的功能(这样放置栈可能更容易理解): ![](../pictures/%E6%A0%88%E9%98%9F%E5%88%97/2.jpg) ```java class MyQueue { private Stack