引入
stack(栈)容器是一种先进后出的容器,两端只有一个开口,只能从这一个开口插入和删除数据。可以想象成一个底面封住的纸筒,如果放羽毛球的话,只能从杯口放入且从杯口取,先取的一定是最后放的球。羽毛球的存取顺序就是先进后出(或后进先出)。
在前面已经发布的栈这一篇中有更多例图供参考,可自行查看:数据结构------栈
在C++中使用该容器,需要加头文件stack:
#include < stack>
构造函数
- 默认构造函数,拷贝构造函数,赋值函数
cpp
void testQ() {
stack <int> stkT; //默认构造函数
stack<int> s1(stkT); //拷贝构造函数
//赋值函数
stack<int> s2=s1;
}
数据存取
push(elem);//向栈顶添加元素
pop();//从栈顶移除第一个元素
top();//返回栈顶元素
cpp
void testQ() {
stack <int> stk;
stk.push(11);
stk.push(22);
stk.push(33); //11,22,33依次入栈
cout<<stk.top()<<endl; //获得栈顶元素:33
stk.pop(); //栈顶元素33出栈,还剩11、22
stk.pop(); //栈顶元素22出栈,还剩11
cout<<stk.top(); //获得栈顶元素:11
}
判空与大小
empty();//判断堆栈是否为空
size();//返回堆栈的大小
cpp
void testQ() {
stack <int> stk;
stk.push(11);
stk.push(22);
stk.push(33); //11,22,33依次入栈
cout<<stk.size()<<endl; //获得栈大小:3
stk.pop(); //栈顶元素33出栈,还剩11、22
stk.pop(); //栈顶元素22出栈,还剩11
cout << stk.empty() << endl; //判空:不为空,输出0
stk.pop(); //栈顶元素11出栈,为空栈
cout << stk.empty(); //判空:为空,输出1
}
例题
输入一个十进制整数,输出对应的二进制数。
cpp
void testQ() {
stack<int> stk;
int n = 0;
cin >> n;
while (n) {
stk.push(n % 2);
n /= 2;
}
while (!stk.empty()) {
cout << stk.top();
stk.pop();
}
}