stack的定义
stack:栈,一个后进先出的容器。
先添加头文件#include。
stack name;
typename:可以任意基本数据类型或容器。
stack容器内元素的访问
stack中只能通过top()来访问栈顶元素。
#include <stdio.h>
#include <stack>
using namespace std;
int main()
{
stack<int> st;
for(int i=1; i<5; i++)
{
st.push(i); //push(i)用以把i压入栈,故此处依次入栈1 2 3 4 5
}
printf("%d\n", st.top()); //top()取栈顶元素
return 0;
}
5
stack常用函数实例解析
(1)push()
push(x)将x入栈,时间复杂度为O(1)。
(2)top()
top()获得栈顶元素,时间复杂度为O(1)。
(3)pop()
pop()用以弹出栈顶元素,时间复杂度为O(1)。
#include <stdio.h>
#include <stack>
using namespace std;
int main()
{
stack<int> st;
for(int i=1; i<5; i++)
{
st.push(i); //push(i)用以把i压入栈,故此处依次入栈1 2 3 4 5
}
for(int i=1; i<=3; i++)
{
st.pop(); //连续三次将栈顶元素出栈,即将5 4 3依次出栈
}
printf("%d\n", st.top()); //top()取栈顶元素
return 0;
}
2
(4)empty()
empty()可以检测stack内是否为空,返回true为空,返回false为非空,时间复杂度O(1)。
#include <stdio.h>
#include <stack>
using namespace std;
int main()
{
stack<int> st;
if(st.empty() == true) //一开始栈内没有元素,因此栈空
{
printf("Empty\n");
}
else
{
printf("Not Empty\n");
}
st.push(1);
if(st.empty() == true) //入栈1后,栈非空
{
printf("Empty\n");
}
else
{
printf("Not Empty\n");
}
return 0;
}
Empty
Not Empty
(5)size()
size()返回stack内元素的个数,时间复杂度为O(1)。
#include <stdio.h>
#include <stack>
using namespace std;
int main()
{
stack<int> st;
for(int i=1; i<=5; i++)
{
st.push(i); //push(i)用以将i压入栈
}
printf("%d\n", st.size()); //栈内有5个元素
return 0;
}
stack的常见用途
stack用来模拟实现一些递归,防止程序对栈内存的限制而导致程序运行错。一般来说,程序的栈内存空间很小,有些题目来说,如果用普通的函数来进行递归,一旦递归层数过深,则会导致程序崩溃。如果用栈来模拟递归算法的实现,则可以避免这一方面问题。