# 队列实现栈|栈实现队列
![](../pictures/souyisou.png) 相关推荐: * [手把手带你刷二叉树(第三期)](https://labuladong.gitbook.io/algo) * [高性能短链设计](https://labuladong.gitbook.io/algo) 读完本文,你不仅学会了算法套路,还可以顺便去 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