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 }
  • 相关阅读:
    02-自定义CALayer
    01-CALayer的基本操作
    抽屉效果
    手势识别
    事件响应
    寻找最合适的view
    hitTest方法与PointInside方法
    02-事件的产生与传递
    OC图标+启动图
    OC多线程操作
  • 原文地址:https://www.cnblogs.com/tracyhan/p/5490775.html
Copyright © 2011-2022 走看看