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进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。