1. 程式人生 > >兩個棧實現一個佇列,兩個佇列實現一個棧

兩個棧實現一個佇列,兩個佇列實現一個棧

1、兩個棧實現一個佇列

           入隊時,直接壓入stack1中。

           出隊時,判斷stack2是否為空,如果stack2為空,則將stack1中的元素倒入stack2中,否則直接彈出stack2中的元素。

//入隊操作
void EnQueue(stack<int> &s1,stack<int> &s2,int m)
{
    s1.push(m);
}

//出隊操作
void DeQueue(stack<int> &s1,stack<int> &s2,int &m)
{
    if (s2.empty())
    {
        int p = s1.size();
        for (int i=0;i<p;i++)
        {
            s2.push(s1.top());
            s1.pop();
        }    
    }
    m = s2.top();
    s2.pop();
}

2、兩個佇列實現一個棧

 將queue1用作進棧出棧,queue2作為一箇中轉站。

入棧時,直接壓入queue1中。

出棧時,先將queue1中的元素除最後一個元素外依次出佇列,並壓入佇列queue2中,將留在queue1中的最後一個元素出佇列即為出棧元素,最後還要把queue2中的元素再次壓入queue1中。

實現程式碼如下:

//進棧操作
void stackpush(queue<int> &q1,queue<int> &q2,int m)
{
    q1.push(m);
}

//出棧操作
void stackpop(queue<int> &q1,queue<int> &q2,int &m)
{
    int p = q1.size();
    for (int i=0;i<p-1;i++)
    {
        q2.push(q1.front());
        q1.pop();
    }
    m = q1.front();
    q1.pop();
    int l = q2.size();
    for (int j = 0;j<l;j++)
    {
        q1.push(q2.front());
        q2.pop();
    }
}