[STL]stack和queue模拟实现

[STL]stack和queue模拟实现

文章目录

stack模拟实现

stack是一种容器适配器,标准容器vector、deque、list都可以作为实现stack的底层数据结构,因为它们都具备以下功能:

  • empty:判空操作
  • back:获取尾部元素操作
  • push_back:尾部插入元素操作
  • pop_back:尾部删除元素操作

stack会将这些已有的容器进行转化,转换成能够以栈的方式使用的形式,stack的整体结构如下:

c++ 复制代码
template<class T, class Container = vector<T>>
    class stack
    {
        public:
        void push(const T& x) {}; //将数据压入栈中
        void pop() {}; //将栈顶数据弹出
        const T& top() {};	//获取栈顶数据
        size_t size() {};	//获取栈的数据个数
        bool empty() {};	//判断栈是否为空
        private:
        Container _con;
    };

说明: 由于stack可以由不同的容器实现,模板中的Container用于传入不同种类的容器。

push函数

push函数的功能是将数据压入栈中,只需要使用各个容器都可以使用的尾插函数来模拟实现即可。

c++ 复制代码
void push(const T& x)
{
	_con.push_back(x);
}

pop函数

pop函数的功能是将栈顶的数据删除,只需要使用各个容器都可以使用的尾删函数来模拟实现即可。

c++ 复制代码
void pop()
{
    _con.pop_back();
}

top函数

top函数的功能是获取栈顶的数据,只需要使用各个容器都可以使用的获取尾部数据的函数来模拟实现即可,然后返回数据的const引用。

c++ 复制代码
const T& top()
{
    return _con.back();
}

size函数

size函数的功能是获取栈内数据个数,只需要使用各个容器都可以使用的获取数据个数函数来模拟实现即可。

c++ 复制代码
size_t size()
{
    return _con.size();
}

说明: 返回值使用的size_t是无符号整数,是为了兼容不同容器可能会有的有符号整数和无符号整数的区别。

empty函数

empty函数的功能是判断栈是否为空,只需要使用各个容器都可以使用的判断是否为空的函数来模拟实现即可。

c++ 复制代码
bool empty()
{
    return _con.empty();
}

stack模拟实现的完整代码

stack模拟实现的完整代码如下:

c++ 复制代码
template<class T, class Container = vector<T>>
    class stack
    {
        public:
        void push(const T& x)
        {
            _con.push_back(x);
        }

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

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

        size_t size()
        {
            return _con.size();
        }

        bool empty()
        {
            return _con.empty();
        }

        private:
        Container _con;
    };

queue模拟实现

queue是一种容器适配器,标准容器类deque和list都可以作为实现queue的底层数据结构,因为它们都具备以下功能:

  • empty:检测队列是否为空
  • size:返回队列中有效元素的个数
  • front:返回队头元素的引用
  • back:返回队尾元素的引用
  • push_back:在队列尾部入队列
  • pop_front:在队列头部出队列

queue会将这些已有的容器进行转化,转换成能够以队列的方式使用的形式,queue的整体结构如下:

c++ 复制代码
template<class T, class Container=list<T>>
    class queue
    {
        public:
        void push(const T& x); //将数据入队
        void pop(); //将栈顶数据出队
        const T& front();	//获取队头数据
        const T& back();	//获取队尾数据
        size_t size();	//获取栈的数据个数
        bool empty();	//判断栈是否为空
        private:
        Container _con;
    };

说明: 由于queue可以由不同的容器实现,模板中的Container用于传入不同种类的容器。

push函数

push函数的功能是尾插数据入队,只需要使用各个容器都可以使用的尾插函数来模拟实现即可。

c++ 复制代码
void push(const T& x)
{
	_con.push_back(x);
}

pop函数

pop函数的功能是将队头的数据删除,只需要使用各个容器都可以使用的头删函数来模拟实现即可。

c++ 复制代码
void pop()
{
    _con.pop_front();
}

front函数

front函数的功能是获取队头的数据,只需要使用各个容器都可以使用的获取头部数据的函数来模拟实现即可,然后返回数据的const引用。

c++ 复制代码
const T& top()
{
    return _con.front();
}

back函数

back函数的功能是获取队尾的数据,只需要使用各个容器都可以使用的获取尾部数据的函数来模拟实现即可,然后返回数据的const引用。

c++ 复制代码
const T& top()
{
    return _con.back();
}

size函数

size函数的功能是获取队列内数据个数,只需要使用各个容器都可以使用的获取数据个数函数来模拟实现即可。

c++ 复制代码
size_t size()
{
    return _con.size();
}

说明: 返回值使用的size_t是无符号整数,是为了兼容不同容器可能会有的有符号整数和无符号整数的区别。

empty函数

empty函数的功能是判断队列是否为空,只需要使用各个容器都可以使用的判断是否为空的函数来模拟实现即可。

c++ 复制代码
bool empty()
{
    return _con.empty();
}

queue模拟实现的完整代码

queue模拟实现的完整代码如下:

c++ 复制代码
template<class T, class Container=list<T>>
    class queue
    {
        public:
        void push(const T& x)
        {
            _con.push_back(x);
        }

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

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

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

        size_t size()
        {
            return _con.size();
        }

        bool empty()
        {
            return _con.empty();
        }

        private:
        Container _con;
    };
相关推荐
憧憬成为原神糕手8 分钟前
c++_list
开发语言·c++
zyh2005043010 分钟前
c++的decltype关键字
c++·decltype
2401_8628867827 分钟前
蓝禾,汤臣倍健,三七互娱,得物,顺丰,快手,游卡,oppo,康冠科技,途游游戏,埃科光电25秋招内推
前端·c++·python·算法·游戏
浅陌pa1 小时前
24:RTC实时时钟
c语言·stm32·单片机·嵌入式硬件
徐霞客3201 小时前
对于C++继承中子类与父类对象同时定义其析构顺序的探究
开发语言·c++
敲上瘾1 小时前
多态的使用和原理(c++详解)
开发语言·数据结构·c++·单片机·aigc·多态·模拟
心怀花木1 小时前
【C++】list容器的基本使用
c++·stl·list
Reese_Cool1 小时前
【二级C语言考试】自定义数据类型
c语言·开发语言
我命由我123452 小时前
GPIO 理解(基本功能、模拟案例)
linux·运维·服务器·c语言·c++·嵌入式硬件·c#
weixin_515033932 小时前
ccfcsp-202006(4、5)
c++·算法