当前位置:编程学习 > C/C++ >>

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++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,