LeetCode225-使用隊列實現棧

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;
	
} 

測試結果:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章