ACM- 栈
栈的定义:栈是一种只能在一端进行的插入或删除操作的线性表。表中允许进行插入,删除操作的一端称为栈顶,栈的另一端称为栈底。
栈的特点:后进先出
C++标准库中的基本使用方法:
栈的头文件
#include <stack>
定义栈,以如下形式实现:stack<type> s;其中type为数据类型(如int,fioat,char等)
常用操作有:
s.push(item); //将item压入栈顶 s.pop(); //删除栈顶的元素,但不会返回 s.top(); //返回栈顶的元素,但不会删除 s.size(); //返回栈中元素的个数 s.empty(); //检查栈是否为空,如果为空返回true,否则返回false
栈的使用:
杭电1022(栈的使用)
AC代码: #include <iostream> #include <stack> using namespace std; int main() { int n; char in[100]; char out[100]; int flag[100]; //记录判断进站还是出站的标志 while(cin>>n) { cin>>in; cin>>out; stack<char> s;//模拟站台的栈 int i=0; //i代表进站序列的对应列车 int j=0; //j代表出站序列的对应列车 for(i;i<=n;) { if(s.empty()) //如果栈为空则处理第一个数据 { s.push(in[i]); flag[i+j] = 0; i++; //第一个数据入栈,计数器加一 } if(!s.empty()&&s.top()!=out[j])//如果栈不空并且不等于当前出站序列中的数字,则必须再将后面的标号入栈 { s.push(in[i]); flag[i+j] = 0; i++; } if(!s.empty()&&s.top()==out[j]) { s.pop(); flag[i+j] = 1; j++; } //如果栈不为空,并且栈顶元素等于当前出站序列中的当前位置,则出栈,并让出站序列向后,开始处理下一个出站序列 } if(s.empty()) //若栈为空,证明全部列车都已经出站,所以题目给出的出站序列有可能实现 { cout<<"Yes."<<endl; for(i=0;i<2*n;i++) { if(flag[i]!=1)cout<<"in"<<endl; else cout<<"out"<<endl; } cout<<"FINISH"<<endl; } else //若栈不为空,说明有列车滞留在车站中,肯定不能实现题目给出的出站序列 { cout<<"No."<<endl; cout<<"FINISH"<<endl; } } return 0; }