当前位置: 首页 > article >正文

从零开始手写STL库:Stack

从零开始手写STL库–Stack的实现

Gihub链接:miniSTL


文章目录

  • 从零开始手写STL库–Stack的实现
  • 一、stack是什么?
  • 二、stack要包含什么函数
  • 总结


一、stack是什么?

栈是一种后进先出(LIFO,Last In First Out)的数据结构

这意味着最后被压入栈的元素将是第一个被弹出的

这种结构类似于一堆叠放的盘子,只能在顶部添加或移除盘子

底层实现可以使用deque,也可以是list或者vector,取决于使用场景,STL库中默认是deque,也可以修改

这里使用之前实现的myDeque作为底层进行栈的搭建,同样的也是一层封装

二、stack要包含什么函数

必要的三个函数:push, pop 和 top

不过这里留下一个接口,用于修改实现底层

template <typename T, typename Container = myDeque<T> >
class myStack
{
private:
    Container data;  // 修改container,并且对应地函数名称改一改就可以了

public:
    void push(const T & value)
    {
        data.push_back(value);
    }

    void pop()
    {
        if(data.empty()) throw std::runtime_error("Stack is empty!");
        else data.pop_back();
    }

    T& top()
    {
        if(data.empty()) throw std::runtime_error("Stack is empty!");
        else return data[data.getSize()-1];
    }

    size_t size()
    {
        return data.getSize();
    }

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

总结

栈并不会在面试场景中出现太多,更多的是在笔试中,如判断括号是否平衡,如力扣20
在这里插入图片描述
这种情况下就要想到用栈


http://www.kler.cn/news/335486.html

相关文章:

  • 电脑手机下载小米xiaomi redmi刷机包太慢 解决办法
  • 【C++11】新特性
  • 【区别】三种命令取消已暂存的文件,处理暂存区和文件的跟踪状态
  • 防止错误输入!Excel单元格限制输入内容的三种有效方式
  • centos7编译安装openresty+lua-resty-http+lua-resty-openssl-master
  • mycat读写分离中间件
  • JavaScript 根据时间先后排序数组
  • CSS基础-常见属性(二)
  • 32单片机 低功耗模式
  • C++项目工程代码自动检查
  • 使用 Python 遍历文件夹
  • 大数据处理从零开始————4.认识HDFS分布式文件系统
  • Leetcode - 周赛417
  • SpringBoot3+Druid YAML配置
  • Qt开发技巧(十五)字符串去除空格,跨网段搜索不生效,设置图片显示失败问题,表格视图的批量删除,主动判断字串编码,开启向前查询的属性,画家类载入html来绘制
  • 简单的找交集差集算法
  • Ubuntu 安装 Docker Compose
  • 基于java+springboot的酒店预定网站、酒店客房管理系统
  • HarmonyOS 组件
  • EPICS asyn库