[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;
    };
相关推荐
嘻嘻哈哈的zl36 分钟前
初级数据结构:栈和队列
c语言·开发语言·数据结构
Bluesonli1 小时前
第 1 天:UE5 C++ 开发环境搭建,全流程指南
开发语言·c++·ue5·虚幻·unreal engine
憨猪在度假1 小时前
Cmake学习笔记
c++·笔记·学习
weixin_537590451 小时前
《C程序设计》第六章练习答案
c语言·c++·算法
学游戏开发的2 小时前
UE学习日志#19 C++笔记#5 基础复习5 引用1
c++·笔记·学习·游戏引擎·unreal engine
CodeClimb2 小时前
【华为OD-E卷 - 最大矩阵和 100分(python、java、c++、js、c)】
java·c++·python·华为od·矩阵
charlie1145141913 小时前
从0开始使用面对对象C语言搭建一个基于OLED的图形显示框架(OLED设备层封装)
c语言·stm32·单片机·教程·oled·嵌入式软件
张太行_3 小时前
C++中的析构器(Destructor)(也称为析构函数)
开发语言·c++
小林up4 小时前
【C语言设计模式学习笔记1】面向接口编程/简单工厂模式/多态
c语言·设计模式
涛ing7 小时前
32. C 语言 安全函数( _s 尾缀)
linux·c语言·c++·vscode·算法·安全·vim