C++ STL stack与queue
STL(Standard Template Library)即标准模板库,善用STL库,能有效的减少代码量,提高程序执行效率。
本文旨在介绍STL的stack与queue。
stack 栈
stack的简介
栈是一种线性存储结构,它具有以下特点:
- 栈中的元素遵守“先进后出(First In Last Out)”的原则,简称FILO结构。
- 限定只能在栈顶进行插入和删除操作。
stack的相关概念
- 栈顶与栈底:允许元素插入与删除的一端称为栈顶,另一端称为栈底。
- 压栈:栈的插入操作,叫做进栈,也称压栈、入栈。
- 弹栈:栈的删除操作,也叫做出栈。
例如:我们有一个存储整形元素的栈,依次进栈{1, 2, 3}如下图所示
接着我们进行出栈操作,依次弹出{3, 2, 1}如下图所示
可以观察到:进栈和出栈的顺序相反,这就是所谓的“先入后出”,并且我们仅仅在对栈顶进行进栈出栈操作。
stack的相关操作
- 头文件
1
- stack的创建
1
stack<int> s;///创建一个int类型的栈s
- stack的操作
1
2
3
4
5s.push();///压栈/进栈,将一个元素压入栈顶
s.pop();///弹栈/出栈,将栈顶元素弹出
s.size();///获得栈元素的个数
s.top();///获得栈顶元素
s.empty();///判断栈是否为空用数组模拟stack
通过了解栈的相关内容,我们能很容易的用数组来模拟栈:用数组a[]存放栈的元素,用一个整形变量top来记录栈顶位置。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15int a[N], top = 0;
///s.push();
a[top++] = ELEMENT;
///s.pop();
top--;
///s.size();
top;
///s.top();
a[top];
///s.empty();
top == 0 ? true : false;stack的相关例题
括号匹配 http://acm.zzuli.edu.cn/problem.php?id=2164
表达式求值 http://acm.hdu.edu.cn/showproblem.php?pid=1237
queue 队列
queue的简介
队列与栈一样,也是一种线性存储结构,它具有如下特点:
- 队列中的数据元素遵循“先进先出(First In First Out)”的原则,简称FIFO结构。
- 在队尾添加元素,在队头删除元素。
queue的相关概念
- 队首与队尾:允许元素插入的一端称为队尾,允许元素删除的一端称为队首。
- 入队:队列的插入操作。
- 出队:队列的删除操作。
例如:我们有一个存储整形元素的队列,依次入队{1, 2, 3}如下图所示
接着我们进行出队操作,依次弹出{1, 2, 3}如下图所示
可以观察到:入队和出队的顺序相同,这就是所谓的“先入先出”,并且只在队尾插入元素,只在队首删除元素。
queue的相关操作
- 头文件
1
- queue的创建
1
queue<int> q;///创建一个int类型的队列q
- queue的操作
1
2
3
4
5q.push();///入队
q.pop();///出队
q.size();///获得队列元素的个数
q.front();///获得队首元素
q.empty();///判断队列是否为空queue的相关例题及应用
队列模拟 http://acm.hdu.edu.cn/showproblem.php?pid=1276
我们使用更多的是优先队列和重载了优先级的队列,使用堆优化过的队列在面对一些问题时能明显地优化运行时间。
参考文献
C++数据结构——栈: https://www.cnblogs.com/QG-whz/p/5170418.html
C++数据结构——队列: https://www.cnblogs.com/QG-whz/p/5171123.html
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.