首页 > 技术文章 > STL之stack 栈(详解)

zhengyongle506 2019-03-13 15:59 原文

定义:

栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一段进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。

C++ stack(堆栈)实质上是一个容器的改编,它实现了一个先进后出的数据结构(FILO) 

用法:

在求强连通分量的tarjan算法中要用栈来维护,实际上所有的递归程序本质上都是在调用系统栈。

使用该容器时需要包含<stack>头文件;
定义stack对象的示例代码如下:

1 stack<int> s;
2 stack<string> h;

stack的基本操作有:
    1、入栈:如s.push(x);
    2、出栈:如s.pop(). 注意:出栈操作只是删除栈顶的元素,并不返回该元素。
    3、访问栈顶:如s.top();
    4、判断栈空:如s.empty().档栈空时返回true。
    5、访问栈中的元素个数,如a.size();
    光看说明是不是感觉脑子里一片糊涂?下面让我们来看一下代码:

 1 int main(){
 2     s.push(1);//入栈(将1放在栈顶)->{1}
 3     s.push(233);//入栈(将233放在栈顶)->{233,1}
 4     s.push(666);//入栈(将666放在栈顶)->{666,233,1}
 5     cout<<s.top()<<endl;//输出666 
 6     cout<<s.size()<<endl;//输出3 
 7     s.pop();//出栈(将666删除并返回)->{233,1} 
 8     s.push(2);//入栈(将2放在栈顶)->{2,233,1}
 9     return 0; 
10 }

下面让我们看一个完整的代码:

 1 #include<iostream>
 2 #include<stack>
 3 using namespace std;
 4 int main()
 5 {
 6     stack<int> s;
 7     s.push(1);// void push(T t);压栈存入数据->{1}
 8     s.push(2);//{2,1}
 9     s.push(3);//{3,2,1}
10     int result1=s.top(); // T top();只输出第一个顶部数据,不弹栈-> result1 = 3
11     int result2=s.top();//由于top的使用特性-> result1 = result2 = 3
12     s.pop(); // void pop();弹栈存入数据-> {2,1}
13     int result3 = s.top();// result3 = 2
14     cout << s.empty() << endl;//判断栈是否为空,由于栈里还有元素,因此输出0(表示false) 
15     int sz = s.size();//sz获取栈内的元素个数,即-> sz = 2 
16     cout <<result1<<" "<<result2<<" "<<result3<<endl;//输出3 3 2
17         return 0;
18 }

推荐阅读