栈
栈的概念
栈是一种只允许在一端进行数据插入和删除的线性表。如果定义了一个栈结构,那么添加和删除元素都只能在栈顶进行,不能在任意位置添加和删除元素,这就是栈这个数据结构后进先出的特性。
栈的创建
栈的本质其实还是线性表,因此可以创建一个足够大的数组来充当栈结构。再定义一个变量n用来记录栈中元素的个数,同时也可以标记栈顶的位置。
#include <iostream>
using namespace std;
const int N = 1e5 + 10;
int n;
int stk[N];
进栈
进栈的本质其实就是顺序表的尾插。这里我们依旧舍弃下标为0的位置,有效元素从1开始记录。
void push(int x)
{
stk[++n] = x;
}
出栈
出栈操作并不是真的删除元素,只需要将元素个数减1即可,本质上就是顺序表的尾删。
void pop()
{
n--;
}
栈顶元素
这里要注意,由于栈的特殊规定,不支持遍历整个栈中的元素。因此当我们查找栈中元素时,只能查找到栈顶元素。
int top()
{
return stk[n];
}
判断栈是否为空
bool empty()
{
return n == 0;
}
有效元素的个数
int size()
{
return n;
}
STL——stack
stack的创建
有了之前vector的铺垫,栈的使用应该会比较得心应手。
#include <stack>
stack<T> st; //T可以是任意类型
size & empty
size:返回栈中的实际元素个数
empty:返回栈是否为空
push & pop
push:进栈
pop:出栈
top
返回栈顶元素,但是不会删除栈顶元素
所有函数的测试代码如下:
#include <iostream>
#include <stack>
using namespace std;
int main()
{
stack<int> st;
//让 1~10 进栈
for(int i = 1; i <= 10; i++)
{
st.push(i);
}
while(!st.empty()) //也可以写成 while(st.size())
{
cout << st.top() << endl;
st.pop();
}
return 0;
}