栈与队列的转换
队列转换为栈
一个队列队列通过元素循环放置将前面的元素放在后面,将最后一个元素移到最前面弹出,循环往返,不断弹出元素。
#include<iostream>
#include<queue>
using namespace std;
class MyStack
{
public :
queue<int> que;
myStack(){
}
void push(int x)
{
que.push(x);
}
int pop()
{
int size=que.size();
size--;
while(size--)
{
que.push(que.front());
que.pop();
}
int result=que.front();
que.pop();
return result;
}
int top()
{
return que.back();
}
bool empty()
{
return que.empty();
}
};
int main()
{
MyStack stack;
stack.push(3);
stack.push(4);
stack.push(5);
stack.push(6);
cout<<stack.pop()<<endl;
return 0;
}
栈转换为对列
通过两个栈实现对列,一个做为出口栈,一个作为入口栈,将入口栈元素顺序弹出,压入到出口栈中实现,出口栈中的顺序被倒置,然后不断弹出,实现对列
#include<iostream>
#include<string>
#include<stack>
using namespace std;
class MyQueue{
public :
MyQueue(){
}
stack<int> stIn;
stack<int> stOut;
void push(int x)
{
stIn.push(x);
}
int pop()
{
if(stOut.empty())
{
while(!stIn.empty())
{
stOut.push(stIn.top());
stIn.pop();
}
}
int result =stOut.top();
stOut.pop();
return result;
}
int peek()
{
int res=this->pop();
stOut.push(res);
return res;
}
bool empty()
{
return stIn.empty()&&stOut.empty();
}
};
int main()
{
MyQueue que;
que.push(2);
que.push(3);
que.push(4);
que.push(5);
cout<<que.pop()<<endl;
cout<<que.empty()<<endl;
return 0;
}
浙公网安备 33010602011771号