classMyQueue { public: stack<int> stIn; stack<int> stOut; /** Initialize your data structure here. */ MyQueue() {
} /** Push element x to the back of queue. */ voidpush(int x){ stIn.push(x); }
/** Removes the element from in front of queue and returns that element. */ intpop(){ // 只有当stOut为空的时候,再从stIn里导入数据(导入stIn全部数据) if (stOut.empty()) { // 从stIn导入数据直到stIn为空 while(!stIn.empty()) { stOut.push(stIn.top()); stIn.pop(); } } int result = stOut.top(); stOut.pop(); return result; }
/** Get the front element. */ intpeek(){ int res = this->pop(); // 直接使用已有的pop函数 stOut.push(res); // 因为pop函数弹出了元素res,所以再添加回去 return res; }
/** Returns whether the queue is empty. */ boolempty(){ return stIn.empty() && stOut.empty(); } };
classMyStack { public: queue<int> que; /** Initialize your data structure here. */ MyStack() {
} /** Push element x onto stack. */ voidpush(int x){ que.push(x); } /** Removes the element on top of the stack and returns that element. */ intpop(){ int size = que.size(); size--; // 队列pop元素,只剩下一个的时候则是栈应出的元素,而pop的元素又重新进入队列 while (size--) { // 将队列头部的元素(除了最后一个元素外) 重新添加到队列尾部 que.push(que.front()); que.pop(); } int result = que.front(); // 此时弹出的元素顺序就是栈的顺序了 que.pop(); return result; }
/** Get the top element. */ inttop(){ return que.back(); }
/** Returns whether the stack is empty. */ boolempty(){ return que.empty(); } };