栈
stack,栈,是 一种先进后出的数据结构,他只有一个出口。
- 栈的图解
- 基本语法
stack<typename> name;
需要加上头文件 stack
例如:
c
//表示创建一个int类型的栈,名字叫做stk
stack<int> stk;
栈的常用函数
- push()
stack_name.push(x) 将x入栈,时间复杂度为O(1)。
push() 示例代码
c
stack<int> stk;
stk.push(10); // 放数值10进栈
stk.push(20); // 放数值20进栈
stk.push(30); // 放数值30进栈
分析
此时,栈里的元素,从栈顶部往下,元素依次是 10,20,30; 图解如下:
- top()
stack_name.top() 获得栈顶元素,时间复杂度为O(1)。
top() 示例代码
cpp
#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;
}
运行结果:
c
栈顶元素是:30
- pop()
stack_name.pop() 可以弹出栈顶元素,时间复杂度为O(1)。
pop() 示例代码
cpp
#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;
}
运行结果:
c
栈顶元素是:30
栈顶元素是:20
分析
通过 pop 函数,栈内的 30 就弹出去了,此时栈顶是数组 20,再次验证栈的插入删除是从一端进行的;
- empty()
satck_name.empty() 可以检测stack内是否为空,返回true为空,返回false为非空,时间复杂度为O(1)。
empty() 示例代码
cpp
#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;
}
运行结果:
c
栈内有元素
分析
此时栈内部从顶部往下,分别有元素 30,20,10,所以 empty 函数不成立,执行 else 部分,打印"栈内有元素"。
- size()
stack_name.size() 返回stack内元素的个数,时间复杂度为O(1)。
size 示例代码
cpp
#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;
}
运行结果:
c
栈内元素个数是:3
分析
此时栈内部从顶部往下,分别有元素 30,20,10,所以一共是 3 个元素。