【LeetCode】225. 用隊列實現棧

解題思路

隊列的特性:先進先出
棧的特性:先進後出
在解決用棧實現隊列問題時,利用的是兩個棧,採用的是利用輔助棧來實現隊列的功能。因此對於此題也可以使用此思想。
利用兩個隊列,一個作爲輸入隊列inputQ,一個作爲輸出隊列outputQ。

  • 對於MyStack.push()操作,由inputQ完成
  • 對於MyStack.pop()操作,由於棧的先進後出特性,可以使inputQ不斷的pop,並將其值壓回到outputQ,直到inputQ.size()==1即爲此時應該出棧的元素,記錄下來。
  • 之後再把outputQ中的元素壓回到inputQ中(可使用inputQ=outputQ完成該操作),outputQ清空,至此該過程結束。
  • 對於MyStack.top()操作,類似於pop,只不過把可以進行簡化一下,對inputQ不斷pop,並記錄front,直達爲空,同時將該值壓回到outputQ。之後把outputQ賦值給inputQ即可。
    對於MyStack.empty()操作,判斷inputQ是否爲空即可。

代碼

class MyStack {
public:
	/** Initialize your data structure here. */
	deque<int> inputQ;
	deque<int> outputQ;
	MyStack() {

	}

	/** Push element x onto stack. */
	void push(int x) {
		inputQ.push_back(x);
	}

	/** Removes the element on top of the stack and returns that element. */
	int pop() {
		int popNum=0;
		if (!inputQ.empty())
		{
			while (inputQ.size()!=1)
			{
				outputQ.push_back(inputQ.front());
				inputQ.pop_front();
			}
			popNum = inputQ.front();
			inputQ.pop_front();
			inputQ = outputQ;
			outputQ.clear();
		}
		return popNum;
	}

	/** Get the top element. */
	int top() {
		int popNum = 0;
		if (!inputQ.empty())
		{
			while (!inputQ.empty())
			{
				popNum = inputQ.front();
				outputQ.push_back(inputQ.front());
				inputQ.pop_front();
			}
			inputQ = outputQ;
			outputQ.clear();
		}
		return popNum;
	}

	/** Returns whether the stack is empty. */
	bool empty() {
		if (inputQ.empty()) return true;
		else return false;
	}
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章