zoukankan      html  css  js  c++  java
  • 两个栈实现一个队列,两个队列实现一个栈

    1、两个栈实现一个队列

    有三种思路:

    思路一:将stack1作为存储空间,将stack2作为临时缓冲区,入队时,直接压入stac1,出队时,将stack1中的元素依次出栈压入stack2中,再将stack2的栈顶元素弹出,最后将stack2中的元素再倒回给stack1

    思路二:入队时,判断stack1是否为空,如果stack1为空,则将stack2中的所有元素都倒入stack1中,再将元素直接压入stack1,否则,直接压入stack1中  

               出队时,判断stack2是否为空,如果stack2为空,则将stack1中的元素倒入stack2中,在将stack2的栈顶元素弹出,否则,直接弹出stack2的栈顶元素

    思路三:入队时,直接压入stack1中

               出队时,判断stack2是否为空,如果stack2为空,则将stack1中的元素倒入stack2中,否则直接弹出stack2中的元素

    思路一与思路二相比,如果是连续出栈操作或连续进栈操作,思路二比思路一好很多。思路三最好代码如下。

     1 //入队操作
     2 void EnQueue(stack<int> &s1,stack<int> &s2,int m)
     3 {
     4     s1.push(m);
     5 }
     6 
     7 //出队操作
     8 void DeQueue(stack<int> &s1,stack<int> &s2,int &m)
     9 {
    10     if (s2.empty())
    11     {
    12         int p = s1.size();
    13         for (int i=0;i<p;i++)
    14         {
    15             s2.push(s1.top());
    16             s1.pop();
    17         }    
    18     }
    19     m = s2.top();
    20     s2.pop();
    21 }

    2、两个队列实现一个栈

     将queue1用作进栈出栈,queue2作为一个中转站

    入栈时,直接压入queue1中

    出栈时,先将queue1中的元素除最后一个元素外依次出队列,并压入队列queue2中,将留在queue1中的最后一个元素出队列即为出栈元素,最后还要把queue2中的元素再次压入queue1中

    实现代码如下:

     1 //进栈操作
     2 void stackpush(queue<int> &q1,queue<int> &q2,int m)
     3 {
     4     q1.push(m);
     5 }
     6 
     7 //出栈操作
     8 void stackpop(queue<int> &q1,queue<int> &q2,int &m)
     9 {
    10     int p = q1.size();
    11     for (int i=0;i<p-1;i++)
    12     {
    13         q2.push(q1.front());
    14         q1.pop();
    15     }
    16     m = q1.front();
    17     q1.pop();
    18     int l = q2.size();
    19     for (int j = 0;j<l;j++)
    20     {
    21         q1.push(q2.front());
    22         q2.pop();
    23     }
    24 }
  • 相关阅读:
    PAT (Advanced Level) 1060. Are They Equal (25)
    PAT (Advanced Level) 1059. Prime Factors (25)
    PAT (Advanced Level) 1058. A+B in Hogwarts (20)
    PAT (Advanced Level) 1057. Stack (30)
    PAT (Advanced Level) 1056. Mice and Rice (25)
    PAT (Advanced Level) 1055. The World's Richest (25)
    PAT (Advanced Level) 1054. The Dominant Color (20)
    PAT (Advanced Level) 1053. Path of Equal Weight (30)
    PAT (Advanced Level) 1052. Linked List Sorting (25)
    PAT (Advanced Level) 1051. Pop Sequence (25)
  • 原文地址:https://www.cnblogs.com/tracyhan/p/5490775.html
Copyright © 2011-2022 走看看