zoukankan      html  css  js  c++  java
  • UVa 673 Parentheses Balance(栈的使用)

     栈
    Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu
     

    Description

    You are given a string consisting of parentheses () and []. A string of this type is said to be correct:

    (a)
    if it is the empty string
    (b)
    if A and B are correct, AB is correct,
    (c)
    if A is correct, () and [] is correct.

    Write a program that takes a sequence of strings of this type and check their correctness. Your program can assume that the maximum string length is 128.

    Input 

    The file contains a positive integer n and a sequence of n strings of parentheses () and [], one string a line.

    Output 

    A sequence of Yes or No on the output file.

    Sample Input 

    3
    ([])
    (([()])))
    ([()[]()])()
    

    Sample Output 

    Yes
    No
    Yes
    

    对于一个初学者,对栈的使用会有疑惑,什么是栈?怎么用它?很多书上解释的并不清楚。

    简单说一下:

    栈 (stack)又称堆栈,是一种受限制的线性表,其限制是只允许在表的一端进行插入和删除。

    允许操作的一端称为栈顶(top),不允许 操作的称为栈底(bottom),每每次删除的数据元素总是最后插入的数据元素,所以栈又称为“后入先出表”,这是和队列的区别。

    栈的储存结构有2种:一种顺序储存结构(顺序栈),一种链式储存结构(链式栈)。

    今天主要来看看如何实现一个栈的功能

    首先,栈的基本功能有:

    1.       empty 判断堆栈是否为空

    2.       pop   向堆栈里面压入一个数据

    3.       push        向堆栈压入一个数据

    4.       size          返回当前堆栈长度(即内部数据个数)

    5.       top           得到堆栈栈顶数据

    此题题意:

     输入一个包含()和[]的括号序列,判断是否合法。 

    具体递归定义如下:1.空串合法;2.如果A和B都合法,则AB合法;3.如果A合法则(A)和[A]都合法。 

    注意输入可能有空串

    直接用栈

    #include<iostream>
    #include<stack>
    #include<cstring>
    #include<cstdio>
    using namespace std;
    
    bool judge(char a,char b)
    {
      if(a=='['&&b==']')return 1;
      if(a=='('&&b==')')return 1;
      return 0;
    }
    
    bool left(char a)
    {
      if(a=='['||a=='(')return 1;
      return 0;
    }
    
    int main()
    {
      int cas;
      char s[200];
      cin>>cas;
      getchar();
    while(cas--)
    {
    stack<char>q;
    gets(s);
      if(strcmp(s,"
    ")==0)
    {
      cout<<"Yes"<<endl;
      continue;
    }
      for(int i=0;s[i];i++)
    {
      if(q.empty())
    {
        q.push(s[i]);
    }
      else if(!judge(q.top(),s[i]))
    {
      if(left(s[i]))
        q.push(s[i]);
    }
      else
    
        q.pop();
    }
      if(q.empty())
    
        cout<<"Yes"<<endl;
      else
    
        cout<<"No"<<endl;
    }
      return 0;
    }

       我自己的是下面这一种,可能更容易理解一些,也是栈的思想

      

    #include<stdio.h>
    #include<string.h>
    int main()
    {
        int i,j,k,T;
        int flag;
        int s[135],st,top;
        char c[135];
        scanf("%d",&T);
        getchar();
        while(T--)
        {
            fgets(c,sizeof(c),stdin);
            flag=0;
            j=0;
            for(i=0; c[i]!='
    '; i++)
            {
                if(c[i]=='(')
                    s[j++]=0;
                else if(c[i]=='[')
                    s[j++]=1;
                else if(c[i]==')')
                {
                    if(j!=0 && s[j-1]==0)
                        j--;
                    else
                    {
                        flag=1;
                        break;
                    }
                }
                else if(c[i]==']')
                {
                    if(j!=0 && s[j-1]==1)
                        j--;
                    else
                    {
                        flag=1;
                        break;
                    }
                }
                else
                {
                    flag=1;
                    break;
                }
            }
            if(flag==1|| j!=0)
                printf("No
    ");
            else
                printf("Yes
    ");
        }
        return 0;
    }

     看了别人代码加我百度才明白栈的用法,发现要学的好多。。

  • 相关阅读:
    9.12 其他样式;JS
    9.11 样式表
    9.9 样式表
    PHP延迟几秒后执行,PHP延迟执行,PHP停顿几毫秒后执行 usleep() 和 sleep()
    PHP 去除url参数中出现+、空格、=、%、&、#等字符的解决办法, PHP去除影响url路径的字符
    java第一堂课-常用的电脑快捷键操作和重要的dos命令
    常用第三方接口,支付宝支付,微信支付,软著,IOS开发者账号
    苹果开发者账号申请流程完整版 https://www.jianshu.com/p/655380201685
    thinkphp 去重查询
    将数据导【入】【excel表】格式 前端页面
  • 原文地址:https://www.cnblogs.com/hfc-xx/p/4661443.html
Copyright © 2011-2022 走看看