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++圖形界面開發(fā)庫(kù),利用Qt可以快速開發(fā)跨平臺(tái)窗體應(yīng)用程序,在Qt中我們可以通過(guò)拖拽的方式將不同組件放到指定的位置,本章將重點(diǎn)介紹TabWidget標(biāo)簽組件的常用方法及靈活運(yùn)用,需要的朋友可以參考下2023-12-12
VSCode插件開發(fā)全攻略之package.json詳解
這篇文章主要介紹了VSCode插件開發(fā)全攻略之package.json的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05
C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)易掃雷程序
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)易掃雷程序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-07-07
C++簡(jiǎn)單QQ程序服務(wù)器端的實(shí)現(xiàn)代碼
這篇文章主要為大家詳細(xì)介紹了C++簡(jiǎn)單QQ程序服務(wù)器端的實(shí)現(xiàn)代碼,感興趣的朋友可以參考一下2016-05-05

