0
点赞
收藏
分享

微信扫一扫

【剑指offer】剑指 Offer 09. 用两个栈实现队列(C++ 模拟 栈 队列)


​​题目链接​​

题意:

用两个栈模拟队列,要求实现插入和删除操作。

思路:

  • 栈的特点:先进后出
    队列的特点:先进先出
  • 所以用一个栈维护插入操作,一个栈维护删除操作。
  • 插入的时候,插入到栈里。
  • 删除的时候,弹出栈的元素。如果为空的话,将里的所有元素弹入里,这样的元素顺序就是队列删除元素的顺序,符合队列先进先出的特性。
  • 还有几个小细节:
    构造函数里要将两个栈清空;
    删除的时候,如果stk1也为空的话,则返回-1

代码:

class CQueue {
public:
stack<int>stk1,stk2;
CQueue() {
while(!stk1.empty()) stk1.pop();
while(!stk2.empty()) stk2.pop();
}

void appendTail(int value) {
stk1.push(value);
}

int deleteHead() {
if(stk2.empty()){
while(!stk1.empty()){
stk2.push(stk1.top());
stk1.pop();
}
}
if(stk2.empty()) return -1;
else{
int now=stk2.top();
stk2.pop();
return now;
}
}
};

/**
* Your CQueue object will be instantiated and called as such:
* CQueue* obj = new CQueue();
* obj->appendTail(value);
* int param_2 = obj->deleteHead();
*/

参考官方​​题解​​


举报

相关推荐

0 条评论