C++算法:兩個棧實現一個隊列

class Solution{
		public:
			void push(int node){
				stack1.push(node);
			}
			int pop(){
				int ret, temp;
				//如果stack2不爲空,則直接彈出棧頂元素即爲隊頭元素
				if(!stack2.empty())
				{
					ret = stack2.top();
					stack2.pop();
					return ret;
				}
				else
				{
					//將stack1中元素彈出壓入到stack2中
					while(!stack1.empty())
					{
						temp = stack1.top();
						stack1.pop();
						stack2.push(temp);
					}
					//將stack2棧頂彈出即爲隊列的隊頭元素,不用再將stack2中的元素壓入stack1中,因爲方便下次pop可以直接彈出stack2的棧頂元素即爲隊頭元素
					ret = stack2.top();
					stack2.pop();
					return ret;
				}
			}
		private:
			stack<int> stack1;  //用來存儲新的元素
			stack<int> stack2;  //棧頂到棧底存儲隊列從最開始的部分元素,方便彈出,整個隊列(從頭到尾)爲stack2棧頂到棧底元素+stack1棧底到棧頂元素
	};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章