文章目录

  • 一、算法介绍
  • 二、解题模板
    • 1、栈的实现
    • 2、栈的API
    • 3、深度优先
    • 4、单调栈问题
  • 三、栈系列问题
    • 1、栈的基础特征
      • (1)设计题,用来实现其他结构
      • (2)利用栈的基础特征
    • 2、括号&表达式运算&退格问题
      • (1)括号匹配问题
      • (2)表达式运算问题
      • (3)退格问题
    • 3、单调栈
    • 4、树的遍历-深度优先
    • 5、图的遍历-深度优先

一、算法介绍

栈:后入先出

栈系列问题:https://leetcode-cn.com/tag/stack/problemset/

栈的典型问题

  • 设计题

  • 括号、表达式运算、字符串退格

  • 单调栈

  • 树的遍历 - 深度优先

  • 图的遍历 - 深度优先

二、解题模板

1、栈的实现

// 用数组实现栈
#include <iostream>class MyStack {private:vector<int> data;               // store elementspublic:/** Insert an element into the stack. */void push(int x) {data.push_back(x);}/** Checks whether the queue is empty or not. */bool isEmpty() {return data.empty();}/** Get the top item from the queue. */int top() {return data.back();}/** Delete an element from the queue. Return true if the operation is successful. */bool pop() {if (isEmpty()) {return false;}data.pop_back();return true;}
};

2、栈的API

#include <iostream>
#include <stack>
int main() {// 1. 初始化栈stack<int> s;// 2. 入栈.s.push(5);s.push(13);// 3. 判断栈空if (s.empty()) {cout << "Stack is empty!" << endl;return 0;}// 4. 出栈.s.pop();// 5. 获取栈顶元素.s.top() ;// 6. 获取栈大小.s.size() ;
}

3、深度优先

方法1:递归实现

boolean DFS(Node cur, Node target, Set<Node> visited) {return true if cur is target; //如果找到则返回for (next : each neighbor of cur) { //遍历当前节点的所有邻居节点if (next is not in visited) { //如果next没有被遍历则加入遍历列表add next to visted;return true if DFS(next, target, visited) == true; //递归进行深度优先遍历}}return false;
}

方法2:显式栈

【刷题总结】栈系列问题相关推荐

  1. 力扣刷题——单链表系列——第一题:移除链表元素,从此链表初窥门径,神挡杀神~

    题目链接:力扣 力扣刷题------>单链表系列 第一种解法:在原链表上进行操作,小红日烧脑版 /*** Definition for singly-linked list.* public c ...

  2. 【LeetCode刷题】栈与队列专题

    前言:之前对栈与队列一直停留在表层概念的理解上,不知道怎么用,借刷题的机会来深入理解一下. 文章目录 20 有效括号 1047. 删除字符串中的所有相邻重复项 栈版本 双指针版本 150. 逆波兰表达 ...

  3. 【LeetCode】分类刷题 之 栈和队列

    STL 栈:std::stack<int> S; S.top() S.empty() S.push(x) S.pop() S.size() 队列:std:queue<int> ...

  4. [力扣刷题总结](栈和单调栈篇)

    文章目录 ~~~~~~~~~~~~栈~~~~~~~~~~~~ 155. 最小栈 解法1:链表 剑指 Offer 31. 栈的压入.弹出序列 解法1:模拟栈 20. 有效的括号 解法1:栈 相似题目: ...

  5. 速通C语言支线第一站 基础刷题

    系列文章目录 速通C语言支线第一站 基础刷题 文章目录 系列文章目录 前言 一.进制类 1 打印8.16进制 2 16进制转10进制 3 进制转换类 推论:一个数二进制位有几个1 变式:判断n是否是2 ...

  6. Leetcode刷题 225题:用队列实现栈(基于Java和c++两种语言)

    ** Leetcode刷题 225题:用队列实现栈(基于Java和c++两种语言) ** 题目: 使用队列实现栈的下列操作: push(x) – 元素 x 入栈 pop() – 移除栈顶元素 top( ...

  7. Leetcode刷题 232题:用栈实现队列(基于python3和c++两种语言)

    Leetcode刷题 232题:用栈实现队列(基于python3和c++两种语言) 题目: 使用栈实现队列的下列操作: push(x) – 将一个元素放入队列的尾部. pop() – 从队列首部移除元 ...

  8. Leetcode刷题 155题: 最小栈(基于python3和c++两种语言)

    ** Leetcode刷题 155题: 最小栈(基于python3和c++两种语言) ** ** 题目: ** 设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈. ...

  9. Leetcode刷题 1441题: 用栈操作构建数组(基于python3和c++两种语言)

    Leetcode刷题 1441题: 用栈操作构建数组(基于python3和c++两种语言) ** 题目: ** 给你一个目标数组 target 和一个整数 n.每次迭代,需要从 list = {1,2 ...

  10. python必刷面试_Python面试必刷题系列(5)

    本篇是[Python面试必刷题系列]的第5篇文章.通过收集.整理Python真实面试题,给大家讲解面试中的python高频考察点,希望能够引起读者的足够重视. 往期回顾: Python中 is 和 = ...

最新文章

  1. 正则表达式实现最小匹配
  2. 中小企业远程存储服务之利弊
  3. shell 获取字符串/文件的MD5值
  4. 编写DLL所学所思(2)——导出类
  5. mysql大量数据分页优化_mysql大量数据分页优化
  6. Python 基本数据类型 (一) - 整数
  7. AX中对Programmable section的动态控制
  8. Web程序员的Mysql进阶序三之sql多表数据删除、子查询、联合查询
  9. 下面介绍一个开源的OCR引擎Tesseract2。值得庆幸的是虽然是开源的但是它的识别率较高,并不比其他引擎差劲。网上介绍Tessnet2也是当时时间排名第三的识别引擎,只是后来慢慢不维护了,目前是G
  10. 【实习】同方威视南京研发中心招聘图像算法工程师
  11. 被苹果摆了一道的高通,亮出了一张“小米”牌
  12. linux与s7-300,Siemens SIMATIC S7-300硬编码凭证安全限制绕过漏洞
  13. JAVA三大框架SSH和MVC
  14. DEAP2.1软件与Malmquist指数操作说明
  15. 做个简单的Java学生考勤系统04--签到功能的开发
  16. 手写体识别识别(pytorch):
  17. HTML怎么引入字体包中的字体
  18. safari 模拟手机显示
  19. mysql fabric搭建_MySQL Fabric 安装部署
  20. 欧元区风险担忧情绪依然存在,美元震荡上扬

热门文章

  1. 漫画:如何破解 MD5 算法?
  2. javabeans是什么_为什么一定要前后端分离?
  3. 直接线性变换得到的旋转矩阵R和平移向量t如何投影到SE(3)流形上?
  4. Jackson ImmunoResearch蛋白质印迹指南:膜封闭
  5. dotnet hosting 2.2.0 安装到 Server 2012 X64 DC服务器,.Net Framework 老崩溃问题
  6. google Analyticso ios v3版 配置及其使用
  7. 智能设备存安全漏洞,YunOS却通过了国家级检测?
  8. Dev C++ 隐藏控制台
  9. 发包人能否以承包人未开发票而拒付工程款
  10. PS软件下载,直播视频免费学习