定义:
栈(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 }