0

stack,栈,是 一种先进后出的数据结构,他只有一个出口。

  • 栈的图解

image.png

  • 基本语法
    stack<typename> name;

    需要加上头文件 stack

例如:

//表示创建一个int类型的栈,名字叫做stk
stack<int> stk;

栈的常用函数

  • push()
    stack_name.push(x) 将x入栈,时间复杂度为O(1)。

:: details push() 示例代码

    stack<int> stk;
    stk.push(10); // 放数值10进栈
    stk.push(20); // 放数值20进栈
    stk.push(30); // 放数值30进栈

:: tip 分析 此时,栈里的元素,从栈顶部往下,元素依次是 10,20,30; 图解如下:
image.png ::

  • top()
    stack_name.top() 获得栈顶元素,时间复杂度为O(1)。

:: details top() 示例代码

#include<bits/stdc++.h>
#include<stack>
using namespace std;
int main()
{
    stack<int> stk;
    stk.push(10);
    stk.push(20);
    stk.push(30);
    cout << "栈顶元素是:" << stk.top() << endl;
    return 0;
}

运行结果:

栈顶元素是:30

::

  • pop()
    stack_name.pop() 可以弹出栈顶元素,时间复杂度为O(1)。

:: details pop() 示例代码

#include<bits/stdc++.h>
#include<stack>
using namespace std;
int main()
{
    stack<int> stk;
    stk.push(10);
    stk.push(20);
    stk.push(30);
    cout << "栈顶元素是:" << stk.top() << endl;
    stk.pop();
    cout << "栈顶元素是:" << stk.top() << endl;
    return 0;
}

运行结果:

栈顶元素是:30
栈顶元素是:20

:: tip 分析 通过 pop 函数,栈内的 30 就弹出去了,此时栈顶是数组 20,再次验证栈的插入删除是从一端进行的; ::

  • empty()
    satck_name.empty() 可以检测stack内是否为空,返回true为空,返回false为非空,时间复杂度为O(1)。

:: details empty() 示例代码

#include<bits/stdc++.h>
#include<stack>
using namespace std;
int main()
{
    stack<int> stk;
    stk.push(10);
    stk.push(20);
    stk.push(30);
    if(stk.empty())
    {
        cout << "栈内是空的" << endl;
    }else{
        cout << "栈内有元素" << endl;
    }
    return 0;
}

运行结果:

栈内有元素

:: tip 分析 此时栈内部从顶部往下,分别有元素 30,20,10,所以 empty 函数不成立,执行 else 部分,打印"栈内有元素"。 ::

  • size()
    stack_name.size() 返回stack内元素的个数,时间复杂度为O(1)。

:: details size 示例代码

#include<bits/stdc++.h>
#include<stack>
using namespace std;
int main()
{
    stack<int> stk;
    stk.push(10);
    stk.push(20);
    stk.push(30);
    cout << "栈内元素个数是:" << stk.size() << endl;
    return 0;
}

运行结果:

栈内元素个数是:3

:: tip 分析 此时栈内部从顶部往下,分别有元素 30,20,10,所以一共是 3 个元素。 ::

栈的小练习

上一章
list
下一章
queue