STL(Standard Template Library)即标准模板库,善用STL库,能有效的减少代码量,提高程序执行效率。
本文旨在介绍STL的stack与queue。


stack 栈

stack的简介

栈是一种线性存储结构,它具有以下特点:

  1. 栈中的元素遵守“先进后出(First In Last Out)”的原则,简称FILO结构。
  2. 限定只能在栈顶进行插入和删除操作。

stack的相关概念

  1. 栈顶与栈底:允许元素插入与删除的一端称为栈顶,另一端称为栈底。
  2. 压栈:栈的插入操作,叫做进栈,也称压栈、入栈。
  3. 弹栈:栈的删除操作,也叫做出栈。

例如:我们有一个存储整形元素的栈,依次进栈{1, 2, 3}如下图所示

接着我们进行出栈操作,依次弹出{3, 2, 1}如下图所示

可以观察到:进栈和出栈的顺序相反,这就是所谓的“先入后出”,并且我们仅仅在对栈顶进行进栈出栈操作。

stack的相关操作

  1. 头文件
    1
    #include<stack>
  2. stack的创建
    1
    stack<int> s;///创建一个int类型的栈s
  3. stack的操作
    1
    2
    3
    4
    5
    s.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
    15
    int 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的简介

队列与栈一样,也是一种线性存储结构,它具有如下特点:

  1. 队列中的数据元素遵循“先进先出(First In First Out)”的原则,简称FIFO结构。
  2. 在队尾添加元素,在队头删除元素。

queue的相关概念

  1. 队首与队尾:允许元素插入的一端称为队尾,允许元素删除的一端称为队首。
  2. 入队:队列的插入操作。
  3. 出队:队列的删除操作。

例如:我们有一个存储整形元素的队列,依次入队{1, 2, 3}如下图所示

接着我们进行出队操作,依次弹出{1, 2, 3}如下图所示

可以观察到:入队和出队的顺序相同,这就是所谓的“先入先出”,并且只在队尾插入元素,只在队首删除元素。

queue的相关操作

  1. 头文件
    1
    #include<queue>
  2. queue的创建
    1
    queue<int> q;///创建一个int类型的队列q
  3. queue的操作
    1
    2
    3
    4
    5
    q.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