这篇文章主要介绍了C++怎么实现stack与queue数据结构的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C++怎么实现stack与queue数据结构文章都会有所收获,下面我们一起来看看吧。
栈和队列都是容器适配器搞出来的,对容器进行封装,从而实现先进先出和后进先出的结构
stack模拟实现
常规实现数据结构的思路
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;//容器适配器 }; }
设配的容器给成模板参数->我有默认的容器适配器,你也可以自己定义合适的,对容器进行封装,达到后进先出的效果
queue模拟实现
队列的容器适配器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;//容量适配器 }; }