1.两个栈实现队列
fir_stack_入栈;
sec_stack_出栈。
//队列实现栈
template <class T = int> struct MyStack { queue<T> fir_queue_; queue<T> sec_queue_; void push(T value) { fir_queue_.push(value); } T pop() { while(fir_queue_.size() > 1) { sec_queue_.push(fir_queue_.front()); fir_queue_.pop(); } T tmp = fir_queue_.front(); fir_queue_.pop(); swap(fir_queue_, sec_queue_); return tmp; } }; int main() { stack<int> expect; for (size_t i = 0; i < 10; i ++) { expect.push(i); } for (size_t i = 0; i < 10; i++) { cout << expect.top() << '\t'; expect.pop(); } cout << endl; MyStack<int> myS; for (size_t i = 0; i < 10; i ++) { myS.push(i); } for (size_t i = 0; i < 10; i ++) { cout << myS.pop() << '\t'; } system("pause"); return 0; }
//栈实现队列 template <class T = int> struct MyQueue { stack<T> fir_queue_; stack<T> sec_queue_; void push(T value) { fir_queue_.push(value); } T pop() { if (fir_queue_.size()) { while (fir_queue_.size()) { sec_queue_.push(fir_queue_.top()); fir_queue_.pop(); } } T tmp = sec_queue_.top(); sec_queue_.pop(); return tmp; } }; int main() { queue<int> expect; for (size_t i = 0; i < 10; i ++) { expect.push(i); } for (size_t i = 0; i < 10; i++) { cout << expect.front() << '\t'; expect.pop(); } cout << endl; MyQueue<int> myS; for (size_t i = 0; i < 10; i ++) { myS.push(i); } for (size_t i = 0; i < 10; i ++) { cout << myS.pop() << '\t'; } system("pause"); return 0; }
2两个队列实现栈
fir_queue_入队
出队
if fir_queue_.size() == 1 出队
else fir_queue_出队,直到size() == 1 出队,并 交换fir_queue_和sec_queue_