使用两个栈(stack)实现一个队列(queue)

题目:
已知下面Stack类及其3个方法Push、Pop和Count,请用2个Stack实现Queue类的入队(Enqueue)出队(Dequeue)方法。

class Stack  
{  
…  
public:  
         void Push(int x); // Push an element in stack;  
         int Pop();  // Pop an element out of stack;  
         int Count() const;     // Return the number of the elements in stack;  
…  
}; 
class Queue  
{  
…  
public:  
         void Enqueue(int x);  
         int Dequeue();  
   
private:  
         Stack s1;  
         Stack s2;  
…  
}; 

思路:
s1作为存储空间,以s2作为临时缓冲区。
入队时,将元素压入s1。
出队时,将s1的元素逐个“倒入”(弹出并压入)s2,将s2的顶元素弹出作为出队元素,之后再将s2剩下的元素逐个“倒回”s1。

stack2queue.jpg

优化:
在出队时,将s1的元素逐个“倒入”s2时,原在s1栈底的元素,不用“倒入”s2(即只“倒”s1.Count()-1个),可直接弹出作为出队元素返回。这样可以减少一次压栈的操作。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容