用两个栈来实现一个队列。
不包括栈与队列的具体实现,包括10-1课后练习。代码调用STL。
栈的特点是后进先出,队列的特点是先进先出。所以用两个栈实现队列只需要把在出队列时把第一个栈的元素全部压到第二个栈(第二个栈为空),这个时候第二个栈的顺序就是队列顺序也就是先进先出。以下是实现代码。
#include<iostream>
#include <stack>
using namespace std;
void enqueue(stack<int> &mystack,int i)
{
mystack.push(i);
}
int dequeue(stack<int>&stack1,stack<int>&stack2)
{
int i;
if(stack2.empty() ) {
while(!stack1.empty())
{
i=stack1.top();
stack2.push(i);
stack1.pop();
}
}
i=stack2.top();
stack2.pop();
return i;
}
int main()
{
stack <int >stack1;
stack <int>stack2;
int i;
for(i=1;i<4;i++) enqueue(stack1,i);
/* while(!stack1.empty()){
cout<<stack1.top();
stack1.pop();
}*/
cout<<dequeue(stack1,stack2)<<" ";
enqueue(stack1,18);
cout<<dequeue(stack1,stack2)<<" ";
cout<<dequeue(stack1,stack2)<<" ";
cout<<dequeue(stack1,stack2)<<" ";
}
用两个队列实现栈的原理上面类似。利用队列的性质通过两个队列实现栈的性质。