1、栈的基础概念: 栈是一种线性表,是一种先进后出(FILO)的数据结构。栈顶和栈底:进出的一端称为栈顶(top),另一端称为栈底(base)。栈可以用顺序存储,也可以用链式存储,分别称为顺序栈和链栈。这里我们只侧重讲顺序栈,链栈了解即可。入栈:入栈前要判断是否栈满,如果栈已满,则入栈失败;否则将元素放入栈顶,栈顶指针向上移动一个位置(top++)。出栈:出栈前要判断是否栈空,如果栈是空的,则出栈失败;否则将栈顶元素暂存给一个变量,栈顶指针向下移动一个空间(top--)。
2、stack容器简介: 又称栈,默认实现的底层容器是deque,本身是容器适配器,没有适用的迭代器。stack容器中的所有元素都必须符合“后进先出”的条件,只能在栈顶删除元素,只能在栈顶添加元素,只有栈顶元素可以访问,不提供遍历stack内元素的功能,不支持下标操作,因此入栈和出栈都要通过循环实现。
栈的代码实现:
手写栈:
int stk[100], top = 0; // 定义一个栈,大小为100
int size = top - 0; // 栈内元素个数
if(top == 0) // 判空,表示栈为空
int t = stk[top]; // 取栈顶,前置条件:栈不为空top > 0
stk[++top] = t; // 入栈,将 t 入栈
top--; // 出栈,前置条件:栈不为空 top > 0
stack实现:
#include<iostream>
#include<stack> //栈的头文件
using namespace std;
int main()
{
stack<int> s; //定义栈
for(int i=1; i<=10; i++) //将1-10入栈
{
s.push(i);
}
while(!s.empty()) //首先输出栈顶元素,然后将栈顶元素出栈,循环执行,直到栈为空。
{
cout <<s.top()<<" "; //输出首元素
s.pop(); //栈顶元素出栈
}
return 0;
}