这个问题应该是一个很老的问题了吧。遇到过很多次。上次组队赛上还有个比较类似的题目。竟然没有其他的队伍做出来。
其实思想还是比较简单的。
直接上代码吧:
#include <iostream>
#include <stack>
using namespace std;
class Queue
{
private:
stack<int> s1, s2; //s1为栈内倒序, s2为栈内正序
public:
int Front(); // 返回队首元素
void Push(int _bepush); // _bepush 放入队尾
bool Empty(); // 判ong
int Size(); // 返回队列元素个数
void Pop(); // 删除队首元素
};
int Queue::Front()
{
//如果此时队内为空,该如何处理
if(s1.size() + s2.size() == 0){
cout << "now the queue is empty" << endl;
return -1;
}
//队内非空
int _front = -1;
if(!s2.empty()){
_front = s2.top();
} else {
while(!s1.empty()){
s2.push(s1.top());
s1.pop();
}
_front = s2.top();
}
return _front;
}
void Queue::Push(int _bepush)
{
//直接放入栈s1中就ok了
s1.push(_bepush);
}
bool Queue::Empty()
{
if(s1.empty() && s2.empty()) return true;
else return false;
}
int Queue::Size()
{
//直接返回s1.size + s2.size;
return s1.size() + s2.size();
}
void Queue::Pop()
{
if(s1.size() + s2.size() == 0){
cout << "now the queue is empty" << endl;
return ;
}
if(!s2.empty()){
s2.pop();
} else {
while(!s1.empty()){
s2.push(s1.top());
s1.pop();
}
s2.pop();
}
}
int main()
{
Queue q;
q.Push(2);
q.Push(3);
q.Push(1);
cout << q.Front() << endl;
cout << q.Size() << endl;
return 0;
}
暂时只支持int类型的,不过也是可以直接改成模板类,来进行扩充。
现在可以考虑刷一下Leetcode,和九度oj了。主要还是一些面试题目。