[leetcode栈队列]1 栈实现队列

486e1168553d7fb067d489d92974b20c.gif

1二面记录

因为小蓝当时很想去做短视频的互联网公司,无奈学校当地鲜有相关公司来校招,所以就跋涉去了湖大,当天晚上参加了现场笔试,半夜收到第二天复试通知,二面中面试官就让手撕用栈实现队列


767f6d3cd860c386669ed9f4461e936f.jpeg

在此大家可以先思考1分钟

顺便复习

栈和队列

再看题解效果会更好哈



的特点

  • 栈是一种先进后出的数据结构。栈中的元素从栈顶(top)压入(push),从栈顶弹出(top)。注意:压入我们需要判栈是否已满,弹出需要判栈是否已空。下面我们看看图加深下印象。

1fe67fe83fbe386b1b1fd47755d51d62.png

f63ea26a9ae31cb1c00903965a412472.png

入栈 1 2 3

出栈 3 2 1

队列的特点

  • 队列是一种先进先出的数据结构。队列中的元素从队尾(rear)入队(push),从队头(front)出队(pop).同样,我们用图的方式来加深印象。

8e13553a6575837f3cb6be9c506bc748.png

875e62fcf8c5be86ba511526bcbe883c.png

入队列 1 2 3

出队列 1 2 3

1Leetcode232 用栈实现队列

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


push(x) -- 将一个元素放入队列的尾部。

pop() -- 从队列首部移除元素。

peek() -- 返回队列首部的元素。

empty() -- 返回队列是否为空。





示例: 

    MyQueue queue = new MyQueue();

    queue.push(1);

    queue.push(2);  

    queue.peek();  // 返回 1

    queue.pop();   // 返回 1

    queue.empty(); // 返回 false

01题目解析

  • 相信大家已经知道了栈是先进后出,队列是先进先出。假设1 2 3进栈,第一次出栈为3 2 1(反了一次),但是我们想要的出来的顺序为1 2 3,那么我们在此基础反一次。

5f03b39dc5735c6035286db76735aa49.jpeg

  • ok,其实我们需要引入另一栈来辅助我们完成,如下图。

6d223584b5d11651c6f080b27267c0bc.png



好了,到这里总结下实现思路及注意事项:

  • 使用两个栈,元素先进入A栈,然后从B栈出。

  • 在pop()和peek的时候需要注意:

    • 如果B栈有元素,直接从B栈弹出。

    • 如果B栈没有元素,将A栈元素压入B栈。


题目虽简单,细品出真理!一定掌握哈!







03代码实现

1c++版本

ec98bae31d26b11c9b23f31cfdaa75ef.jpeg

2python版本

4b604f7202cae1a6748ab07b08dc6ade.jpeg

3java版本

d799fa1e9a28159112e6148ca0cb46e0.jpeg


猜你喜欢

转载自blog.51cto.com/14984904/2545463