文章讲解
栈 队列
栈是先入后出(FILO)的数据结构,队列是先入先出(FIFO)的数据结构,而在cpp中,stack和queue都是一种适配器,底层默认的结构是deque。
232.用栈实现队列
思路:这个题其实用两个栈来实现队列还是很好想的,不知道做过汉诺塔这个题目没有(主要是讲递归的)感觉跟这个差不多
class MyQueue {
private:
stack<int> stkin;
stack<int> stkout;
public:
MyQueue() {
}
void push(int x) {
stkin.push(x);
}
int pop() {
if(stkout.empty())
{
while(!stkin.empty())
{
stkout.push(stkin.top());
stkin.pop();
}
}
int temp=stkout.top();
stkout.pop();
return temp;
}
int peek() {
if(stkout.empty())
{
while(!stkin.empty())
{
stkout.push(stkin.top());
stkin.pop();
}
}
return stkout.top();
}
bool empty() {
if(stkin.empty()&&stkout.empty())
{
return true;
}
return false;
}
};
思路:使用队列来实现栈,如果在使用这类容器的时候,缺少一个标志位,一定要想到size这个参数!
class MyStack {
private:
queue<int> que;
int size;
public:
MyStack() {
size=0;
}
void push(int x) {
que.push(x);
size++;
}
int pop() {
int ans;
size--;
int t_size=size;
while(t_size--)
{
ans=que.front();
que.pop();
que.push(ans);
}
ans=que.front();
que.pop();
return ans;
}
int top() {
int res=this->pop();
this->push(res);
return res;
}
bool empty() {
return que.empty();
}
};