您好,登錄后才能下訂單哦!
1.
//使用兩個隊列實現一個棧,優化版(1.入棧只如q1,出棧將q1數據倒q2,刪掉剛進來的, //若q1無數據,從q2倒,刪q2中最后一個數據2.只保證一個棧中有數據,簡單,易理解) //第一種實現
template<class T> class Stack { public: bool Empty() { return _q1.empty() && _q2.empty(); } void Push(const T& x) { _q1.push(x); } void Pop() { assert((!_q1.empty()) || (!_q2.empty())); if (_q1.empty()) { while (_q2.size()!= 1) { _q1.push(_q2.front()); _q2.pop(); } _q2.pop(); } else { while (_q1.size()!= 1) { _q2.push(_q1.front()); _q1.pop(); } _q1.pop(); } } int Size() { return _q1.size() + _q2.size(); } //先取_q1的back,若_q1為空,再取_q2的值 T& Top() { assert((!_q1.empty()) || (!_q2.empty())); if (!_q1.empty()) return _q1.back(); else return _q2.back(); } protected: queue<T> _q1; queue<T> _q2; };
2.
//第二種實現 template<class T> class Stack { public: void Push(const T& x) { if (!_q2.empty()) _q2.push(x); else _q1.push(x); } void Pop() { if (!_q1.empty()) { while (_q1.size() != 1) { _q2.push(_q1.front()); _q1.pop(); } _q1.pop(); } else { while (_q2.size() != 1) { _q1.push(_q2.front()); _q2.pop(); } _q2.pop(); } } T& Top() { if (!_q1.empty()) { return _q1.back(); } else return _q2.back(); } protected: queue<T> _q1; queue<T> _q2; }; void Test1() { Stack<int> s1; s1.Push(1); s1.Push(2); s1.Push(3); s1.Push(4); s1.Push(5); s1.Pop(); cout << s1.Top() << endl; s1.Pop(); cout << s1.Top() << endl; //cout << s1.Size() << endl; s1.Push(6); cout << s1.Top() << endl; s1.Pop(); cout << s1.Top() << endl; s1.Push(7); cout << s1.Top() << endl; s1.Pop(); s1.Pop(); s1.Pop(); cout << s1.Top() << endl; }
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。