【算法刷题】栈与队列题型及方法归纳

栈与队列的特点

【算法刷题】栈与队列题型及方法归纳_第1张图片

1、栈:FIFO

栈是仅能对其一端进行操作的结构,实现后进先出的效果。在C++中采用容器适配器的方式实现栈。(容器适配器实际上就是对某一类型的对象进行泛化,定义了这一类泛化对象的可进行操作的逻辑)
什么是适配器,C++ STL容器适配器详解
【算法刷题】栈与队列题型及方法归纳_第2张图片
【算法刷题】栈与队列题型及方法归纳_第3张图片
【算法刷题】栈与队列题型及方法归纳_第4张图片
stack的容器有三种有 vectordequelist,默认使用的是deque容器。
【算法刷题】栈与队列题型及方法归纳_第5张图片

2、队列:LIFO

队列是能对两端进行操作的结构,实现先进先出的效果。和 stack 栈容器适配器不同,queue 容器适配器有 2 个开口,其中一个开口专门用来输入数据,另一个专门用来输出数据,如图 1 所示。
【算法刷题】栈与队列题型及方法归纳_第6张图片
这种存储结构最大的特点是,最先进入 queue 的元素,也可以最先从 queue 中出来,即用此容器适配器存储数据具有“先进先出(简称 “FIFO” )”的特点,因此 queue 又称为队列适配器。
C++ STL queue容器适配器详解

【算法刷题】栈与队列题型及方法归纳_第7张图片
queue的容器有三种有 vectordequelist,默认使用的是deque容器。
【算法刷题】栈与队列题型及方法归纳_第8张图片

参考文章:栈与队列基础

栈相关题型

栈适用于对相邻元素进行某种判定和操作

题目:

  1. 对顶栈模拟队列
    81、【栈与队列】leetcode ——232. 用栈实现队列(C++版本)

  2. 进栈匹配结果,可简化代码
    83、【栈与队列】leetcode ——20. 有效的括号(C++版本)

  3. 用栈适于对相邻元素进行操作的特点,对相邻元素进行判定,不重复元素入栈,重复元素弹出
    84、【栈与队列】leetcode ——1047. 删除字符串中的所有相邻重复项:栈+双指针解法(C++版本)

  4. 后缀表达式进入栈的过程,相当于对中缀形式的树进行后序遍历
    85、【栈与队列】leetcode ——150. 逆波兰表达式求值(C++版本)

队列相关题型

(1)单调队列:维护一个单调不增或单调不减的队列。
(2)优先队列:按照大根堆或小根堆的排列方式,维护一个单调不减或单调不增的队列。(注意创建方式和排序对比函数)C++ STL priority_queue容器适配器详解

  1. 队列循环进出模拟栈
    82、【栈与队列】leetcode ——225. 用队列实现栈(C++版本)

  2. 使用单调队列保证队首元素为最大值,每次移动滑动窗口也把移除元素从队列中弹出。
    √ 86、【栈与队列】leetcode ——39. 滑动窗口最大值:单调队列+滑动窗口(C++版本)

  3. 构建一个优先队列,用小根堆来维护里面k个元素,当有更大元素加入时,将最小元素弹出。
    √ 87、【栈与队列】leetcode ——347. 前 K 个高频元素:优先队列(小根堆)+Hash表(C++版本)

你可能感兴趣的:(数据结构与算法刷题,#,栈与队列,算法,java,c++)