您的位置:首页 > 理论基础 > 数据结构算法

关于 两个栈实现队列的方法

2016-05-12 15:10 375 查看
栈和队列的数据结构

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();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据结构 队列