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_