HDU 1022 栈的基本操作应用
首先先介绍下C++ STL 中的 stack. stack也是程序设计中常常用到的数据容器,STL为我们提供了stack的实现,因此在使用stack时必须包含头文件#include<stack>,并使用统一命名空间。
1.声明一个stack
stack<int> s1;
stack<string> s2;
stack<char> s3;
stack模板类需要2个模板参数,一个为元素类型,一个为容器类型,但是只有元素类型是必要的,在容器类型缺省时,默认为deque。
2.stack中的操作
stack<int> s;
s.push(x) 无返回值,将元素x压栈
s.pop(); 退栈,无返回值
s.top(); 取栈顶元素,返回栈顶元素
s.empty(); 判断栈是否为空,如果是空,返回1,否则返回0
s.size(); 返回栈中元素的个数
在栈中没有提供清空操作的函数,但是可以间接地实现清空栈,
while(!s.empty())
{
s.pop();
}
此题就是栈的基本应用。
#include <cstdio> #include <cstring> #include <stack> using namespace std; const int maxn = 10+10; int num1[maxn],num2[maxn]; char str[maxn]; bool flag[maxn]; int main() { int n; while(~scanf("%d",&n)) { scanf("%s",str); for(int i=0;i<n;i++) num1[i]=str[i]-'0'; scanf("%s",str); for(int i=0;i<n;i++) num2[i]=str[i]-'0'; stack<int> Stacks; int j=0,k=0; for(int i=0;i<n;i++) { Stacks.push(num1[i]); flag[k++]=true; while(!Stacks.empty()&&j<=n) { if(Stacks.top()==num2[j]) { Stacks.pop(); flag[k++]=false; j++; } else break; } } if(Stacks.empty()) { printf("Yes.\n"); for(int i=0;i<k;i++) { if(flag[i]) printf("in\n"); if(!flag[i]) printf("out\n"); } } else printf("No.\n"); printf("FINISH\n"); while(!Stacks.empty()) Stacks.pop(); } return 0; }
补充:软件开发 , C++ ,