浅谈STL-栈(stack)及其应用
一、什么是栈?
C++中STL库中的数据类型。栈是一种特殊的数组,可以用来存储某种类型的数据,能从数组的同一端增加和删除数据。
如图
二、手写栈的写法
#include <iostream>
#define MAXLEN 1000
using namespace std;
struct Stack {
int tp;
int s[MAXLEN];
void init() {
tp=0;
}
bool push(int e) {
if(tp>=MAXLEN) return false;
s[tp] = e;
tp ++;
return true;
}
bool pop() {
if(tp<=0) return false;
tp -- ;
return true ;
}
bool empty() {
return tp==0;
}
int top() {
return s[tp-1];
}
int size() {
return tp;
}
}; //此代码摘自kdt讲义
三、stl库中的栈使用
头文件: #include <stack>
定义栈: stack<type> s;
入栈: s.push(e);
出栈: s.pop();
栈中元素个数: s.size();
判断栈空: s.empty();
取栈顶元素: s.top();
四、经典问题:括号匹配
#include<algorithm>
#include<iostream>
#include<string>
#include<cstdio>
#include<cmath>
#include <stack>
using namespace std;
stack<char> s;
string a;
int main(){
// freopen("AC.in","r",stdin);
// freopen("AC.out","w",stdout);
cin>>a;
int k=a.size();
for(int i=0;i<k;i++){
if(a[i]=='@') break;
else if(a[i]=='('){
s.push(a[i]);
}
else if(a[i]==')'){
if(s.empty()){
cout<<"NO";
return 0;
}
else s.pop();
}
}
if(!s.empty()) cout<<"NO";
else cout<<"YES";
// fclose(stdin);
// fclose(stdout);
return 0;
} //kdt2065
五、个人心得
学习栈的过程,是在学习STL中非常重要的部分。重在理解。虽说理解很重要,但是,记忆也是必不可少的一部分:栈必备的函数等一定要记熟,合理使用。
完结撒花✿✿ヽ(°▽°)ノ✿