栈(stack)是C++标准模版库(STL,Standard Template Library)中的一种顺序式容器。基本的数据结构之一,特点是“先进后出”(FILO)。
如图:(图片来源于百度)
一.用结构体创建一个栈:
#include<iostream> using namespace std; struct stack{ int t;//栈顶top void init(){ //栈的初始化 t=0; } void push(int x){//进栈 a[++t] = x; } int top(){//栈顶 return a[t]; } void pop(){//出栈 t--; } int empty(){//检测栈是否为空 return t > 0 ? 0 : 1; } };
二.直接使用栈
直接使用栈需要头文件:
#include<stack>//或者万能头文件#include<bits/stdc++.h> using namespace std;
定义:
stack<数据类型> 栈名;
函数:
/ * s.push(n);//把n放到栈顶。 s.top();//返回栈顶元素 s.pop();//弹出栈顶元素 s.size();//返回栈中元素的个数。 s.empty();//检查栈是否为空(返回一个bool类型) */
三.代码
#include<iostream> #include<stack> using namespace std; int main() { stack<int> s; //栈的操作 s.push(1); s.push(2); s.push(3); s.push(4); while(!s.empty()){ cout<<s.top()<<endl; s.pop(); } return 0; }
注意:
栈需要用空间存储,如果深度太大,或者存进栈的数组太大,那么总数会超过系统为栈分配的空间,就会爆栈,即栈溢出(运行错误或段错误)。
解决办法有两种:
(1)在程序中调大系统的栈。依赖于系统和编译器。
(2)手工写栈。(如上面的结构体)
To be continued...