這個問題應該是一個很老的問題了吧。遇到過很多次。上次組隊賽上還有個比較類似的題目。竟然沒有其他的隊伍做出來。
其實思想還是比較簡單的。
直接上代碼吧:
#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了。主要還是一些面試題目。