本文主要是介绍【栈与队列】用栈实现队列,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目: 使用栈实现队列的下列操作:
push(x) -- 将一个元素放入队列的尾部。
pop() -- 从队列首部移除元素。
peek() -- 返回队列首部的元素。
empty() -- 返回队列是否为空。
分析:栈提供了push和pop等接口,所有元素必须符合先进后出的规则,所以栈不能遍历,也没有迭代器。队列先进先出同样也不能遍历,不提供迭代器。队列要求先进先出,然而栈的特性是先进后出。我们可以考虑使用两个栈(一个输入栈,一个输出栈)实现队列的先进后出特性。
具体代码:
class MyQueue {
public:stack<int> stIn;stack<int> stOut;MyQueue() {}void push(int x) {stIn.push(x);}int pop() {if(stOut.empty()) {while(!stIn.empty()) {stOut.push(stIn.top());stIn.pop();}}int result = stOut.top();stOut.pop();return result;}int peek() {int res = this->pop();stOut.push(res);return res;}bool empty() {return stIn.empty() && stOut.empty();}
};
这篇关于【栈与队列】用栈实现队列的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!