栈是一种数据结构,遵循LIFO(last in first out)后进先出的原则。栈就像挤地铁一样,后上的人先出去。
栈有两种行为,一个是”压栈“——push(val)或emplace(val),既插入元素,可以理解为头插法;一个是”弹栈“,既删除顶部元素,可以理解为头删法。我们可以查看栈的元素大小size(),判断栈是否为空empty()以及同类型的栈相互交换swap()。
栈是一种很有趣的数据结构,具有对称的性质,读者可以试试去括号这题。下面我们通过代码来学习使用栈。
#include<iostream> #include<stack>//头文件包含 /*stack*/ using namespace std; void test() { stack<int> s; for(int i=0;i<5;++i) s.push(i+1); cout << "弹栈遍历:"; while(!s.empty()) { cout <<"栈定为:【"<< s.top() << "】且有【" <<s.size()<< "】个元素\n"; s.pop(); } } int main(){ test(); return 0; }
编译结果如下:
栈这种数据结构常在蓝桥杯、ACM等算法竞赛上解决去括号、维护单调栈等问题。
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程