题目描述:
用两个栈来实现一个队列,此队列需要完成appendTail尾插与deleteHead头删,并返回所删除的元素,若队列中没有元素可删除,返回-1
分析:
实现一个队列说白了就是让我们实现元素的先进先出功能,怎么让先进去的数实现先出功能就是这个问题的关键所在。
两个栈s1,s2,s1用来作为插入,s2用来作为删除,插入时很简单,直接向s1中push()元素,删除时,我们直接在s2中top()、pop(),如果s2中没有元素存在,我们就把s1中的所有元素push到s2中,如果s1中也没有元素就说明没有元素可删除,返回-1,这样我们就实现了队列的先进先出功能
代码:
分析出思路后代码相当简单。
class CQueue{
stack<int> s1; //用来插入
stack<int> s2;
public:
CQueue()
{
}
void appendTail(int value)
{
s1.push(value);
}
int deleteHead()
{
if(s2.empty())
{
if(s1.empty()) return -1;
while(!s1.empty())
{
s2.push(s1.top());
s1.pop();
}
}
int tmp = s2.top();
s2.pop();
return tmp;
}
};