C++實(shí)現(xiàn)stack與queue數(shù)據(jù)結(jié)構(gòu)的模擬
棧和隊(duì)列都是容器適配器搞出來(lái)的,對(duì)容器進(jìn)行封裝,從而實(shí)現(xiàn)先進(jìn)先出和后進(jìn)先出的結(jié)構(gòu)
stack模擬實(shí)現(xiàn)
常規(guī)實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)的思路
template<class T> class stack { public: //.... private: T* _a; size_t _size; size_t _capacity; };
使用容器適配器:
**棧的容器適配器Container 可以使用vector list deque(雙端隊(duì)列) , 這些容器都必須支持尾插和尾刪接口 push_back 和 pop_back, **stack的默認(rèn)容器適配器使用deque
#pragma once #include<iostream> #include<deque> using namespace std; //棧的容量適配器Container 可以使用vector list deque-雙端隊(duì)列 //必須支持尾插和尾刪 push_back 和 pop_back //默認(rèn)的容量適配器使用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(); //返回棧頂元素 - 即容器的最后一個(gè)元素 T top() return _con.back(); size_t size() return _con.size(); bool empty() return _con.empty(); private: Container _con;//容器適配器 }; }
設(shè)配的容器給成模板參數(shù)->我有默認(rèn)的容器適配器,你也可以自己定義合適的,對(duì)容器進(jìn)行封裝,達(dá)到后進(jìn)先出的效果
queue模擬實(shí)現(xiàn)
隊(duì)列的容器適配器Container 必須支持pop_front 和push_back函數(shù) 尾插和頭刪.
所以可以使用list 和deque, 但是不能使用vector,因?yàn)椴恢С诸^刪pop_front函數(shù)
queue默認(rèn)的容器適配器使用deque
#pragma once #include<iostream> #include<deque> using namespace std; // 隊(duì)列的容器適配器Container 必須支持pop_front 和push_back 尾插和頭刪 // 所以可以使用list 和deque // 但是不能使用vector,因?yàn)椴恢С诸^刪pop_front //默認(rèn)的容量適配器使用deque namespace Mango { template<class T, class Container = std::deque<T>> class queue { public: //尾插 void push() _con.push_back(); //頭刪 void pop() _con.pop_front(); //取隊(duì)頭數(shù)據(jù) -返回隊(duì)頭數(shù)據(jù)的引用 T& front() return _con.front(); //取隊(duì)尾數(shù)據(jù) -返回隊(duì)尾數(shù)據(jù)的引用 T& back() return _con.back(); size_t size() return _con.size(); bool empty() return _con.empty(); private: Container _con;//容量適配器 }; }
到此這篇關(guān)于C++實(shí)現(xiàn)stack與queue數(shù)據(jù)結(jié)構(gòu)的模擬的文章就介紹到這了,更多相關(guān)C++ stack與queue模擬內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Qt使用TabWidget實(shí)現(xiàn)多窗體功能
Qt 是一個(gè)跨平臺(tái)C++圖形界面開(kāi)發(fā)庫(kù),利用Qt可以快速開(kāi)發(fā)跨平臺(tái)窗體應(yīng)用程序,在Qt中我們可以通過(guò)拖拽的方式將不同組件放到指定的位置,本章將重點(diǎn)介紹TabWidget標(biāo)簽組件的常用方法及靈活運(yùn)用,需要的朋友可以參考下2023-12-12VSCode插件開(kāi)發(fā)全攻略之package.json詳解
這篇文章主要介紹了VSCode插件開(kāi)發(fā)全攻略之package.json的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)易掃雷程序
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)易掃雷程序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-07-07C++簡(jiǎn)單QQ程序服務(wù)器端的實(shí)現(xiàn)代碼
這篇文章主要為大家詳細(xì)介紹了C++簡(jiǎn)單QQ程序服務(wù)器端的實(shí)現(xiàn)代碼,感興趣的朋友可以參考一下2016-05-05