【c++】模拟实现stack和queue

编程入门 行业动态 更新时间:2024-10-24 00:25:26

【c++】模拟实现<a href=https://www.elefans.com/category/jswz/34/1769143.html style=stack和queue"/>

【c++】模拟实现stack和queue

全部代码

#pragma once
#include<deque>
using namespace std;namespace hqj
{template<class T, class Con = deque<T>>class stack{public:stack():_c(){}void push(const T& x){_c.push_back(x);}void pop(){_c.pop_back();}T& top(){return _c.back();}const T& top()const{return _c.back();}size_t size()const{return _c.size();}bool empty()const{return _c.empty();}private:Con _c;};}
  • 队列

    template<class T, class Con = deque<T>>class queue{public:queue():_c(){}void push(const T& x){_c.push_back(x);}void pop(){_c.pop_front();}T& back(){return _c.back();}const T& back()const{return _c.back();}T& front(){return _c.front();}const T& front()const{return _c.front();}size_t size()const{return _c.size();}bool empty()const{return _c.empty();}private:Con _c;};
}

栈的模拟实现

模板参数

  • 选择deque作为栈的底层容器

template<class T, class Con = deque<T>>

私有成员

  • 一个容器对象_con

Con _c;

构造函数

  • 因为_c是个容器对象,自身有构造函数,构造stack时会自动调用_C的构造函数,所以我们可以不写

 stack():_c(){}

push函数

  • 栈的特点为栈顶入栈、栈顶出栈

  • 我们之间使用容器对象_c的尾插函数便可以实现栈的入栈

 void push(const T& x){_c.push_back(x);}

pop 函数

  • 栈的特点为栈顶入栈、栈顶出栈

  • 我们之间使用容器对象_c的尾删函数便可以实现栈的出栈

        void pop(){_c.pop_back();}

top函数

  • 栈顶恰恰是底层容器的末元素,我们直接调用底层容器_c的back函数即可

  • 提供两个版本,一个是const、另一个是非const

        T& top(){return _c.back();}const T& top()const{return _c.back();}

size函数

  • 底层容器中有多少数据就代表栈有多少数据,直接复用底层容器_c的size

        size_t size()const{return _c.size();}

判空函数

  • 底层容器不为空栈也就不为空,还是直接复用底层容器_c的empty

        bool empty()const{return _c.empty();}

队列

构造函数

  • 队列也是容器适配器的玩法,直接调用底层容器_C的构造函数

 queue():_c(){}

模板参数

  • 选择deque作为队列的底层容器

template<class T, class Con = deque<T>>

私有成员

  • 一个容器对象_con

Con _c;

push函数

  • 队列的特点是队尾入队,队头出队

  • 根据特点,我们调用底层容器的尾插函数即可

       void push(const T& x){_c.push_back(x);}

pop函数

    • 队列的特点是队尾入队,队头出队

  • 根据特点,我们调用底层容器的头删函数即可

        void pop(){_c.pop_front();}

back函数

  • 该接口负责返回队尾元素

  • 而队尾恰恰是底层容器的末元素,直接复用底层容器的back函数

        T& back(){return _c.back();}const T& back()const{return _c.back();}

front函数

  • 该接口负责返回队头元素

  • 而队头恰恰是底层容器的首元素,直接复用底层容器的front函数

        T& front(){return _c.front();}const T& front()const{return _c.front();}

size函数

  • 底层容器有多少数据,该队列就有多少数据,依然是复用即可

        size_t size()const{return _c.size();}

empty函数

  • 底层容器不为空,队列便不为空,复用底层容器的判空函数

        bool empty()const{return _c.empty();}

总结

介绍栈和队列的模拟实现,之前有在C语言阶段实现过栈和队列,所以本文对栈和队列的结构不做解释。玩法是容器适配器玩法,底层容器选择的是双端队列,这是一种又像数组又像链表的东西。

更多推荐

【c++】模拟实现stack和queue

本文发布于:2023-12-03 20:53:27,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1657536.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:stack   queue

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!