您好,登錄后才能下訂單哦!
這篇文章主要介紹了C++怎么實現stack與queue數據結構的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇C++怎么實現stack與queue數據結構文章都會有所收獲,下面我們一起來看看吧。
棧和隊列都是容器適配器搞出來的,對容器進行封裝,從而實現先進先出和后進先出的結構
常規實現數據結構的思路
template<class T> class stack { public: //.... private: T* _a; size_t _size; size_t _capacity; };
使用容器適配器:
**棧的容器適配器Container 可以使用vector list deque(雙端隊列) , 這些容器都必須支持尾插和尾刪接口 push_back 和 pop_back, **stack的默認容器適配器使用deque
#pragma once #include<iostream> #include<deque> using namespace std; //棧的容量適配器Container 可以使用vector list deque-雙端隊列 //必須支持尾插和尾刪 push_back 和 pop_back //默認的容量適配器使用deque // template<class T,class Container = std::vector<T>> // template<class T,class Container = std::list<T>> namespace Mango { template<class T, class Container = std::deque<T>> class stack { public: void push(const T& x) _con.push_back(x); void pop() _con.pop_back(); //返回棧頂元素 - 即容器的最后一個元素 T top() return _con.back(); size_t size() return _con.size(); bool empty() return _con.empty(); private: Container _con;//容器適配器 }; }
設配的容器給成模板參數->我有默認的容器適配器,你也可以自己定義合適的,對容器進行封裝,達到后進先出的效果
隊列的容器適配器Container 必須支持pop_front 和push_back函數 尾插和頭刪.
所以可以使用list 和deque, 但是不能使用vector,因為不支持頭刪pop_front函數
queue默認的容器適配器使用deque
#pragma once #include<iostream> #include<deque> using namespace std; // 隊列的容器適配器Container 必須支持pop_front 和push_back 尾插和頭刪 // 所以可以使用list 和deque // 但是不能使用vector,因為不支持頭刪pop_front //默認的容量適配器使用deque namespace Mango { template<class T, class Container = std::deque<T>> class queue { public: //尾插 void push() _con.push_back(); //頭刪 void pop() _con.pop_front(); //取隊頭數據 -返回隊頭數據的引用 T& front() return _con.front(); //取隊尾數據 -返回隊尾數據的引用 T& back() return _con.back(); size_t size() return _con.size(); bool empty() return _con.empty(); private: Container _con;//容量適配器 }; }
關于“C++怎么實現stack與queue數據結構”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“C++怎么實現stack與queue數據結構”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。