LeetCode225-使用隊列實現棧
設計一個棧,支持基本的棧操作,這個棧的內部存儲數據的結構爲隊列,隊列的方法只能包含push、peek(front)、pop、size、empty等標準的隊列方法
1、push(x) – 元素 x 入棧
2、pop() – 移除棧頂元素
3、top() – 獲取棧頂元素
4、empty() – 返回棧是否爲空
注意:
首先,我們要明確什麼是棧和隊列。
棧是一種特殊的線性表,僅能在線性表的一端操作,棧頂允許操作,棧底不允許操作。棧的特性:後進先出。
隊列是一種先進先出的線性表。它只允許在表的前端(front)進行刪除操作,而在表的後端(rear)進行插入操作。進行插入操作的端稱爲隊尾,進行刪除操作的端稱爲隊頭。
class Mystack
{
public:
Mystack()
{
void push(int x)
{
}
int pop()
{
}
int top()
{
}
bool empty()
{
}
}
};
具體實現:
#include<iostream>
#include<queue>
using namespace std;
class Mystack
{
public:
Mystack()
{
}
void push(int x)
{
std::queue<int> temp_queue;
temp_queue.push(x);
while(!_data.empty())
{
temp_queue.push(_data.front());
_data.pop();
}
while(!temp_queue.empty())
{
_data.push(temp_queue.front());
temp_queue.pop();
}
}
int pop()
{
int x=_data.front(); //取棧頂元素,即爲隊列頭部元素
_data.pop();
return x;
}
int top()
{
return _data.front();//返回棧頂元素,即爲直接範圍隊列頭部元素
}
bool empty()
{
return _data.empty();
}
private:
std::queue<int> _data; //_data數據隊列存儲元素的順序就是棧存儲元素的順序。
};
int main()
{
Mystack S;
S.push(1);
S.push(2);
S.push(3);
S.push(4);
printf("%d\n",S.top());
S.pop();
printf("%d\n",S.top());
S.push(5);
printf("%d\n",S.top());
return 0;
}
測試結果: