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;//容量适配器 }; }
到此这篇关于C++实现stack与queue数据结构的模拟的文章就介绍到这了,更多相关C++ stack与queue模拟内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
在Centos7中使用vscode和gdb调试PG插件的方法
这篇文章主要介绍了在Centos7中使用vscode和gdb调试PG插件,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2022-09-09c语言中单引号和双引号的区别(顺利解决从字符串中提取IP地址的困惑)
c语言中的单引号和双引号可是有很大区别的,使用之前一定要了解他们之间到底有什么不同,下面小编就给大家详细的介绍一下吧,对此还不是很了解的朋友可以过来参考下2013-07-07c++ lambda捕获this 导致多线程下类释放后还在使用的错误问题
Lambda表达式是现代C++的一个语法糖,挺好用的。但是如果使用不当,会导致内存泄露或潜在的崩溃问题,这里总结下c++ lambda捕获this 导致多线程下类释放后还在使用的错误问题,感兴趣的朋友一起看看吧2023-02-02
最新评论