第五章 栈与队列

简介: 第五章 栈与队列

一、概念

栈和队列的特性分别是:

  • 栈: 后进先出
  • 队列: 先进先出

二、关于STL库版本

STLC++的标准库,内置了栈和队列两种数据结构,不同的语言实现栈和队列不一样,我们在这里只讨论 C++;只有了解了 STL的版本我们才能研究讨论栈和队列的底层实现。

STL有三个版本如下:

版本 细节 公司/个人
HP STL 其他版本的C++ STL,一般是以HP STL为蓝本实现出来的,HP STL是C++ STL的第一个实现版本,而且开放源代码。 惠普
P.J.Plauger STL 由P.J.Plauger参照HP STL实现出来的,被Visual C++编译器所采用,不是开源的。 P.J.Plauger(物理大佬)
SGI STL 由Silicon Graphics Computer Systems公司参照HP STL实现,被Linux的C++编译器GCC所采用,SGI STL是开源软件,源码可读性甚高。 硅图

三、栈和队列在C++中的底层实现

提供了 pushpop等接口,所有元素必须符合先进后出的规则,使用底层容器完成其所有工作,对外提供统一的接口,底层容器是可插拔的

那么 STL中的栈用什么容器来实现呢?

栈的内部结构如下:

栈底层实现主要是:

  • vector
  • deque
  • list

主要是数组和链表的底层实现。

我们常用的SGI STL,如果没有指定底层实现的话,默认是以deque为缺省情况下栈的低层结构。

deque是一个双向队列,只要封住一段,只开通另一端就可以实现栈的逻辑了。

SGI STL中 队列底层实现缺省情况下一样使用deque实现的。

我们也可以指定vector为栈的底层实现,初始化语句如下:

std::stack<int, std::vector<int> > third;  // 使用vector为底层容器的栈

刚刚讲过栈的特性,对应的队列的情况是一样的。

队列中先进先出的数据结构,同样不允许有遍历行为,不提供迭代器, SGI STL中队列一样是以deque为缺省情况下的底部结构。

也可以指定list 为起底层实现,初始化queue的语句如下:

std::queue<int, std::list<int>> third; // 定义以list为底层容器的队列
std::queue<int, std::list<int>> third; // 定义以list为底层容器的队列

所以STL 队列也不被归类为容器,而被归类为container adapter( 容器适配器)。

四、题型

我们用栈实现队列《栈实现队列》,用队列实现栈《队列实现栈》 来掌握的栈与队列的基本操作

接着,通过括号匹配问题《括号匹配问题》 、逆波兰表达式问题《逆波兰表达式》来系统讲解了栈在系统中的应用,以及使用技巧。

通过求滑动窗口最大值《滑动窗口最大值》,以及前K个高频元素《前k个高频元素》介绍了两种队列:单调队列和优先级队列,这是特殊场景解决问题的利器,是一定要掌握的。

目录
相关文章
|
2天前
|
算法 程序员 索引
数据结构与算法学习七:栈、数组模拟栈、单链表模拟栈、栈应用实例 实现 综合计算器
栈的基本概念、应用场景以及如何使用数组和单链表模拟栈,并展示了如何利用栈和中缀表达式实现一个综合计算器。
数据结构与算法学习七:栈、数组模拟栈、单链表模拟栈、栈应用实例 实现 综合计算器
|
2天前
初步认识栈和队列
初步认识栈和队列
20 10
|
2天前
|
算法
数据结构与算法二:栈、前缀、中缀、后缀表达式、中缀表达式转换为后缀表达式
这篇文章讲解了栈的基本概念及其应用,并详细介绍了中缀表达式转换为后缀表达式的算法和实现步骤。
14 3
|
19小时前
|
存储 JavaScript 前端开发
为什么基础数据类型存放在栈中,而引用数据类型存放在堆中?
为什么基础数据类型存放在栈中,而引用数据类型存放在堆中?
12 1
|
2天前
|
存储 算法 定位技术
数据结构与算法学习二、稀疏数组与队列,数组模拟队列,模拟环形队列
这篇文章主要介绍了稀疏数组和队列的概念、应用实例以及如何使用数组模拟队列和环形队列的实现方法。
数据结构与算法学习二、稀疏数组与队列,数组模拟队列,模拟环形队列
|
3天前
|
存储 安全 Java
【用Java学习数据结构系列】探索栈和队列的无尽秘密
【用Java学习数据结构系列】探索栈和队列的无尽秘密
15 2
|
1天前
探索数据结构:队列的的实现与应用
探索数据结构:队列的的实现与应用
|
1天前
探索顺序结构:栈的实现方式
探索顺序结构:栈的实现方式
|
1天前
|
存储 C语言
栈和队列题目练习
栈和队列题目练习
5 0
|
3天前
|
存储 算法 Java
【用Java学习数据结构系列】用堆实现优先级队列
【用Java学习数据结构系列】用堆实现优先级队列
18 0