程式員面試題精選(48):兩個堆棧類比隊列c++代碼實現

來源:互聯網
上載者:User

代碼如下:

#include <iostream>

using namespace std;

class ZStackQueue
{
public:
    class ZStack
    {
    public:
        ZStack(int size);
        ~ZStack();
  
        int Pop();
        void Push(int e);
        bool Empty(){return top == 0;}
  
    private:
        int *s;
        int top;
        int size;
    };
 
 public:
  ZStackQueue(int n) : s1(n), s2(n){}
  void EnQueue(int e);
  int DeQueue();
  
 private:
  ZStack s1, s2;
};

ZStackQueue::ZStack::ZStack(int n)
: s(0), top(0), size(n)
{
    s = new int[size]();
}

ZStackQueue::ZStack::~ZStack()
{
    if (s)
    {
        delete [] s;
        s = 0;
    }
 
    top = 0;
    size = 0;
}

int ZStackQueue::ZStack::Pop()
{
    if (top > 0)
        return s[--top];
    else
        return ~0;
}

void ZStackQueue::ZStack::Push(int e)
{
    if (top < size)
        s[top++] = e;
}

void ZStackQueue::EnQueue(int e)
{
    s1.Push(e);
}

int ZStackQueue::DeQueue()
{
    if (!s2.Empty())
    {
        return s2.Pop();
    }
    else
    {
        while (!s1.Empty())
            s2.Push(s1.Pop());
  
        return s2.Pop();
    }
}
int main()
{
 ZStackQueue q(3);
 q.EnQueue(5);
 q.EnQueue(2);
 q.EnQueue(8);
 cout<<q.DeQueue()<<"/t";//<<q.DeQueue()<<"/t"<<q.DeQueue()<<endl;     //如果這樣寫的話,輸出的結果會讓你誤以為這不是個棧嗎,哪是隊列呀!呵呵,原因大俠一看都知道的!
 cout<<q.DeQueue()<<"/t";
 cout<<q.DeQueue()<<"/t";
 return 0;

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.