class MyQueue { public: stack<int> st_in; stack<int> st_out; MyQueue() { } void push(int x) { st_in.push(x); } int pop() { if(st_out.empty()){ while(!st_in.empty()){ st_out.push(st_in.top()); st_in.pop(); } } int result = st_out.top(); st_out.pop(); return result; } int peek() { int res = this->pop(); // 直接使用已有的pop函数 st_out.push(res); // 因为pop函数弹出了元素res,所以再添加回去 return res; } bool empty() { return st_in.size() == 0 && st_out.size() == 0; } }; /** * Your MyQueue object will be instantiated and called as such: * MyQueue* obj = new MyQueue(); * obj->push(x); * int param_2 = obj->pop(); * int param_3 = obj->peek(); * bool param_4 = obj->empty(); */
一个队列在模拟栈弹出元素的时候只要将队列头部的元素(除了最后一个元素外) 重新添加到队列尾部,此时再去弹出元素就是栈的顺序了。
class MyStack { public: //一个队列在模拟栈弹出元素的时候只要将队列头部的元素(除了最后一个元素外) 重新添加到队列尾部,此时再去弹出元素就是栈的顺序了。 queue<int> queue_1; MyStack() { } void push(int x) { queue_1.push(x); } int pop() { int size = queue_1.size(); size--;//队尾留着变队首 while(size-- > 0){ queue_1.push(queue_1.front()); queue_1.pop(); } int result = queue_1.front(); queue_1.pop(); return result; } int top() { return queue_1.back(); } bool empty() { return queue_1.empty(); } }; /** * Your MyStack object will be instantiated and called as such: * MyStack* obj = new MyStack(); * obj->push(x); * int param_2 = obj->pop(); * int param_3 = obj->top(); * bool param_4 = obj->empty(); */
标签:obj,part01,pop,st,queue,队列,int,day10,push From: https://www.cnblogs.com/zqh2023/p/17640869.html