您的位置:首页 > 编程语言 > C语言/C++

两个栈实现队列C++代码

2010-05-06 21:25 447 查看
//头文件
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;
};

//Cpp文件:
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();
}
}

//main函数:
int _tmain(int argc, _TCHAR* argv[])
{
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";

}


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++ class delete