- 栈和队列的数据结构
class Stack{
public:
void Push(int x);//入栈
int Pop();//出栈
int Count() const;//统计元素个数
};
class Queue{
public:
void Enqueue(int x);//入队
int Dequeue();// 出队
private:
Stack s1;//栈s1
Stack s2;//栈s2
}
- 入队
先判断s1是否为空,如不为空,说明所有元素都在s1,此时将入队元素直接压入s1;如为空,要将s2的元素逐个“倒回”s1(出队时),再压入入队元素 。
public void Enqueue(int x){
if(Count(s1)==0){
while(Count(s2)>0)
s1.Push(s2.Pop());
}
s1.Push(x);
}
- 出队
先判断s1是否为空,若为空,直接取出s2的栈顶元素;若不为空,将s1中Count()-1个元素压入s2中,然后将最后一个元素出栈。
public int Dequeue(){
if(Count(s1)==0)
return s2.Pop();
while(Count(s1)>1){
s2.Push(s1.Pop());
}
return s1.Pop();
}