雙隊列模擬棧

 兩個隊列模擬棧

只要保證一個棧爲空就行

 入棧直接往不爲空的那個隊列入隊即可

出棧時將不爲空的隊列留下一個,剩下全部入隊到另一個隊列中,然後彈出剩下的那個元素

#include <queue>

template<class T>
class Stack {
public:
	void push(const T & elem);
	void pop();
private:
	std::queue<int> m_q1;
	std::queue<int> m_q2;
};

template<class T>
void Stack<T>::push(const T & elem)
{
	if (0 == m_q1.size()) {
		m_q2.push(elem);
	}
	else if (0 == m_q2.size()) {
		m_q1.push(elem);
	}
}

template<class T>
void Stack<T>::pop()
{
	if (0 == m_q1.size()) {
		if (0 != m_q2.size()) {
			while (1 < m_q2.size()) {
				m_q1.push(m_q2.front());
				m_q2.pop();
			}
			m_q2.pop();
		}
	}
	else if (0 == m_q2.size()) {
		if (0 != m_q1.size()) {
			while (1 < m_q1.size()) {
				m_q2.push(m_q1.front());
				m_q1.pop();
			}
			m_q1.pop();
		}
	}
}

int main() {
	Stack<int> s;
	s.push(1);
	s.push(2);
	s.push(3);
	s.pop();
	s.pop();
	s.pop();
	return 0;
}

 

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