什么是栈?
看图说话 栈只能在末尾添加元素 和删除元素 这就是栈
下面栈的应用 nyoj 括号匹配 点击打开链接
51 nod 大鱼吃小鱼 点击打开链接
nyoj 代码 如下
#include<bits/stdc++.h>
using namespace std;
string a;
int b[10001]={0};
int main(){
int n;
cin>>n;
while(n--){
cin>>a; int i=0;
int len=a.size();
int l=1; int k;
for(int j=0;j<len;j++){
if(a[j]=='['){
k=1;
b[l++]=k;
}
else if(a[j]==']'){
k=1;
if(b[l-1]==k){
b[l-1]=0; //清零
l--;
}
else{
i=1;
}
}
else if(a[j]=='('){
k=2;
b[l++]=k;
}
else if(a[j]==')'){
k=2;
if(b[l-1]==k){
b[l-1]=0; //清零
l--;
}
else{
i=1;
}
}
else {
k=0;
};
}
if(b[1]==0&&i==0){
cout<<"Yes"<<endl;
}
if(i==1){
cout<<"No"<<endl;
}
}
return 0;
}
stl 栈 来写
#include<bits/stdc++.h>
#include<stack>
using namespace std;
string a;
int main(){
int n,j;
cin>>n;
while(n--){
stack<char>s; int i=0;
cin>>a;
int len=a.size();
for(j=0;j<len;j++){
if(a[j]=='['||a[j]=='('){
s.push(a[j]);
}
if(a[j]==')'){
if(s.empty()) { i=1; cout<<"No"<<endl; break;} //一定要 判断栈是否为空 否则会错 !!
if(s.top()=='('){
s.pop();
}
else{
break;
}
}
if(a[j]==']'){
if(s.empty()) {i=1; cout<<"No"<<endl; break;}
if(s.top()=='['){
s.pop();
}
else{
break;
}
}
}
if(i==0){
if(s.empty()) cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
}
return 0;
}
51 大鱼吃小鱼
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin>>n;
int a[10001]={0};
int l=1;int k,i;int s=0;
for(int j=0;j<n;j++){
cin>>i>>k;
if(k==1){
a[l++]=i;
}
else{
int z;
for(z=l;z>=1;z--){
if(a[z]>i) break;
else{
a[z]=0; //要记得清零
}
}
if(z==0) s++;
l=z+1;
}
}
for(int z=1;z<l;z++){
if(a[z]!=0) s++;
}
cout<<s<<endl;
return 0;
}
栈 代码
#include<bits/stdc++.h>
#include<stack>
using namespace std;
int main(){
stack<int>q;
int n,x,y,s=0;
cin>>n;
for(int j=0;j<n;j++){
cin>>x>>y;
if(y==1){
q.push(x);
}
else{
while(!q.empty()){
if(q.top()<x){
q.pop();
}
else break;
}
if(q.empty()) s++;
}
}
int z=q.size();
cout<<s+z<<endl;
return 0;
}