• LeetCode第225题—用队列实践栈


    本次写的题目是用队列实践栈,为LeetCode里面的题目,让我们来康康是如何解出这道题目的吧,各位尚没有思路的小伙伴可以跟随着博主的解题思路一步步来,感受一下😎

    🌱分析阶段

    题意一目了然,就是用队列来实现栈的功能。

    我们都知道队列的特点是先进先出,而栈的特点却是先进后出,完全相反的两个特点。所以要想单凭一个队列是无法实现模仿的,在这里我们先用两个队列来尝试一下。这个过程自己画图做思考。

    在简单尝试后,发现该方法可行,我们只需要设置两个队列,分别命名为qu1和qu2。当两个队列都为空且要入栈的时候,先放入qu1队列里。而要出栈时,拥有元素的队列弹出队列长度-1个元素到另一个空队列中,而剩下的最后一个元素则就为要弹出的栈顶元素。图示如下👇:

    问题思路较为清晰,到此时已经分析的较为清楚了,接下来让我们直接进入代码阶段吧😎


    🌱代码阶段 

    我们按照一个一个函数来进行代码编写。首先是要创建两个队列,分别命名为qu1和qu2,如下代码👇:

    1. import java.util.*; //注意这里要调用包
    2. class MyStack {
    3. public Queue<> qu1 = new LinkedList<>();
    4. public Queue<> qu2 = new LinkedList<>();
    5. public MyStack() {
    6. }
    7. public void push(int x) {
    8. }
    9. public int pop() {
    10. }
    11. public int top() {
    12. }
    13. public boolean empty() {
    14. }
    15. }

     - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    🍃push函数

    按照前面分析阶段中来写代码:如果一开始两个队列都没有元素,就放入qu1;如果其中一个有元素,那么就放入有元素的里面。具体代码如下👇:

    1. import java.util.*; //注意这里要调用包
    2. class MyStack {
    3. public Queue<> qu1 = new LinkedList<>();
    4. public Queue<> qu2 = new LinkedList<>();
    5. public MyStack() {
    6. }
    7. public void push(int x) {
    8. if(qu1.size()==0&&qu2.size()==0){
    9. qu1.offer(x);
    10. }else if(qu2.size()!=0){
    11. qu2.offer(x);
    12. }else{
    13. qu1.offer(x);
    14. }
    15. }
    16. //其他未写代码暂时省略
    17. }

     - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    🍃pop函数

    依据分析:将有元素的队列弹出(队列长度-1)个元素到另一空队列中,最后剩下的那个元素就是我们要弹出的元素。具体代码如下👇:

    1. import java.util.*; //注意这里要调用包
    2. class MyStack {
    3. public Queue<> qu1 = new LinkedList<>();
    4. public Queue<> qu2 = new LinkedList<>();
    5. public MyStack() {
    6. }
    7. public void push(int x) {
    8. if(qu1.size()==0&&qu2.size()==0){
    9. qu1.offer(x);
    10. }else if(qu2.size()!=0){
    11. qu2.offer(x);
    12. }else{
    13. qu1.offer(x);
    14. }
    15. }
    16. public int pop() {
    17. //题目提出无栈为空的情况,所以不讨论栈为空的情况
    18. int size = 0;
    19. if(qu1.size()!=0){
    20. size = qu1.size();
    21. for(int i = 0; i1; i++){
    22. qu2.offer(qu1.poll());
    23. }
    24. return qu1.poll();
    25. }else{
    26. size = qu2.size();
    27. for(int i = 0; i1; i++){
    28. qu1.offer(qu2.poll());
    29. }
    30. return qu2.poll();
    31. }
    32. }
    33. //其他未写代码暂时省略
    34. }

     - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    🍃top函数

    和pop函数差不多,只需要改成先记录下最后剩余元素,然后把最后一个元素转到另一个队列中,返回该最后元素的值即可😎具体代码如下👇:

    1. import java.util.*; //注意这里要调用包
    2. class MyStack {
    3. public Queue<> qu1 = new LinkedList<>();
    4. public Queue<> qu2 = new LinkedList<>();
    5. public MyStack() {
    6. }
    7. public void push(int x) {
    8. if(qu1.size()==0&&qu2.size()==0){
    9. qu1.offer(x);
    10. }else if(qu2.size()!=0){
    11. qu2.offer(x);
    12. }else{
    13. qu1.offer(x);
    14. }
    15. }
    16. public int pop() {
    17. //题目提出无栈为空的情况,所以不讨论栈为空的情况
    18. int size = 0;
    19. if(qu1.size()!=0){
    20. size = qu1.size();
    21. for(int i = 0; i1; i++){
    22. qu2.offer(qu1.poll());
    23. }
    24. return qu1.poll();
    25. }else{
    26. size = qu2.size();
    27. for(int i = 0; i1; i++){
    28. qu1.offer(qu2.poll());
    29. }
    30. return qu2.poll();
    31. }
    32. }
    33. public int top() {
    34. int size = 0;
    35. if(qu1.size()!=0){
    36. size = qu1.size();
    37. for(int i = 0; i1; i++){
    38. qu2.offer(qu1.poll());
    39. }
    40. int f = qu1.poll();
    41. qu2.offer(f);
    42. return f;
    43. }else{
    44. size = qu2.size();
    45. for(int i = 0; i1; i++){
    46. qu1.offer(qu2.poll());
    47. }
    48. int f = qu2.poll();
    49. qu1.offer(f);
    50. return f;
    51. }
    52. }
    53. public boolean empty() {
    54. if(qu1.size()==0&&qu2.size()==0) return true;
    55. return false;
    56. }
    57. }

    由于empty函数的思路很清晰,所以博主在上面代码一并写入了。

    以上,就是全部代码了😎运行下逝逝吧~

    nice😎✨ 

  • 相关阅读:
    Python 操作XML文件一文通
    Spring
    (附源码)ssm失物招领平台 毕业设计 271621
    核爆,字节跳动算法工程师,手写1000页数据算法笔记:Github已标星79k
    忘记密码,如何解除Excel的限制保护?
    FinGPT:开源金融大型语言模型
    OmniGraffle Pro v7.22.3(流程图UML图)
    Docker与Kubernetes结合的难题与技术解决方案
    力扣 572. 另一棵树的子树
    【安装文档】TRex流量分析仪保姆级安装指南--基于VMware虚拟机(ubantu18.04@Intel 82545EM)
  • 原文地址:https://blog.csdn.net/Green_756/article/details/126569460