两个堆栈模拟一个队列

两个堆栈模拟一个队列
被考过两次
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();
    }

}

你可能感兴趣的:(两个堆栈模拟一个队列)