题意:
用两个栈模拟队列,要求实现插入和删除操作。
思路:
队列的特点:先进先出
所以用一个栈s t k 1维护插入操作,一个栈s t k 2维护删除操作。
插入的时候,插入到栈s t k 1里。
删除的时候,弹出栈s t k 2的元素。如果s t k 2 为空的话,将s t k 1里的所有元素弹入s t k 2 里,这样s t k 2的元素顺序就是队列删除元素的顺序,符合队列先进先出的特性。
还有几个小细节:
构造函数里要将两个栈清空;
删除的时候,如果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(); */