劍指offer題解C++【5】用兩個棧實現隊列

題目描述

用兩個棧來實現一個隊列,完成隊列的Push和Pop操作。 隊列中的元素爲int類型。

解題思路

隊列

C++隊列queue模板類的定義在< queue>頭文件中,queue 模板類需要兩個模板參數,一個是元素類型,一個容器類型,元素類型是必要的,容器類型是可選的,默認爲deque 類型。

C++隊列Queue是一種容器適配器,它給予程序員一種先進先出(FIFO)的數據結構。

C++隊列Queue類成員函數如下:

  • back()返回最後一個元素
  • empty()如果隊列空則返回真
  • front()返回第一個元素
  • pop()刪除第一個元素
  • push()在末尾加入一個元素
  • size()返回隊列中元素的個數

queue 的基本操作舉例如下:

  • queue入隊,如例:q.push(x); 將x 接到隊列的末端。
  • queue出隊,如例:q.pop(); 彈出隊列的第一個元素,注意,並不會返回被彈出元素的值。
  • 訪問queue隊首元素,如例:q.front(),即最早被壓入隊列的元素。
  • 訪問queue隊尾元素,如例:q.back(),即最後被壓入隊列的元素。
  • 判斷queue隊列空,如例:q.empty(),當隊列空時,返回true。
  • 訪問隊列中的元素個數,如例:q.size()

用兩個棧實現隊列的push和pop操作,注意這裏給出的模板中要求pop返回int值。
入隊:將元素壓進棧A
出隊:判斷棧B是否爲空,如果爲空,則將棧A中所有元素pop,並push進棧B,棧B出棧;
如果不爲空,棧B直接出棧。

代碼

class Solution
{
public:
    void push(int node) {
        stack1.push(node);
    }

    int pop() {
        if (stack2.empty()){
            while (!stack1.empty()){
                stack2.push(stack1.top());
                stack1.pop();
            }
        }

        if (stack2.empty())
            return -1;

        int res = stack2.top();
        stack2.pop();
        return res;
    }

private:
    stack<int> stack1;
    stack<int> stack2;
};
發佈了99 篇原創文章 · 獲贊 27 · 訪問量 26萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章